summaryrefslogtreecommitdiff
path: root/tools/testing/selftests/bpf/progs/test_xdp_devmap_helpers.c
diff options
context:
space:
mode:
authorDavid Ahern <dsahern@kernel.org>2020-05-30 01:07:16 +0300
committerAlexei Starovoitov <ast@kernel.org>2020-06-02 00:48:32 +0300
commitd39aec79e5923bf984df991ffe51d4a2b7a9e746 (patch)
tree315a7405aabf602bdff8a8d95450829cd25f61ba /tools/testing/selftests/bpf/progs/test_xdp_devmap_helpers.c
parent2778797037a658be71a6c55b54700bf58ba21eb7 (diff)
downloadlinux-d39aec79e5923bf984df991ffe51d4a2b7a9e746.tar.xz
selftest: Add tests for XDP programs in devmap entries
Add tests to verify ability to add an XDP program to a entry in a DEVMAP. Add negative tests to show DEVMAP programs can not be attached to devices as a normal XDP program, and accesses to egress_ifindex require BPF_XDP_DEVMAP attach type. Signed-off-by: David Ahern <dsahern@kernel.org> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Acked-by: Toke Høiland-Jørgensen <toke@redhat.com> Link: https://lore.kernel.org/bpf/20200529220716.75383-6-dsahern@kernel.org Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Diffstat (limited to 'tools/testing/selftests/bpf/progs/test_xdp_devmap_helpers.c')
-rw-r--r--tools/testing/selftests/bpf/progs/test_xdp_devmap_helpers.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/tools/testing/selftests/bpf/progs/test_xdp_devmap_helpers.c b/tools/testing/selftests/bpf/progs/test_xdp_devmap_helpers.c
new file mode 100644
index 000000000000..e5c0f131c8a7
--- /dev/null
+++ b/tools/testing/selftests/bpf/progs/test_xdp_devmap_helpers.c
@@ -0,0 +1,22 @@
+// SPDX-License-Identifier: GPL-2.0
+/* fails to load without expected_attach_type = BPF_XDP_DEVMAP
+ * because of access to egress_ifindex
+ */
+#include "vmlinux.h"
+#include <bpf/bpf_helpers.h>
+
+SEC("xdp_dm_log")
+int xdpdm_devlog(struct xdp_md *ctx)
+{
+ char fmt[] = "devmap redirect: dev %u -> dev %u len %u\n";
+ void *data_end = (void *)(long)ctx->data_end;
+ void *data = (void *)(long)ctx->data;
+ unsigned int len = data_end - data;
+
+ bpf_trace_printk(fmt, sizeof(fmt),
+ ctx->ingress_ifindex, ctx->egress_ifindex, len);
+
+ return XDP_PASS;
+}
+
+char _license[] SEC("license") = "GPL";