summaryrefslogtreecommitdiff
path: root/include/arch/x86_64/linux/bpf_common.h
blob: 322e5c3adcd245d13b49381ab6f570717f32aa1e (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
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
#ifndef __LINUX_BPF_COMMON_H__
#define __LINUX_BPF_COMMON_H__

/* Instruction classes */
#define BPF_CLASS(code) ((code) & 0x07)
#define BPF_LD		0x00
#define BPF_LDX		0x01
#define BPF_ST		0x02
#define BPF_STX		0x03
#define BPF_ALU		0x04
#define BPF_JMP		0x05
#define BPF_RET		0x06
#define BPF_MISC	0x07

/* ld/ldx fields */
#define BPF_SIZE(code) ((code) & 0x18)
#define BPF_W	       0x00 /* 32-bit */
#define BPF_H	       0x08 /* 16-bit */
#define BPF_B	       0x10 /*  8-bit */
/* eBPF		BPF_DW		0x18    64-bit */
#define BPF_MODE(code) ((code) & 0xe0)
#define BPF_IMM	       0x00
#define BPF_ABS	       0x20
#define BPF_IND	       0x40
#define BPF_MEM	       0x60
#define BPF_LEN	       0x80
#define BPF_MSH	       0xa0

/* alu/jmp fields */
#define BPF_OP(code) ((code) & 0xf0)
#define BPF_ADD	     0x00
#define BPF_SUB	     0x10
#define BPF_MUL	     0x20
#define BPF_DIV	     0x30
#define BPF_OR	     0x40
#define BPF_AND	     0x50
#define BPF_LSH	     0x60
#define BPF_RSH	     0x70
#define BPF_NEG	     0x80
#define BPF_MOD	     0x90
#define BPF_XOR	     0xa0

#define BPF_JA	      0x00
#define BPF_JEQ	      0x10
#define BPF_JGT	      0x20
#define BPF_JGE	      0x30
#define BPF_JSET      0x40
#define BPF_SRC(code) ((code) & 0x08)
#define BPF_K	      0x00
#define BPF_X	      0x08

#ifndef BPF_MAXINSNS
#define BPF_MAXINSNS 4096
#endif

#endif /* __LINUX_BPF_COMMON_H__ */