diff options
author | Alexei Starovoitov <ast@plumgrid.com> | 2014-10-14 05:08:54 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-10-14 16:06:45 -0400 |
commit | c15952dc18d8a293d976ac6c06d44d9d98023b45 (patch) | |
tree | d45efd559f784aeb11c85bd8fcbef8808e7d61b5 /include/uapi | |
parent | 91c4467e3c76b6d40ecc29ed71d3aa1e0285ab80 (diff) |
net: filter: move common defines into bpf_common.h
userspace programs that use eBPF instruction macros need to include two files:
uapi/linux/filter.h and uapi/linux/bpf.h
Move common macro definitions that are shared between classic BPF and eBPF
into uapi/linux/bpf_common.h, so that user app can include only one bpf.h file
Cc: Daniel Borkmann <dborkman@redhat.com>
Signed-off-by: Alexei Starovoitov <ast@plumgrid.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/uapi')
-rw-r--r-- | include/uapi/linux/Kbuild | 1 | ||||
-rw-r--r-- | include/uapi/linux/bpf.h | 1 | ||||
-rw-r--r-- | include/uapi/linux/bpf_common.h | 55 | ||||
-rw-r--r-- | include/uapi/linux/filter.h | 56 |
4 files changed, 58 insertions, 55 deletions
diff --git a/include/uapi/linux/Kbuild b/include/uapi/linux/Kbuild index 70e150ebc6c9..1115d68b150f 100644 --- a/include/uapi/linux/Kbuild +++ b/include/uapi/linux/Kbuild | |||
@@ -68,6 +68,7 @@ header-y += binfmts.h | |||
68 | header-y += blkpg.h | 68 | header-y += blkpg.h |
69 | header-y += blktrace_api.h | 69 | header-y += blktrace_api.h |
70 | header-y += bpf.h | 70 | header-y += bpf.h |
71 | header-y += bpf_common.h | ||
71 | header-y += bpqether.h | 72 | header-y += bpqether.h |
72 | header-y += bsg.h | 73 | header-y += bsg.h |
73 | header-y += btrfs.h | 74 | header-y += btrfs.h |
diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h index 31b0ac208a52..d18316f9e9c4 100644 --- a/include/uapi/linux/bpf.h +++ b/include/uapi/linux/bpf.h | |||
@@ -8,6 +8,7 @@ | |||
8 | #define _UAPI__LINUX_BPF_H__ | 8 | #define _UAPI__LINUX_BPF_H__ |
9 | 9 | ||
10 | #include <linux/types.h> | 10 | #include <linux/types.h> |
11 | #include <linux/bpf_common.h> | ||
11 | 12 | ||
12 | /* Extended instruction set based on top of classic BPF */ | 13 | /* Extended instruction set based on top of classic BPF */ |
13 | 14 | ||
diff --git a/include/uapi/linux/bpf_common.h b/include/uapi/linux/bpf_common.h new file mode 100644 index 000000000000..a5c220e0828f --- /dev/null +++ b/include/uapi/linux/bpf_common.h | |||
@@ -0,0 +1,55 @@ | |||
1 | #ifndef _UAPI__LINUX_BPF_COMMON_H__ | ||
2 | #define _UAPI__LINUX_BPF_COMMON_H__ | ||
3 | |||
4 | /* Instruction classes */ | ||
5 | #define BPF_CLASS(code) ((code) & 0x07) | ||
6 | #define BPF_LD 0x00 | ||
7 | #define BPF_LDX 0x01 | ||
8 | #define BPF_ST 0x02 | ||
9 | #define BPF_STX 0x03 | ||
10 | #define BPF_ALU 0x04 | ||
11 | #define BPF_JMP 0x05 | ||
12 | #define BPF_RET 0x06 | ||
13 | #define BPF_MISC 0x07 | ||
14 | |||
15 | /* ld/ldx fields */ | ||
16 | #define BPF_SIZE(code) ((code) & 0x18) | ||
17 | #define BPF_W 0x00 | ||
18 | #define BPF_H 0x08 | ||
19 | #define BPF_B 0x10 | ||
20 | #define BPF_MODE(code) ((code) & 0xe0) | ||
21 | #define BPF_IMM 0x00 | ||
22 | #define BPF_ABS 0x20 | ||
23 | #define BPF_IND 0x40 | ||
24 | #define BPF_MEM 0x60 | ||
25 | #define BPF_LEN 0x80 | ||
26 | #define BPF_MSH 0xa0 | ||
27 | |||
28 | /* alu/jmp fields */ | ||
29 | #define BPF_OP(code) ((code) & 0xf0) | ||
30 | #define BPF_ADD 0x00 | ||
31 | #define BPF_SUB 0x10 | ||
32 | #define BPF_MUL 0x20 | ||
33 | #define BPF_DIV 0x30 | ||
34 | #define BPF_OR 0x40 | ||
35 | #define BPF_AND 0x50 | ||
36 | #define BPF_LSH 0x60 | ||
37 | #define BPF_RSH 0x70 | ||
38 | #define BPF_NEG 0x80 | ||
39 | #define BPF_MOD 0x90 | ||
40 | #define BPF_XOR 0xa0 | ||
41 | |||
42 | #define BPF_JA 0x00 | ||
43 | #define BPF_JEQ 0x10 | ||
44 | #define BPF_JGT 0x20 | ||
45 | #define BPF_JGE 0x30 | ||
46 | #define BPF_JSET 0x40 | ||
47 | #define BPF_SRC(code) ((code) & 0x08) | ||
48 | #define BPF_K 0x00 | ||
49 | #define BPF_X 0x08 | ||
50 | |||
51 | #ifndef BPF_MAXINSNS | ||
52 | #define BPF_MAXINSNS 4096 | ||
53 | #endif | ||
54 | |||
55 | #endif /* _UAPI__LINUX_BPF_COMMON_H__ */ | ||
diff --git a/include/uapi/linux/filter.h b/include/uapi/linux/filter.h index 253b4d42cf2b..47785d5ecf17 100644 --- a/include/uapi/linux/filter.h +++ b/include/uapi/linux/filter.h | |||
@@ -7,7 +7,7 @@ | |||
7 | 7 | ||
8 | #include <linux/compiler.h> | 8 | #include <linux/compiler.h> |
9 | #include <linux/types.h> | 9 | #include <linux/types.h> |
10 | 10 | #include <linux/bpf_common.h> | |
11 | 11 | ||
12 | /* | 12 | /* |
13 | * Current version of the filter code architecture. | 13 | * Current version of the filter code architecture. |
@@ -32,56 +32,6 @@ struct sock_fprog { /* Required for SO_ATTACH_FILTER. */ | |||
32 | struct sock_filter __user *filter; | 32 | struct sock_filter __user *filter; |
33 | }; | 33 | }; |
34 | 34 | ||
35 | /* | ||
36 | * Instruction classes | ||
37 | */ | ||
38 | |||
39 | #define BPF_CLASS(code) ((code) & 0x07) | ||
40 | #define BPF_LD 0x00 | ||
41 | #define BPF_LDX 0x01 | ||
42 | #define BPF_ST 0x02 | ||
43 | #define BPF_STX 0x03 | ||
44 | #define BPF_ALU 0x04 | ||
45 | #define BPF_JMP 0x05 | ||
46 | #define BPF_RET 0x06 | ||
47 | #define BPF_MISC 0x07 | ||
48 | |||
49 | /* ld/ldx fields */ | ||
50 | #define BPF_SIZE(code) ((code) & 0x18) | ||
51 | #define BPF_W 0x00 | ||
52 | #define BPF_H 0x08 | ||
53 | #define BPF_B 0x10 | ||
54 | #define BPF_MODE(code) ((code) & 0xe0) | ||
55 | #define BPF_IMM 0x00 | ||
56 | #define BPF_ABS 0x20 | ||
57 | #define BPF_IND 0x40 | ||
58 | #define BPF_MEM 0x60 | ||
59 | #define BPF_LEN 0x80 | ||
60 | #define BPF_MSH 0xa0 | ||
61 | |||
62 | /* alu/jmp fields */ | ||
63 | #define BPF_OP(code) ((code) & 0xf0) | ||
64 | #define BPF_ADD 0x00 | ||
65 | #define BPF_SUB 0x10 | ||
66 | #define BPF_MUL 0x20 | ||
67 | #define BPF_DIV 0x30 | ||
68 | #define BPF_OR 0x40 | ||
69 | #define BPF_AND 0x50 | ||
70 | #define BPF_LSH 0x60 | ||
71 | #define BPF_RSH 0x70 | ||
72 | #define BPF_NEG 0x80 | ||
73 | #define BPF_MOD 0x90 | ||
74 | #define BPF_XOR 0xa0 | ||
75 | |||
76 | #define BPF_JA 0x00 | ||
77 | #define BPF_JEQ 0x10 | ||
78 | #define BPF_JGT 0x20 | ||
79 | #define BPF_JGE 0x30 | ||
80 | #define BPF_JSET 0x40 | ||
81 | #define BPF_SRC(code) ((code) & 0x08) | ||
82 | #define BPF_K 0x00 | ||
83 | #define BPF_X 0x08 | ||
84 | |||
85 | /* ret - BPF_K and BPF_X also apply */ | 35 | /* ret - BPF_K and BPF_X also apply */ |
86 | #define BPF_RVAL(code) ((code) & 0x18) | 36 | #define BPF_RVAL(code) ((code) & 0x18) |
87 | #define BPF_A 0x10 | 37 | #define BPF_A 0x10 |
@@ -91,10 +41,6 @@ struct sock_fprog { /* Required for SO_ATTACH_FILTER. */ | |||
91 | #define BPF_TAX 0x00 | 41 | #define BPF_TAX 0x00 |
92 | #define BPF_TXA 0x80 | 42 | #define BPF_TXA 0x80 |
93 | 43 | ||
94 | #ifndef BPF_MAXINSNS | ||
95 | #define BPF_MAXINSNS 4096 | ||
96 | #endif | ||
97 | |||
98 | /* | 44 | /* |
99 | * Macros for filter block array initializers. | 45 | * Macros for filter block array initializers. |
100 | */ | 46 | */ |