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; uint8_t xdp_mode;
unsigned int nr_cpus; struct ebpf_timeout_config ebpf_t_config;
} AFPThreadVars; } AFPThreadVars;
@ -631,7 +631,7 @@ static int AFPRead(AFPThreadVars *ptv)
#ifdef HAVE_PACKET_EBPF #ifdef HAVE_PACKET_EBPF
p->afp_v.v4_map_fd = ptv->v4_map_fd; p->afp_v.v4_map_fd = ptv->v4_map_fd;
p->afp_v.v6_map_fd = ptv->v6_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 #endif
} }
if (ptv->flags & AFP_XDPBYPASS) { if (ptv->flags & AFP_XDPBYPASS) {
@ -639,7 +639,7 @@ static int AFPRead(AFPThreadVars *ptv)
#ifdef HAVE_PACKET_EBPF #ifdef HAVE_PACKET_EBPF
p->afp_v.v4_map_fd = ptv->v4_map_fd; p->afp_v.v4_map_fd = ptv->v4_map_fd;
p->afp_v.v6_map_fd = ptv->v6_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 #endif
} }
@ -918,7 +918,7 @@ static int AFPReadFromRing(AFPThreadVars *ptv)
#ifdef HAVE_PACKET_EBPF #ifdef HAVE_PACKET_EBPF
p->afp_v.v4_map_fd = ptv->v4_map_fd; p->afp_v.v4_map_fd = ptv->v4_map_fd;
p->afp_v.v6_map_fd = ptv->v6_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 #endif
} }
if (ptv->flags & AFP_XDPBYPASS) { if (ptv->flags & AFP_XDPBYPASS) {
@ -926,7 +926,7 @@ static int AFPReadFromRing(AFPThreadVars *ptv)
#ifdef HAVE_PACKET_EBPF #ifdef HAVE_PACKET_EBPF
p->afp_v.v4_map_fd = ptv->v4_map_fd; p->afp_v.v4_map_fd = ptv->v4_map_fd;
p->afp_v.v6_map_fd = ptv->v6_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 #endif
} }
@ -1054,14 +1054,14 @@ static inline int AFPParsePacketV3(AFPThreadVars *ptv, struct tpacket_block_desc
#ifdef HAVE_PACKET_EBPF #ifdef HAVE_PACKET_EBPF
p->afp_v.v4_map_fd = ptv->v4_map_fd; p->afp_v.v4_map_fd = ptv->v4_map_fd;
p->afp_v.v6_map_fd = ptv->v6_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 #endif
} else if (ptv->flags & AFP_XDPBYPASS) { } else if (ptv->flags & AFP_XDPBYPASS) {
p->BypassPacketsFlow = AFPXDPBypassCallback; p->BypassPacketsFlow = AFPXDPBypassCallback;
#ifdef HAVE_PACKET_EBPF #ifdef HAVE_PACKET_EBPF
p->afp_v.v4_map_fd = ptv->v4_map_fd; p->afp_v.v4_map_fd = ptv->v4_map_fd;
p->afp_v.v6_map_fd = ptv->v6_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 #endif
} }
@ -2583,7 +2583,7 @@ TmEcode ReceiveAFPThreadInit(ThreadVars *tv, const void *initdata, void **data)
ptv->ebpf_lb_fd = afpconfig->ebpf_lb_fd; ptv->ebpf_lb_fd = afpconfig->ebpf_lb_fd;
ptv->ebpf_filter_fd = afpconfig->ebpf_filter_fd; ptv->ebpf_filter_fd = afpconfig->ebpf_filter_fd;
ptv->xdp_mode = afpconfig->xdp_mode; ptv->xdp_mode = afpconfig->xdp_mode;
ptv->nr_cpus = UtilCpuGetNumProcessorsConfigured(); ptv->ebpf_t_config.cpus_count = UtilCpuGetNumProcessorsConfigured();
#ifdef HAVE_PACKET_EBPF #ifdef HAVE_PACKET_EBPF
if (ptv->flags & (AFP_BYPASS|AFP_XDPBYPASS)) { 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"); 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 #endif
#ifdef PACKET_STATISTICS #ifdef PACKET_STATISTICS
@ -2689,7 +2689,10 @@ TmEcode ReceiveAFPThreadDeinit(ThreadVars *tv, void *data)
AFPSwitchState(ptv, AFP_STATE_DOWN); AFPSwitchState(ptv, AFP_STATE_DOWN);
#ifdef HAVE_PACKET_XDP #ifdef HAVE_PACKET_XDP
if ((ptv->ebpf_t_config.flags & EBPF_XDP_CODE) &&
(!(ptv->ebpf_t_config.flags & EBPF_PINNED_MAPS))) {
EBPFSetupXDP(ptv->iface, -1, ptv->xdp_mode); EBPFSetupXDP(ptv->iface, -1, ptv->xdp_mode);
}
#endif #endif
if (ptv->data != NULL) { if (ptv->data != NULL) {
SCFree(ptv->data); SCFree(ptv->data);

Loading…
Cancel
Save