summaryrefslogtreecommitdiff
path: root/include/arch/x86_64/linux/filter.h
blob: 151913e2d5a41cd818c6d68df64e70926cc429b2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
/*
 * Linux Socket Filter Data Structures
 */

#ifndef __LINUX_FILTER_H__
#define __LINUX_FILTER_H__

#include <linux/types.h>
#include <linux/bpf_common.h>

/*
 * Current version of the filter code architecture.
 */
#define BPF_MAJOR_VERSION 1
#define BPF_MINOR_VERSION 1

/*
 *	Try and keep these values and structures similar to BSD, especially
 *	the BPF code definitions which need to match so you can share filters
 */

struct sock_filter { /* Filter block */
	__u16 code;  /* Actual filter code */
	__u8 jt;     /* Jump true */
	__u8 jf;     /* Jump false */
	__u32 k;     /* Generic multiuse field */
};

struct sock_fprog {	    /* Required for SO_ATTACH_FILTER. */
	unsigned short len; /* Number of filter blocks */
	struct sock_filter *filter;
};

/* ret - BPF_K and BPF_X also apply */
#define BPF_RVAL(code) ((code) & 0x18)
#define BPF_A	       0x10

/* misc */
#define BPF_MISCOP(code) ((code) & 0xf8)
#define BPF_TAX		 0x00
#define BPF_TXA		 0x80

/*
 * Macros for filter block array initializers.
 */
#ifndef BPF_STMT
#define BPF_STMT(code, k) { (unsigned short)(code), 0, 0, k }
#endif
#ifndef BPF_JUMP
#define BPF_JUMP(code, k, jt, jf) { (unsigned short)(code), jt, jf, k }
#endif

/*
 * Number of scratch memory words for: BPF_ST and BPF_STX
 */
#define BPF_MEMWORDS 16

/* RATIONALE. Negative offsets are invalid in BPF.
   We use them to reference ancillary data.
   Unlike introduction new instructions, it does not break
   existing compilers/optimizers.
 */
#define SKF_AD_OFF		(-0x1000)
#define SKF_AD_PROTOCOL		0
#define SKF_AD_PKTTYPE		4
#define SKF_AD_IFINDEX		8
#define SKF_AD_NLATTR		12
#define SKF_AD_NLATTR_NEST	16
#define SKF_AD_MARK		20
#define SKF_AD_QUEUE		24
#define SKF_AD_HATYPE		28
#define SKF_AD_RXHASH		32
#define SKF_AD_CPU		36
#define SKF_AD_ALU_XOR_X	40
#define SKF_AD_VLAN_TAG		44
#define SKF_AD_VLAN_TAG_PRESENT 48
#define SKF_AD_PAY_OFFSET	52
#define SKF_AD_RANDOM		56
#define SKF_AD_VLAN_TPID	60
#define SKF_AD_MAX		64

#define SKF_NET_OFF (-0x100000)
#define SKF_LL_OFF  (-0x200000)

#define BPF_NET_OFF SKF_NET_OFF
#define BPF_LL_OFF  SKF_LL_OFF

#endif /* __LINUX_FILTER_H__ */