From: Marcus Wichelmann <marcus.wichelmann@hetzner-cloud.de>
To: netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
bpf@vger.kernel.org, linux-kselftest@vger.kernel.org
Cc: willemdebruijn.kernel@gmail.com, jasowang@redhat.com,
andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com,
kuba@kernel.org, pabeni@redhat.com, andrii@kernel.org,
eddyz87@gmail.com, mykolal@fb.com, ast@kernel.org,
daniel@iogearbox.net, martin.lau@linux.dev, song@kernel.org,
yonghong.song@linux.dev, john.fastabend@gmail.com,
kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com,
jolsa@kernel.org, shuah@kernel.org, hawk@kernel.org,
marcus.wichelmann@hetzner-cloud.de
Subject: [PATCH bpf-next v3 5/6] selftests/bpf: add test for XDP metadata support in tun driver
Date: Mon, 24 Feb 2025 15:29:08 +0000 [thread overview]
Message-ID: <20250224152909.3911544-6-marcus.wichelmann@hetzner-cloud.de> (raw)
In-Reply-To: <20250224152909.3911544-1-marcus.wichelmann@hetzner-cloud.de>
Add a selftest that creates a tap device, attaches XDP and TC programs,
writes a packet with a test payload into the tap device and checks the
test result. This test ensures that the XDP metadata support in the tun
driver is enabled and that the metadata size is correctly passed to the
skb.
See the previous commit ("selftests/bpf: refactor xdp_context_functional
test and bpf program") for details about the test design.
Signed-off-by: Marcus Wichelmann <marcus.wichelmann@hetzner-cloud.de>
---
.../bpf/prog_tests/xdp_context_test_run.c | 64 +++++++++++++++++++
1 file changed, 64 insertions(+)
diff --git a/tools/testing/selftests/bpf/prog_tests/xdp_context_test_run.c b/tools/testing/selftests/bpf/prog_tests/xdp_context_test_run.c
index 4043f220d7c0..60aad6bd8882 100644
--- a/tools/testing/selftests/bpf/prog_tests/xdp_context_test_run.c
+++ b/tools/testing/selftests/bpf/prog_tests/xdp_context_test_run.c
@@ -8,6 +8,7 @@
#define TX_NAME "veth1"
#define TX_NETNS "xdp_context_tx"
#define RX_NETNS "xdp_context_rx"
+#define TAP_NAME "tap0"
#define TEST_PAYLOAD_LEN 32
static const __u8 test_payload[TEST_PAYLOAD_LEN] = {
@@ -251,3 +252,66 @@ void test_xdp_context_veth(void)
netns_free(tx_ns);
}
+void test_xdp_context_tuntap(void)
+{
+ LIBBPF_OPTS(bpf_tc_hook, tc_hook, .attach_point = BPF_TC_INGRESS);
+ LIBBPF_OPTS(bpf_tc_opts, tc_opts, .handle = 1, .priority = 1);
+ struct test_xdp_meta *skel = NULL;
+ __u8 packet[sizeof(struct ethhdr) + TEST_PAYLOAD_LEN];
+ int tap_fd = -1;
+ int tap_ifindex;
+ int ret;
+
+ tap_fd = open_tuntap(TAP_NAME, true);
+ if (!ASSERT_GE(tap_fd, 0, "open_tuntap"))
+ goto close;
+
+ /* By default, Linux sends IPv6 multicast listener reports which
+ * interfere with this test. Set the IFF_NOARP flag to ensure
+ * silence on the interface.
+ */
+ SYS(close, "ip link set dev " TAP_NAME " arp off");
+ SYS(close, "ip link set dev " TAP_NAME " up");
+
+ skel = test_xdp_meta__open_and_load();
+ if (!ASSERT_OK_PTR(skel, "open and load skeleton"))
+ goto close;
+
+ tap_ifindex = if_nametoindex(TAP_NAME);
+ if (!ASSERT_GE(tap_ifindex, 0, "if_nametoindex"))
+ goto close;
+
+ tc_hook.ifindex = tap_ifindex;
+ ret = bpf_tc_hook_create(&tc_hook);
+ if (!ASSERT_OK(ret, "bpf_tc_hook_create"))
+ goto close;
+
+ tc_opts.prog_fd = bpf_program__fd(skel->progs.ing_cls);
+ ret = bpf_tc_attach(&tc_hook, &tc_opts);
+ if (!ASSERT_OK(ret, "bpf_tc_attach"))
+ goto close;
+
+ ret = bpf_xdp_attach(tap_ifindex, bpf_program__fd(skel->progs.ing_xdp),
+ 0, NULL);
+ if (!ASSERT_GE(ret, 0, "bpf_xdp_attach"))
+ goto close;
+
+ /* The ethernet header is not relevant for this test and doesn't need to
+ * be meaningful.
+ */
+ struct ethhdr eth = { 0 };
+
+ memcpy(packet, ð, sizeof(eth));
+ memcpy(packet + sizeof(eth), test_payload, TEST_PAYLOAD_LEN);
+
+ ret = write(tap_fd, packet, sizeof(packet));
+ if (!ASSERT_EQ(ret, sizeof(packet), "write packet"))
+ goto close;
+
+ assert_test_result(skel);
+
+close:
+ if (tap_fd >= 0)
+ close(tap_fd);
+ test_xdp_meta__destroy(skel);
+}
--
2.43.0
next prev parent reply other threads:[~2025-02-24 15:29 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-24 15:29 [PATCH bpf-next v3 0/6] XDP metadata support for " Marcus Wichelmann
2025-02-24 15:29 ` [PATCH bpf-next v3 1/6] net: tun: enable XDP metadata support Marcus Wichelmann
2025-02-26 5:50 ` Jason Wang
2025-02-24 15:29 ` [PATCH bpf-next v3 2/6] net: tun: enable transfer of XDP metadata to skb Marcus Wichelmann
2025-02-25 18:26 ` Willem de Bruijn
2025-02-26 5:59 ` Jason Wang
2025-02-24 15:29 ` [PATCH bpf-next v3 3/6] selftests/bpf: move open_tuntap to network helpers Marcus Wichelmann
2025-02-25 18:24 ` Willem de Bruijn
2025-02-26 6:31 ` Jason Wang
2025-02-24 15:29 ` [PATCH bpf-next v3 4/6] selftests/bpf: refactor xdp_context_functional test and bpf program Marcus Wichelmann
2025-02-24 17:12 ` Stanislav Fomichev
2025-02-26 15:56 ` Marcus Wichelmann
2025-02-25 15:07 ` Marcus Wichelmann
2025-02-25 18:23 ` Willem de Bruijn
2025-02-26 17:39 ` Marcus Wichelmann
2025-02-25 18:32 ` Willem de Bruijn
2025-02-26 17:14 ` Marcus Wichelmann
2025-02-24 15:29 ` Marcus Wichelmann [this message]
2025-02-24 17:14 ` [PATCH bpf-next v3 5/6] selftests/bpf: add test for XDP metadata support in tun driver Stanislav Fomichev
2025-02-26 18:50 ` Marcus Wichelmann
2025-02-26 19:00 ` Stanislav Fomichev
2025-02-26 19:29 ` Marcus Wichelmann
2025-02-24 15:29 ` [PATCH bpf-next v3 6/6] selftests/bpf: fix file descriptor assertion in open_tuntap helper Marcus Wichelmann
2025-02-25 18:24 ` Willem de Bruijn
2025-02-25 14:55 ` [PATCH bpf-next v3 0/6] XDP metadata support for tun driver Willem de Bruijn
2025-02-25 15:03 ` Marcus Wichelmann
2025-02-25 18:14 ` Willem de Bruijn
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250224152909.3911544-6-marcus.wichelmann@hetzner-cloud.de \
--to=marcus.wichelmann@hetzner-cloud.de \
--cc=andrew+netdev@lunn.ch \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=eddyz87@gmail.com \
--cc=edumazet@google.com \
--cc=haoluo@google.com \
--cc=hawk@kernel.org \
--cc=jasowang@redhat.com \
--cc=john.fastabend@gmail.com \
--cc=jolsa@kernel.org \
--cc=kpsingh@kernel.org \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=martin.lau@linux.dev \
--cc=mykolal@fb.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=sdf@fomichev.me \
--cc=shuah@kernel.org \
--cc=song@kernel.org \
--cc=willemdebruijn.kernel@gmail.com \
--cc=yonghong.song@linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®