forked from luck/tmp_suning_uos_patched
2e5d72c15f
Add support for the XDP_SHARED_UMEM mode to the xdpsock sample application. As libbpf does not have a built in XDP program for this mode, we use an explicitly loaded XDP program. This also serves as an example on how to write your own XDP program that can route to an AF_XDP socket. Signed-off-by: Magnus Karlsson <magnus.karlsson@intel.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Tested-by: William Tu <u9012063@gmail.com> Acked-by: Jonathan Lemon <jonathan.lemon@gmail.com> Link: https://lore.kernel.org/bpf/1573148860-30254-3-git-send-email-magnus.karlsson@intel.com
25 lines
589 B
C
25 lines
589 B
C
// SPDX-License-Identifier: GPL-2.0
|
|
#include <linux/bpf.h>
|
|
#include "bpf_helpers.h"
|
|
#include "xdpsock.h"
|
|
|
|
/* This XDP program is only needed for the XDP_SHARED_UMEM mode.
|
|
* If you do not use this mode, libbpf can supply an XDP program for you.
|
|
*/
|
|
|
|
struct {
|
|
__uint(type, BPF_MAP_TYPE_XSKMAP);
|
|
__uint(max_entries, MAX_SOCKS);
|
|
__uint(key_size, sizeof(int));
|
|
__uint(value_size, sizeof(int));
|
|
} xsks_map SEC(".maps");
|
|
|
|
static unsigned int rr;
|
|
|
|
SEC("xdp_sock") int xdp_sock_prog(struct xdp_md *ctx)
|
|
{
|
|
rr = (rr + 1) & (MAX_SOCKS - 1);
|
|
|
|
return bpf_redirect_map(&xsks_map, rr, XDP_DROP);
|
|
}
|