diff options
author | Tushar Vyavahare <tushar.vyavahare@intel.com> | 2023-09-27 19:22:41 +0530 |
---|---|---|
committer | Daniel Borkmann <daniel@iogearbox.net> | 2023-10-04 15:26:02 +0200 |
commit | 6d198a89c004723d9d2fff469fdcb1074c9642d6 (patch) | |
tree | d98df1dfe90f189683585d513d95fc6172c03ba4 /tools/testing/selftests/bpf/progs/xsk_xdp_progs.c | |
parent | fc2cb86495da6b67518bedbf1a2d49af220d1521 (diff) | |
download | linux-stable-6d198a89c004723d9d2fff469fdcb1074c9642d6.tar.gz linux-stable-6d198a89c004723d9d2fff469fdcb1074c9642d6.tar.bz2 linux-stable-6d198a89c004723d9d2fff469fdcb1074c9642d6.zip |
selftests/xsk: Add a test for shared umem feature
Add a new test for testing shared umem feature. This is accomplished by
adding a new XDP program and using the multiple sockets.
The new XDP program redirects the packets based on the destination MAC
address.
Signed-off-by: Tushar Vyavahare <tushar.vyavahare@intel.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Magnus Karlsson <magnus.karlsson@intel.com>
Link: https://lore.kernel.org/bpf/20230927135241.2287547-9-tushar.vyavahare@intel.com
Diffstat (limited to 'tools/testing/selftests/bpf/progs/xsk_xdp_progs.c')
-rw-r--r-- | tools/testing/selftests/bpf/progs/xsk_xdp_progs.c | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/tools/testing/selftests/bpf/progs/xsk_xdp_progs.c b/tools/testing/selftests/bpf/progs/xsk_xdp_progs.c index 734f231a8534..ccde6a4c6319 100644 --- a/tools/testing/selftests/bpf/progs/xsk_xdp_progs.c +++ b/tools/testing/selftests/bpf/progs/xsk_xdp_progs.c @@ -3,11 +3,12 @@ #include <linux/bpf.h> #include <bpf/bpf_helpers.h> +#include <linux/if_ether.h> #include "xsk_xdp_common.h" struct { __uint(type, BPF_MAP_TYPE_XSKMAP); - __uint(max_entries, 1); + __uint(max_entries, 2); __uint(key_size, sizeof(int)); __uint(value_size, sizeof(int)); } xsk SEC(".maps"); @@ -52,4 +53,21 @@ SEC("xdp.frags") int xsk_xdp_populate_metadata(struct xdp_md *xdp) return bpf_redirect_map(&xsk, 0, XDP_DROP); } +SEC("xdp") int xsk_xdp_shared_umem(struct xdp_md *xdp) +{ + void *data = (void *)(long)xdp->data; + void *data_end = (void *)(long)xdp->data_end; + struct ethhdr *eth = data; + + if (eth + 1 > data_end) + return XDP_DROP; + + /* Redirecting packets based on the destination MAC address */ + idx = ((unsigned int)(eth->h_dest[5])) / 2; + if (idx > MAX_SOCKETS) + return XDP_DROP; + + return bpf_redirect_map(&xsk, idx, XDP_DROP); +} + char _license[] SEC("license") = "GPL"; |