24 #ifndef __UTIL_EBPF_H__
25 #define __UTIL_EBPF_H__
29 #ifdef HAVE_PACKET_EBPF
31 #define XDP_FLAGS_UPDATE_IF_NOEXIST (1U << 0)
32 #define XDP_FLAGS_SKB_MODE (1U << 1)
33 #define XDP_FLAGS_DRV_MODE (1U << 2)
34 #define XDP_FLAGS_HW_MODE (1U << 3)
66 typedef struct EBPFBypassData_ {
72 #define EBPF_SOCKET_FILTER (1<<0)
73 #define EBPF_XDP_CODE (1<<1)
74 #define EBPF_PINNED_MAPS (1<<2)
75 #define EBPF_XDP_HW_MODE (1<<3)
77 int EBPFGetMapFDByName(
const char *iface,
const char *name);
78 int EBPFLoadFile(
const char *iface,
const char *path,
const char * section,
79 int *val,
struct ebpf_timeout_config *config);
80 int EBPFSetupXDP(
const char *iface,
int fd, uint8_t
flags);
83 struct timespec *curtime,
85 int EBPFCheckBypassedFlowCreate(
ThreadVars *th_v,
struct timespec *curtime,
void *data);
87 void EBPFRegisterExtension(
void);
89 void EBPFBuildCPUSet(
ConfNode *node,
char *iface);
91 int EBPFSetPeerIface(
const char *iface,
const char *out_iface);
93 int EBPFUpdateFlow(
Flow *f,
Packet *p,
void *data);
94 bool EBPFBypassUpdate(
Flow *f,
void *data, time_t tsec);
95 void EBPFBypassFree(
void *data);
97 void EBPFDeleteKey(
int fd,
void *key);
99 #ifdef BUILD_UNIX_SOCKET
100 TmEcode EBPFGetBypassedStats(json_t *cmd, json_t *answer,
void *data);
103 #define __bpf_percpu_val_align __attribute__((__aligned__(8)))
105 #define BPF_DECLARE_PERCPU(type, name, nr_cpus) \
106 struct { type v; } __bpf_percpu_val_align \
108 #define BPF_PERCPU(name, cpu) name[(cpu)].v