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
Showing the changes to include/uapi/linux (4 of 4 files). Show all
Unified · Split
| @@ -68,6 +68,7 @@ header-y += binfmts.h · 67 unmodified lines | ||
| 68 | 68 | header-y += blkpg.h |
| 69 | 69 | header-y += blktrace_api.h |
| 70 | 70 | header-y += bpf.h |
| 71 | +header-y += bpf_common.h | |
| 71 | 72 | header-y += bpqether.h |
| 72 | 73 | header-y += bsg.h |
| 73 | 74 | header-y += btrfs.h |
| @@ -8,6 +8,7 @@ · 7 unmodified lines | ||
| 8 | 8 | #define _UAPI__LINUX_BPF_H__ |
| 9 | 9 | |
| 10 | 10 | #include <linux/types.h> |
| 11 | +#include <linux/bpf_common.h> | |
| 11 | 12 | |
| 12 | 13 | /* Extended instruction set based on top of classic BPF */ |
| 13 | 14 | |
| @@ -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__ */ | |
| @@ -7,7 +7,7 @@ · 6 unmodified lines | ||
| 7 | 7 | |
| 8 | 8 | #include <linux/compiler.h> |
| 9 | 9 | #include <linux/types.h> |
| 10 | − | |
| 10 | +#include <linux/bpf_common.h> | |
| 11 | 11 | |
| 12 | 12 | /* |
| 13 | 13 | * Current version of the filter code architecture. |
| @@ -32,56 +32,6 @@ struct sock_fprog { /* Required for SO_ATTACH_FILTER. */ · 18 unmodified lines | ||
| 32 | 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 | 35 | /* ret - BPF_K and BPF_X also apply */ |
| 86 | 36 | #define BPF_RVAL(code) ((code) & 0x18) |
| 87 | 37 | #define BPF_A 0x10 |
| @@ -91,10 +41,6 @@ struct sock_fprog { /* Required for SO_ATTACH_FILTER. */ · 3 unmodified lines | ||
| 91 | 41 | #define BPF_TAX 0x00 |
| 92 | 42 | #define BPF_TXA 0x80 |
| 93 | 43 | |
| 94 | −#ifndef BPF_MAXINSNS | |
| 95 | −#define BPF_MAXINSNS 4096 | |
| 96 | −#endif | |
| 97 | − | |
| 98 | 44 | /* |
| 99 | 45 | * Macros for filter block array initializers. |
| 100 | 46 | */ |