net: mctp: test: Add extaddr routing output test

Test that the routing code preserves the haddr data in a skb through an
input route operation.

Signed-off-by: Jeremy Kerr <jk@codeconstruct.com.au>
Link: https://patch.msgid.link/20250702-dev-forwarding-v5-6-1468191da8a4@codeconstruct.com.au
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
Jeremy Kerr 2025-07-02 14:20:06 +08:00 committed by Paolo Abeni
parent 96b341a8e7
commit 46ee16462f

View file

@ -1294,6 +1294,58 @@ static void mctp_test_route_output_key_create(struct kunit *test)
mctp_test_destroy_dev(dev);
}
static void mctp_test_route_extaddr_input(struct kunit *test)
{
static const unsigned char haddr[] = { 0xaa, 0x55 };
struct mctp_test_pktqueue tpq;
struct mctp_skb_cb *cb, *cb2;
const unsigned int len = 40;
struct mctp_test_dev *dev;
struct sk_buff *skb, *skb2;
struct mctp_dst dst;
struct mctp_hdr hdr;
struct socket *sock;
int rc;
hdr.ver = 1;
hdr.src = 10;
hdr.dest = 8;
hdr.flags_seq_tag = FL_S | FL_E | FL_TO;
__mctp_route_test_init(test, &dev, &dst, &tpq, &sock, MCTP_NET_ANY);
skb = mctp_test_create_skb(&hdr, len);
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, skb);
/* set our hardware addressing data */
cb = mctp_cb(skb);
memcpy(cb->haddr, haddr, sizeof(haddr));
cb->halen = sizeof(haddr);
mctp_test_skb_set_dev(skb, dev);
rc = mctp_dst_input(&dst, skb);
KUNIT_ASSERT_EQ(test, rc, 0);
mctp_test_dst_release(&dst, &tpq);
skb2 = skb_recv_datagram(sock->sk, MSG_DONTWAIT, &rc);
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, skb2);
KUNIT_ASSERT_EQ(test, skb2->len, len);
cb2 = mctp_cb(skb2);
/* Received SKB should have the hardware addressing as set above.
* We're likely to have the same actual cb here (ie., cb == cb2),
* but it's the comparison that we care about
*/
KUNIT_EXPECT_EQ(test, cb2->halen, sizeof(haddr));
KUNIT_EXPECT_MEMEQ(test, cb2->haddr, haddr, sizeof(haddr));
skb_free_datagram(sock->sk, skb2);
mctp_test_destroy_dev(dev);
}
static struct kunit_case mctp_test_cases[] = {
KUNIT_CASE_PARAM(mctp_test_fragment, mctp_frag_gen_params),
KUNIT_CASE_PARAM(mctp_test_rx_input, mctp_rx_input_gen_params),
@ -1310,6 +1362,7 @@ static struct kunit_case mctp_test_cases[] = {
KUNIT_CASE(mctp_test_fragment_flow),
KUNIT_CASE(mctp_test_route_output_key_create),
KUNIT_CASE(mctp_test_route_input_cloned_frag),
KUNIT_CASE(mctp_test_route_extaddr_input),
{}
};