blob: b97725af2ac0ef14893ec459701a2d1ae4ac76a4 [file] [log] [blame]
Ben Cheng30692c62013-10-15 18:26:18 -07001#ifndef _XT_BPF_H
2#define _XT_BPF_H
3
4#include <linux/filter.h>
Christopher Ferris2fd4b3c2017-02-21 12:32:08 -08005#include <linux/limits.h>
Ben Cheng30692c62013-10-15 18:26:18 -07006#include <linux/types.h>
7
8#define XT_BPF_MAX_NUM_INSTR 64
Christopher Ferris2fd4b3c2017-02-21 12:32:08 -08009#define XT_BPF_PATH_MAX (XT_BPF_MAX_NUM_INSTR * sizeof(struct sock_filter))
Ben Cheng30692c62013-10-15 18:26:18 -070010
Christopher Ferris7c0b6392015-01-23 15:34:26 -080011struct bpf_prog;
12
Ben Cheng30692c62013-10-15 18:26:18 -070013struct xt_bpf_info {
14 __u16 bpf_program_num_elem;
15 struct sock_filter bpf_program[XT_BPF_MAX_NUM_INSTR];
16
17 /* only used in the kernel */
Christopher Ferris7c0b6392015-01-23 15:34:26 -080018 struct bpf_prog *filter __attribute__((aligned(8)));
Ben Cheng30692c62013-10-15 18:26:18 -070019};
20
Christopher Ferris2fd4b3c2017-02-21 12:32:08 -080021enum xt_bpf_modes {
22 XT_BPF_MODE_BYTECODE,
23 XT_BPF_MODE_FD_PINNED,
24 XT_BPF_MODE_FD_ELF,
25};
26
27struct xt_bpf_info_v1 {
28 __u16 mode;
29 __u16 bpf_program_num_elem;
30 __s32 fd;
31 union {
32 struct sock_filter bpf_program[XT_BPF_MAX_NUM_INSTR];
33 char path[XT_BPF_PATH_MAX];
34 };
35
36 /* only used in the kernel */
37 struct bpf_prog *filter __attribute__((aligned(8)));
38};
39
Ben Cheng30692c62013-10-15 18:26:18 -070040#endif /*_XT_BPF_H */