1 | /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ |
2 | /* |
3 | * Linux Socket Filter Data Structures |
4 | */ |
5 | |
6 | #ifndef __LINUX_FILTER_H__ |
7 | #define __LINUX_FILTER_H__ |
8 | |
9 | |
10 | #include <linux/types.h> |
11 | #include <linux/bpf_common.h> |
12 | |
13 | /* |
14 | * Current version of the filter code architecture. |
15 | */ |
16 | #define BPF_MAJOR_VERSION 1 |
17 | #define BPF_MINOR_VERSION 1 |
18 | |
19 | /* |
20 | * Try and keep these values and structures similar to BSD, especially |
21 | * the BPF code definitions which need to match so you can share filters |
22 | */ |
23 | |
24 | struct sock_filter { /* Filter block */ |
25 | __u16 code; /* Actual filter code */ |
26 | __u8 jt; /* Jump true */ |
27 | __u8 jf; /* Jump false */ |
28 | __u32 k; /* Generic multiuse field */ |
29 | }; |
30 | |
31 | struct sock_fprog { /* Required for SO_ATTACH_FILTER. */ |
32 | unsigned short len; /* Number of filter blocks */ |
33 | struct sock_filter *filter; |
34 | }; |
35 | |
36 | /* ret - BPF_K and BPF_X also apply */ |
37 | #define BPF_RVAL(code) ((code) & 0x18) |
38 | #define BPF_A 0x10 |
39 | |
40 | /* misc */ |
41 | #define BPF_MISCOP(code) ((code) & 0xf8) |
42 | #define BPF_TAX 0x00 |
43 | #define BPF_TXA 0x80 |
44 | |
45 | /* |
46 | * Macros for filter block array initializers. |
47 | */ |
48 | #ifndef BPF_STMT |
49 | #define BPF_STMT(code, k) { (unsigned short)(code), 0, 0, k } |
50 | #endif |
51 | #ifndef BPF_JUMP |
52 | #define BPF_JUMP(code, k, jt, jf) { (unsigned short)(code), jt, jf, k } |
53 | #endif |
54 | |
55 | /* |
56 | * Number of scratch memory words for: BPF_ST and BPF_STX |
57 | */ |
58 | #define BPF_MEMWORDS 16 |
59 | |
60 | /* RATIONALE. Negative offsets are invalid in BPF. |
61 | We use them to reference ancillary data. |
62 | Unlike introduction new instructions, it does not break |
63 | existing compilers/optimizers. |
64 | */ |
65 | #define SKF_AD_OFF (-0x1000) |
66 | #define SKF_AD_PROTOCOL 0 |
67 | #define SKF_AD_PKTTYPE 4 |
68 | #define SKF_AD_IFINDEX 8 |
69 | #define SKF_AD_NLATTR 12 |
70 | #define SKF_AD_NLATTR_NEST 16 |
71 | #define SKF_AD_MARK 20 |
72 | #define SKF_AD_QUEUE 24 |
73 | #define SKF_AD_HATYPE 28 |
74 | #define SKF_AD_RXHASH 32 |
75 | #define SKF_AD_CPU 36 |
76 | #define SKF_AD_ALU_XOR_X 40 |
77 | #define SKF_AD_VLAN_TAG 44 |
78 | #define SKF_AD_VLAN_TAG_PRESENT 48 |
79 | #define SKF_AD_PAY_OFFSET 52 |
80 | #define SKF_AD_RANDOM 56 |
81 | #define SKF_AD_VLAN_TPID 60 |
82 | #define SKF_AD_MAX 64 |
83 | |
84 | #define SKF_NET_OFF (-0x100000) |
85 | #define SKF_LL_OFF (-0x200000) |
86 | |
87 | #define BPF_NET_OFF SKF_NET_OFF |
88 | #define BPF_LL_OFF SKF_LL_OFF |
89 | |
90 | #endif /* __LINUX_FILTER_H__ */ |
91 | |