xref: /linux/include/uapi/linux/bpf_common.h (revision 552c69b36ebd966186573b9c7a286b390935cce1)
16f52b16cSGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2c15952dcSAlexei Starovoitov #ifndef _UAPI__LINUX_BPF_COMMON_H__
3c15952dcSAlexei Starovoitov #define _UAPI__LINUX_BPF_COMMON_H__
4c15952dcSAlexei Starovoitov 
5c15952dcSAlexei Starovoitov /* Instruction classes */
6c15952dcSAlexei Starovoitov #define BPF_CLASS(code) ((code) & 0x07)
7c15952dcSAlexei Starovoitov #define		BPF_LD		0x00
8c15952dcSAlexei Starovoitov #define		BPF_LDX		0x01
9c15952dcSAlexei Starovoitov #define		BPF_ST		0x02
10c15952dcSAlexei Starovoitov #define		BPF_STX		0x03
11c15952dcSAlexei Starovoitov #define		BPF_ALU		0x04
12c15952dcSAlexei Starovoitov #define		BPF_JMP		0x05
13c15952dcSAlexei Starovoitov #define		BPF_RET		0x06
14c15952dcSAlexei Starovoitov #define		BPF_MISC        0x07
15c15952dcSAlexei Starovoitov 
16c15952dcSAlexei Starovoitov /* ld/ldx fields */
17c15952dcSAlexei Starovoitov #define BPF_SIZE(code)  ((code) & 0x18)
18*cb5f7334SJesper Dangaard Brouer #define		BPF_W		0x00 /* 32-bit */
19*cb5f7334SJesper Dangaard Brouer #define		BPF_H		0x08 /* 16-bit */
20*cb5f7334SJesper Dangaard Brouer #define		BPF_B		0x10 /*  8-bit */
21*cb5f7334SJesper Dangaard Brouer /* eBPF		BPF_DW		0x18    64-bit */
22c15952dcSAlexei Starovoitov #define BPF_MODE(code)  ((code) & 0xe0)
23c15952dcSAlexei Starovoitov #define		BPF_IMM		0x00
24c15952dcSAlexei Starovoitov #define		BPF_ABS		0x20
25c15952dcSAlexei Starovoitov #define		BPF_IND		0x40
26c15952dcSAlexei Starovoitov #define		BPF_MEM		0x60
27c15952dcSAlexei Starovoitov #define		BPF_LEN		0x80
28c15952dcSAlexei Starovoitov #define		BPF_MSH		0xa0
29c15952dcSAlexei Starovoitov 
30c15952dcSAlexei Starovoitov /* alu/jmp fields */
31c15952dcSAlexei Starovoitov #define BPF_OP(code)    ((code) & 0xf0)
32c15952dcSAlexei Starovoitov #define		BPF_ADD		0x00
33c15952dcSAlexei Starovoitov #define		BPF_SUB		0x10
34c15952dcSAlexei Starovoitov #define		BPF_MUL		0x20
35c15952dcSAlexei Starovoitov #define		BPF_DIV		0x30
36c15952dcSAlexei Starovoitov #define		BPF_OR		0x40
37c15952dcSAlexei Starovoitov #define		BPF_AND		0x50
38c15952dcSAlexei Starovoitov #define		BPF_LSH		0x60
39c15952dcSAlexei Starovoitov #define		BPF_RSH		0x70
40c15952dcSAlexei Starovoitov #define		BPF_NEG		0x80
41c15952dcSAlexei Starovoitov #define		BPF_MOD		0x90
42c15952dcSAlexei Starovoitov #define		BPF_XOR		0xa0
43c15952dcSAlexei Starovoitov 
44c15952dcSAlexei Starovoitov #define		BPF_JA		0x00
45c15952dcSAlexei Starovoitov #define		BPF_JEQ		0x10
46c15952dcSAlexei Starovoitov #define		BPF_JGT		0x20
47c15952dcSAlexei Starovoitov #define		BPF_JGE		0x30
48c15952dcSAlexei Starovoitov #define		BPF_JSET        0x40
49c15952dcSAlexei Starovoitov #define BPF_SRC(code)   ((code) & 0x08)
50c15952dcSAlexei Starovoitov #define		BPF_K		0x00
51c15952dcSAlexei Starovoitov #define		BPF_X		0x08
52c15952dcSAlexei Starovoitov 
53c15952dcSAlexei Starovoitov #ifndef BPF_MAXINSNS
54c15952dcSAlexei Starovoitov #define BPF_MAXINSNS 4096
55c15952dcSAlexei Starovoitov #endif
56c15952dcSAlexei Starovoitov 
57c15952dcSAlexei Starovoitov #endif /* _UAPI__LINUX_BPF_COMMON_H__ */
58