aconf->xdp_mode = XDP_FLAGS_DRV_MODE;
} else if (!strcmp(xdp_mode, "hw")) {
aconf->xdp_mode = XDP_FLAGS_HW_MODE;
+ aconf->ebpf_t_config.flags |= EBPF_XDP_HW_MODE;
} else {
SCLogWarning(SC_ERR_INVALID_VALUE,
"Invalid xdp-mode value: '%s'", xdp_mode);
return -1;
}
+ if (config->flags & EBPF_XDP_HW_MODE) {
+ unsigned int ifindex = if_nametoindex(iface);
+ bpf_object__for_each_program(bpfprog, bpfobj) {
+ bpf_program__set_ifindex(bpfprog, ifindex);
+ }
+ bpf_map__for_each(map, bpfobj) {
+ bpf_map__set_ifindex(map, ifindex);
+ }
+ }
+
/* Let's check that our section is here */
bpf_object__for_each_program(bpfprog, bpfobj) {
const char *title = bpf_program__title(bpfprog, 0);
#define EBPF_SOCKET_FILTER (1<<0)
#define EBPF_XDP_CODE (1<<1)
#define EBPF_PINNED_MAPS (1<<2)
+#define EBPF_XDP_HW_MODE (1<<3)
int EBPFGetMapFDByName(const char *iface, const char *name);
int EBPFLoadFile(const char *iface, const char *path, const char * section,