History

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

Alexei Starovoitov committed 12 years ago

Commit c15952d1 parent 91c44674 files · +58 −55Browse files

Showing the changes to include/uapi/linux (4 of 4 files). Show all

Unified · Split

4 files
  1. include/uapi/linux/Kbuild +1 −0
  2. include/uapi/linux/bpf.h +1 −0
  3. include/uapi/linux/bpf_common.h +55 −0
  4. include/uapi/linux/filter.h +1 −55
include/uapi/linux/Kbuild+1−0
@@ -68,6 +68,7 @@ header-y += binfmts.h · 67 unmodified lines
6868 header-y += blkpg.h
6969 header-y += blktrace_api.h
7070 header-y += bpf.h
71+header-y += bpf_common.h
7172 header-y += bpqether.h
7273 header-y += bsg.h
7374 header-y += btrfs.h
include/uapi/linux/bpf.h+1−0
@@ -8,6 +8,7 @@ · 7 unmodified lines
88 #define _UAPI__LINUX_BPF_H__
99
1010 #include <linux/types.h>
11+#include <linux/bpf_common.h>
1112
1213 /* Extended instruction set based on top of classic BPF */
1314
include/uapi/linux/bpf_common.h+55−0
@@ -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__ */
include/uapi/linux/filter.h+1−55
@@ -7,7 +7,7 @@ · 6 unmodified lines
77
88 #include <linux/compiler.h>
99 #include <linux/types.h>
10−
10+#include <linux/bpf_common.h>
1111
1212 /*
1313 * Current version of the filter code architecture.
@@ -32,56 +32,6 @@ struct sock_fprog { /* Required for SO_ATTACH_FILTER. */ · 18 unmodified lines
3232 struct sock_filter __user *filter;
3333 };
3434
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−
8535 /* ret - BPF_K and BPF_X also apply */
8636 #define BPF_RVAL(code) ((code) & 0x18)
8737 #define BPF_A 0x10
@@ -91,10 +41,6 @@ struct sock_fprog { /* Required for SO_ATTACH_FILTER. */ · 3 unmodified lines
9141 #define BPF_TAX 0x00
9242 #define BPF_TXA 0x80
9343
94−#ifndef BPF_MAXINSNS
95−#define BPF_MAXINSNS 4096
96−#endif
97−
9844 /*
9945 * Macros for filter block array initializers.
10046 */