24#ifndef SURICATA_SOURCE_AFP_H
25#define SURICATA_SOURCE_AFP_H
27#ifndef HAVE_PACKET_FANOUT
28#define HAVE_PACKET_FANOUT 1
30#define PACKET_FANOUT 18
32#define PACKET_FANOUT_HASH 0
33#define PACKET_FANOUT_LB 1
34#define PACKET_FANOUT_CPU 2
35#define PACKET_FANOUT_ROLLOVER 3
36#define PACKET_FANOUT_RND 4
37#define PACKET_FANOUT_QM 5
39#define PACKET_FANOUT_FLAG_ROLLOVER 0x1000
40#define PACKET_FANOUT_FLAG_DEFRAG 0x8000
42#include <linux/if_packet.h>
46#ifdef HAVE_PACKET_EBPF
47#define AFP_MODE_XDP_BYPASS 1
48#define AFP_MODE_EBPF_BYPASS 2
49struct ebpf_timeout_config {
50 const char *pinned_maps_name;
58#define AFP_NEED_PEER (1 << 0)
60#define AFP_SOCK_PROTECT (1<<2)
61#define AFP_EMERGENCY_MODE (1<<3)
62#define AFP_TPACKET_V3 (1<<4)
63#define AFP_VLAN_IN_HEADER (1<<5)
64#define AFP_MMAP_LOCKED (1<<6)
65#define AFP_BYPASS (1<<7)
66#define AFP_XDPBYPASS (1<<8)
68#define AFP_COPY_MODE_NONE 0
69#define AFP_COPY_MODE_TAP 1
70#define AFP_COPY_MODE_IPS 2
72#define AFP_IFACE_NAME_LENGTH 48
78#define AFP_BLOCK_SIZE_DEFAULT_ORDER 5
81#define MAX_PACKET_SIZE 65561
86#define DEFAULT_TPACKET_DEFRAG_SNAPLEN 9216
121#ifdef HAVE_PACKET_EBPF
122 struct ebpf_timeout_config ebpf_t_config;
163#ifdef HAVE_PACKET_EBPF
166 unsigned int nr_cpus;
170#ifdef HAVE_PACKET_EBPF
171#define AFPV_CLEANUP(afpv) \
173 (afpv)->relptr = NULL; \
174 (afpv)->copy_mode = 0; \
175 (afpv)->vlan_tci = 0; \
176 (afpv)->peer = NULL; \
177 (afpv)->mpeer = NULL; \
178 (afpv)->v4_map_fd = -1; \
179 (afpv)->v6_map_fd = -1; \
182#define AFPV_CLEANUP(afpv) \
184 (afpv)->relptr = NULL; \
185 (afpv)->copy_mode = 0; \
186 (afpv)->vlan_tci = 0; \
187 (afpv)->peer = NULL; \
188 (afpv)->mpeer = NULL; \
struct HtpBodyChunk_ * next
void TmModuleReceiveAFPRegister(void)
Registration Function for RecieveAFP.
int AFPGetLinkType(const char *ifname)
void TmModuleDecodeAFPRegister(void)
Registration Function for DecodeAFP.
int AFPIsFanoutSupported(uint16_t cluster_id)
test if we can use FANOUT. Older kernels like those in CentOS6 have HAVE_PACKET_FANOUT defined but fa...
void AFPPeersListClean(void)
Clean the global peers list.
TmEcode AFPPeersListInit(void)
Init the global list of AFPPeer.
TmEcode AFPPeersListCheck(void)
Check that all AFPPeer got a peer.
struct AFPIfaceConfig_ AFPIfaceConfig
struct AFPPacketVars_ AFPPacketVars
per packet AF_PACKET vars
#define AFP_IFACE_NAME_LENGTH
SC_ATOMIC_DECLARE(unsigned int, ref)
void(* DerefFunc)(void *)
char iface[AFP_IFACE_NAME_LENGTH]
ChecksumValidationMode checksum_mode
const char * ebpf_filter_file
const char * xdp_filter_file
const char * ebpf_lb_file
per packet AF_PACKET vars
TAILQ_ENTRY(AFPPeer_) next
SC_ATOMIC_DECLARE(uint64_t, send_errors)
SC_ATOMIC_DECLARE(uint8_t, state)
char iface[AFP_IFACE_NAME_LENGTH]
SC_ATOMIC_DECLARE(int, sock_usage)
SC_ATOMIC_DECLARE(int, socket)
SC_ATOMIC_DECLARE(int, if_idx)