1 // SPDX-License-Identifier: GPL-2.0
2 #define KBUILD_MODNAME "foo"
3 #include <uapi/linux/bpf.h>
4 #include "bpf_helpers.h"
8 struct bpf_map_def
SEC("maps") qidconf_map
= {
9 .type
= BPF_MAP_TYPE_ARRAY
,
10 .key_size
= sizeof(int),
11 .value_size
= sizeof(int),
15 struct bpf_map_def
SEC("maps") xsks_map
= {
16 .type
= BPF_MAP_TYPE_XSKMAP
,
17 .key_size
= sizeof(int),
18 .value_size
= sizeof(int),
19 .max_entries
= MAX_SOCKS
,
22 struct bpf_map_def
SEC("maps") rr_map
= {
23 .type
= BPF_MAP_TYPE_PERCPU_ARRAY
,
24 .key_size
= sizeof(int),
25 .value_size
= sizeof(unsigned int),
30 int xdp_sock_prog(struct xdp_md
*ctx
)
32 int *qidconf
, key
= 0, idx
;
35 qidconf
= bpf_map_lookup_elem(&qidconf_map
, &key
);
39 if (*qidconf
!= ctx
->rx_queue_index
)
42 #if RR_LB /* NB! RR_LB is configured in xdpsock.h */
43 rr
= bpf_map_lookup_elem(&rr_map
, &key
);
47 *rr
= (*rr
+ 1) & (MAX_SOCKS
- 1);
53 return bpf_redirect_map(&xsks_map
, idx
, 0);
56 char _license
[] SEC("license") = "GPL";