blob: da161b56c79e443afacce238d4a120b373673db9 [file] [log] [blame]
Willem de Bruijne6f30c72013-01-18 07:17:30 +00001#ifndef _XT_BPF_H
2#define _XT_BPF_H
3
4#include <linux/filter.h>
Willem de Bruijneb8925e2016-12-06 16:25:02 -05005#include <linux/limits.h>
Willem de Bruijne6f30c72013-01-18 07:17:30 +00006#include <linux/types.h>
7
8#define XT_BPF_MAX_NUM_INSTR 64
Willem de Bruijneb8925e2016-12-06 16:25:02 -05009#define XT_BPF_PATH_MAX (XT_BPF_MAX_NUM_INSTR * sizeof(struct sock_filter))
Willem de Bruijne6f30c72013-01-18 07:17:30 +000010
Alexei Starovoitov7ae457c2014-07-30 20:34:16 -070011struct bpf_prog;
Pablo Neirae10038a2014-07-29 18:12:15 +020012
Willem de Bruijne6f30c72013-01-18 07:17:30 +000013struct 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 */
Alexei Starovoitov7ae457c2014-07-30 20:34:16 -070018 struct bpf_prog *filter __attribute__((aligned(8)));
Willem de Bruijne6f30c72013-01-18 07:17:30 +000019};
20
Willem de Bruijneb8925e2016-12-06 16:25:02 -050021enum xt_bpf_modes {
22 XT_BPF_MODE_BYTECODE,
23 XT_BPF_MODE_FD_PINNED,
24 XT_BPF_MODE_FD_ELF,
25};
Shmulik Ladkani7e3c72f2017-10-09 15:27:15 +030026#define XT_BPF_MODE_PATH_PINNED XT_BPF_MODE_FD_PINNED
Willem de Bruijneb8925e2016-12-06 16:25:02 -050027
28struct xt_bpf_info_v1 {
29 __u16 mode;
30 __u16 bpf_program_num_elem;
31 __s32 fd;
32 union {
33 struct sock_filter bpf_program[XT_BPF_MAX_NUM_INSTR];
34 char path[XT_BPF_PATH_MAX];
35 };
36
37 /* only used in the kernel */
38 struct bpf_prog *filter __attribute__((aligned(8)));
39};
40
Willem de Bruijne6f30c72013-01-18 07:17:30 +000041#endif /*_XT_BPF_H */