af-packet: conditionaly remove XDP filter

Only remove the XDP filter if we are in XDP mode and not using the
pinned maps.
pull/3952/head
Eric Leblond 6 years ago committed by Victor Julien
parent 19c0a5edf5
commit 4cf531008e

@ -292,7 +292,7 @@ typedef struct AFPThreadVars_
uint8_t xdp_mode;
unsigned int nr_cpus;
struct ebpf_timeout_config ebpf_t_config;
} AFPThreadVars;
@ -631,7 +631,7 @@ static int AFPRead(AFPThreadVars *ptv)
#ifdef HAVE_PACKET_EBPF
p->afp_v.v4_map_fd = ptv->v4_map_fd;
p->afp_v.v6_map_fd = ptv->v6_map_fd;
p->afp_v.nr_cpus = ptv->nr_cpus;
p->afp_v.nr_cpus = ptv->ebpf_t_config.cpus_count;
#endif
}
if (ptv->flags & AFP_XDPBYPASS) {
@ -639,7 +639,7 @@ static int AFPRead(AFPThreadVars *ptv)
#ifdef HAVE_PACKET_EBPF
p->afp_v.v4_map_fd = ptv->v4_map_fd;
p->afp_v.v6_map_fd = ptv->v6_map_fd;
p->afp_v.nr_cpus = ptv->nr_cpus;
p->afp_v.nr_cpus = ptv->ebpf_t_config.cpus_count;
#endif
}
@ -918,7 +918,7 @@ static int AFPReadFromRing(AFPThreadVars *ptv)
#ifdef HAVE_PACKET_EBPF
p->afp_v.v4_map_fd = ptv->v4_map_fd;
p->afp_v.v6_map_fd = ptv->v6_map_fd;
p->afp_v.nr_cpus = ptv->nr_cpus;
p->afp_v.nr_cpus = ptv->ebpf_t_config.cpus_count;
#endif
}
if (ptv->flags & AFP_XDPBYPASS) {
@ -926,7 +926,7 @@ static int AFPReadFromRing(AFPThreadVars *ptv)
#ifdef HAVE_PACKET_EBPF
p->afp_v.v4_map_fd = ptv->v4_map_fd;
p->afp_v.v6_map_fd = ptv->v6_map_fd;
p->afp_v.nr_cpus = ptv->nr_cpus;
p->afp_v.nr_cpus = ptv->ebpf_t_config.cpus_count;
#endif
}
@ -1054,14 +1054,14 @@ static inline int AFPParsePacketV3(AFPThreadVars *ptv, struct tpacket_block_desc
#ifdef HAVE_PACKET_EBPF
p->afp_v.v4_map_fd = ptv->v4_map_fd;
p->afp_v.v6_map_fd = ptv->v6_map_fd;
p->afp_v.nr_cpus = ptv->nr_cpus;
p->afp_v.nr_cpus = ptv->ebpf_t_config.cpus_count;
#endif
} else if (ptv->flags & AFP_XDPBYPASS) {
p->BypassPacketsFlow = AFPXDPBypassCallback;
#ifdef HAVE_PACKET_EBPF
p->afp_v.v4_map_fd = ptv->v4_map_fd;
p->afp_v.v6_map_fd = ptv->v6_map_fd;
p->afp_v.nr_cpus = ptv->nr_cpus;
p->afp_v.nr_cpus = ptv->ebpf_t_config.cpus_count;
#endif
}
@ -2583,7 +2583,7 @@ TmEcode ReceiveAFPThreadInit(ThreadVars *tv, const void *initdata, void **data)
ptv->ebpf_lb_fd = afpconfig->ebpf_lb_fd;
ptv->ebpf_filter_fd = afpconfig->ebpf_filter_fd;
ptv->xdp_mode = afpconfig->xdp_mode;
ptv->nr_cpus = UtilCpuGetNumProcessorsConfigured();
ptv->ebpf_t_config.cpus_count = UtilCpuGetNumProcessorsConfigured();
#ifdef HAVE_PACKET_EBPF
if (ptv->flags & (AFP_BYPASS|AFP_XDPBYPASS)) {
@ -2596,7 +2596,7 @@ TmEcode ReceiveAFPThreadInit(ThreadVars *tv, const void *initdata, void **data)
SCLogError(SC_ERR_INVALID_VALUE, "Can't find eBPF map fd for '%s'", "flow_table_v6");
}
}
ptv->nr_cpus = afpconfig->ebpf_t_config.cpus_count;
ptv->ebpf_t_config = afpconfig->ebpf_t_config;
#endif
#ifdef PACKET_STATISTICS
@ -2689,7 +2689,10 @@ TmEcode ReceiveAFPThreadDeinit(ThreadVars *tv, void *data)
AFPSwitchState(ptv, AFP_STATE_DOWN);
#ifdef HAVE_PACKET_XDP
EBPFSetupXDP(ptv->iface, -1, ptv->xdp_mode);
if ((ptv->ebpf_t_config.flags & EBPF_XDP_CODE) &&
(!(ptv->ebpf_t_config.flags & EBPF_PINNED_MAPS))) {
EBPFSetupXDP(ptv->iface, -1, ptv->xdp_mode);
}
#endif
if (ptv->data != NULL) {
SCFree(ptv->data);

Loading…
Cancel
Save