| /* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */ |
| |
| #ifndef __LINUX_FILTER_H |
| #define __LINUX_FILTER_H |
| |
| #include <linux/bpf.h> |
| |
| #define BPF_ALU64_IMM(OP, DST, IMM) \ |
| ((struct bpf_insn) { \ |
| .code = BPF_ALU64 | BPF_OP(OP) | BPF_K, \ |
| .dst_reg = DST, \ |
| .src_reg = 0, \ |
| .off = 0, \ |
| .imm = IMM }) |
| |
| #define BPF_MOV64_IMM(DST, IMM) \ |
| ((struct bpf_insn) { \ |
| .code = BPF_ALU64 | BPF_MOV | BPF_K, \ |
| .dst_reg = DST, \ |
| .src_reg = 0, \ |
| .off = 0, \ |
| .imm = IMM }) |
| |
| #define BPF_EXIT_INSN() \ |
| ((struct bpf_insn) { \ |
| .code = BPF_JMP | BPF_EXIT, \ |
| .dst_reg = 0, \ |
| .src_reg = 0, \ |
| .off = 0, \ |
| .imm = 0 }) |
| |
| #define BPF_EMIT_CALL(FUNC) \ |
| ((struct bpf_insn) { \ |
| .code = BPF_JMP | BPF_CALL, \ |
| .dst_reg = 0, \ |
| .src_reg = 0, \ |
| .off = 0, \ |
| .imm = ((FUNC) - BPF_FUNC_unspec) }) |
| |
| #define BPF_LDX_MEM(SIZE, DST, SRC, OFF) \ |
| ((struct bpf_insn) { \ |
| .code = BPF_LDX | BPF_SIZE(SIZE) | BPF_MEM, \ |
| .dst_reg = DST, \ |
| .src_reg = SRC, \ |
| .off = OFF, \ |
| .imm = 0 }) |
| |
| #define BPF_STX_MEM(SIZE, DST, SRC, OFF) \ |
| ((struct bpf_insn) { \ |
| .code = BPF_STX | BPF_SIZE(SIZE) | BPF_MEM, \ |
| .dst_reg = DST, \ |
| .src_reg = SRC, \ |
| .off = OFF, \ |
| .imm = 0 }) |
| |
| #define BPF_ST_MEM(SIZE, DST, OFF, IMM) \ |
| ((struct bpf_insn) { \ |
| .code = BPF_ST | BPF_SIZE(SIZE) | BPF_MEM, \ |
| .dst_reg = DST, \ |
| .src_reg = 0, \ |
| .off = OFF, \ |
| .imm = IMM }) |
| |
| #define BPF_MOV64_REG(DST, SRC) \ |
| ((struct bpf_insn) { \ |
| .code = BPF_ALU64 | BPF_MOV | BPF_X, \ |
| .dst_reg = DST, \ |
| .src_reg = SRC, \ |
| .off = 0, \ |
| .imm = 0 }) |
| |
| #define BPF_MOV32_IMM(DST, IMM) \ |
| ((struct bpf_insn) { \ |
| .code = BPF_ALU | BPF_MOV | BPF_K, \ |
| .dst_reg = DST, \ |
| .src_reg = 0, \ |
| .off = 0, \ |
| .imm = IMM }) |
| |
| #define BPF_LD_IMM64_RAW_FULL(DST, SRC, OFF1, OFF2, IMM1, IMM2) \ |
| ((struct bpf_insn) { \ |
| .code = BPF_LD | BPF_DW | BPF_IMM, \ |
| .dst_reg = DST, \ |
| .src_reg = SRC, \ |
| .off = OFF1, \ |
| .imm = IMM1 }), \ |
| ((struct bpf_insn) { \ |
| .code = 0, \ |
| .dst_reg = 0, \ |
| .src_reg = 0, \ |
| .off = OFF2, \ |
| .imm = IMM2 }) |
| |
| #define BPF_LD_MAP_FD(DST, MAP_FD) \ |
| BPF_LD_IMM64_RAW_FULL(DST, BPF_PSEUDO_MAP_FD, 0, 0, \ |
| MAP_FD, 0) |
| |
| #define BPF_LD_MAP_VALUE(DST, MAP_FD, VALUE_OFF) \ |
| BPF_LD_IMM64_RAW_FULL(DST, BPF_PSEUDO_MAP_VALUE, 0, 0, \ |
| MAP_FD, VALUE_OFF) |
| |
| #define BPF_JMP_IMM(OP, DST, IMM, OFF) \ |
| ((struct bpf_insn) { \ |
| .code = BPF_JMP | BPF_OP(OP) | BPF_K, \ |
| .dst_reg = DST, \ |
| .src_reg = 0, \ |
| .off = OFF, \ |
| .imm = IMM }) |
| |
| #define BPF_JMP32_IMM(OP, DST, IMM, OFF) \ |
| ((struct bpf_insn) { \ |
| .code = BPF_JMP32 | BPF_OP(OP) | BPF_K, \ |
| .dst_reg = DST, \ |
| .src_reg = 0, \ |
| .off = OFF, \ |
| .imm = IMM }) |
| |
| #endif |