Expand description
This module contains all the definitions related to eBPF, and some functions permitting to manipulate eBPF instructions.
The number of bytes in an instruction, the maximum number of instructions in a program, and also all operation codes are defined here as constants.
The structure for an instruction used by this crate, as well as the function to extract it from a program, is also defined in the module.
To learn more about these instructions, see the Linux kernel documentation: https://www.kernel.org/doc/Documentation/networking/filter.txt, or for a shorter version of the list of the operation codes: https://github.com/iovisor/bpf-docs/blob/master/eBPF.md
Structs§
- Insn
- An eBPF instruction.
Constants§
- ADD32_
IMM - BPF opcode:
add32 dst, imm
///dst += imm
. - ADD32_
REG - BPF opcode:
add32 dst, src
///dst += src
. - ADD64_
IMM - BPF opcode:
add64 dst, imm
///dst += imm
. - ADD64_
REG - BPF opcode:
add64 dst, src
///dst += src
. - AND32_
IMM - BPF opcode:
and32 dst, imm
///dst &= imm
. - AND32_
REG - BPF opcode:
and32 dst, src
///dst &= src
. - AND64_
IMM - BPF opcode:
and64 dst, imm
///dst &= imm
. - AND64_
REG - BPF opcode:
and64 dst, src
///dst &= src
. - ARSH32_
IMM - BPF opcode:
arsh32 dst, imm
///dst >>= imm (arithmetic)
. - ARSH32_
REG - BPF opcode:
arsh32 dst, src
///dst >>= src (arithmetic)
. - ARSH64_
IMM - BPF opcode:
arsh64 dst, imm
///dst >>= imm (arithmetic)
. - ARSH64_
REG - BPF opcode:
arsh64 dst, src
///dst >>= src (arithmetic)
. - BE
- BPF opcode:
be dst
///dst = htobe<imm>(dst), with imm in {16, 32, 64}
. - BPF_ABS
- BPF mode modifier: absolute load.
- BPF_ADD
- BPF ALU/ALU64 operation code: addition.
- BPF_ALU
- BPF operation class: 32 bits arithmetic operation.
- BPF_
ALU64 - BPF operation class: 64 bits arithmetic operation.
- BPF_
ALU_ OP_ MASK - Mask to extract the arithmetic operation code from an instruction operation code.
- BPF_AND
- BPF ALU/ALU64 operation code: and.
- BPF_
ARSH - BPF ALU/ALU64 operation code: sign extending right shift.
- BPF_B
- BPF size modifier: byte (1 byte).
- BPF_
CALL - BPF JMP operation code: helper function call.
- BPF_
CLS_ MASK - Mask to extract the operation class from an operation code.
- BPF_DIV
- BPF ALU/ALU64 operation code: division.
- BPF_DW
- BPF size modifier: double word (8 bytes).
- BPF_END
- BPF ALU/ALU64 operation code: endianness conversion.
- BPF_
EXIT - BPF JMP operation code: return from program.
- BPF_H
- BPF size modifier: half-word (2 bytes).
- BPF_IMM
- BPF mode modifier: immediate value.
- BPF_IND
- BPF mode modifier: indirect load.
- BPF_JA
- BPF JMP operation code: jump.
- BPF_JEQ
- BPF JMP operation code: jump if equal.
- BPF_JGE
- BPF JMP operation code: jump if greater or equal.
- BPF_JGT
- BPF JMP operation code: jump if greater than.
- BPF_JLE
- BPF JMP operation code: jump if lower or equal.
- BPF_JLT
- BPF JMP operation code: jump if lower than.
- BPF_JMP
- BPF operation class: jump (64-bit wide operands for comparisons).
- BPF_
JMP32 - BPF operation class: jump (32-bit wide operands for comparisons).
- BPF_JNE
- BPF JMP operation code: jump if not equal.
- BPF_
JSET - BPF JMP operation code: jump if
src
®
. - BPF_
JSGE - BPF JMP operation code: jump if greater or equal (signed).
- BPF_
JSGT - BPF JMP operation code: jump if greater than (signed).
- BPF_
JSLE - BPF JMP operation code: jump if lower or equal (signed).
- BPF_
JSLT - BPF JMP operation code: jump if lower than (signed).
- BPF_K
- BPF source operand modifier: 32-bit immediate value.
- BPF_LD
- BPF operation class: load from immediate.
- BPF_LDX
- BPF operation class: load from register.
- BPF_LSH
- BPF ALU/ALU64 operation code: left shift.
- BPF_MEM
- BPF mode modifier: load from / store to memory.
- BPF_MOD
- BPF ALU/ALU64 operation code: modulus.
- BPF_MOV
- BPF ALU/ALU64 operation code: move.
- BPF_MUL
- BPF ALU/ALU64 operation code: multiplication.
- BPF_NEG
- BPF ALU/ALU64 operation code: negation.
- BPF_OR
- BPF ALU/ALU64 operation code: or.
- BPF_RSH
- BPF ALU/ALU64 operation code: right shift.
- BPF_ST
- BPF operation class: store immediate.
- BPF_STX
- BPF operation class: store value from register.
- BPF_SUB
- BPF ALU/ALU64 operation code: subtraction.
- BPF_W
- BPF size modifier: word (4 bytes).
- BPF_X
- BPF source operand modifier:
src
register. - BPF_
XADD - BPF mode modifier: exclusive add.
- BPF_XOR
- BPF ALU/ALU64 operation code: exclusive or.
- CALL
- BPF opcode:
call imm
/// helper function call to helper with keyimm
. - DIV32_
IMM - BPF opcode:
div32 dst, imm
///dst /= imm
. - DIV32_
REG - BPF opcode:
div32 dst, src
///dst /= src
. - DIV64_
IMM - BPF opcode:
div64 dst, imm
///dst /= imm
. - DIV64_
REG - BPF opcode:
div64 dst, src
///dst /= src
. - EXIT
- BPF opcode:
exit
///return r0
. - INSN_
SIZE - Size of an eBPF instructions, in bytes.
- JA
- BPF opcode:
ja +off
///PC += off
. - JEQ_IMM
- BPF opcode:
jeq dst, imm, +off
///PC += off if dst == imm
. - JEQ_
IMM32 - BPF opcode:
jeq dst, imm, +off
///PC += off if (dst as u32) == imm
. - JEQ_REG
- BPF opcode:
jeq dst, src, +off
///PC += off if dst == src
. - JEQ_
REG32 - BPF opcode:
jeq dst, src, +off
///PC += off if (dst as u32) == (src as u32)
. - JGE_IMM
- BPF opcode:
jge dst, imm, +off
///PC += off if dst >= imm
. - JGE_
IMM32 - BPF opcode:
jge dst, imm, +off
///PC += off if (dst as u32) >= imm
. - JGE_REG
- BPF opcode:
jge dst, src, +off
///PC += off if dst >= src
. - JGE_
REG32 - BPF opcode:
jge dst, src, +off
///PC += off if (dst as u32) >= (src as u32)
. - JGT_IMM
- BPF opcode:
jgt dst, imm, +off
///PC += off if dst > imm
. - JGT_
IMM32 - BPF opcode:
jgt dst, imm, +off
///PC += off if (dst as u32) > imm
. - JGT_REG
- BPF opcode:
jgt dst, src, +off
///PC += off if dst > src
. - JGT_
REG32 - BPF opcode:
jgt dst, src, +off
///PC += off if (dst as u32) > (src as u32)
. - JLE_IMM
- BPF opcode:
jle dst, imm, +off
///PC += off if dst <= imm
. - JLE_
IMM32 - BPF opcode:
jle dst, imm, +off
///PC += off if (dst as u32) <= imm
. - JLE_REG
- BPF opcode:
jle dst, src, +off
///PC += off if dst <= src
. - JLE_
REG32 - BPF opcode:
jle dst, src, +off
///PC += off if (dst as u32) <= (src as u32)
. - JLT_IMM
- BPF opcode:
jlt dst, imm, +off
///PC += off if dst < imm
. - JLT_
IMM32 - BPF opcode:
jlt dst, imm, +off
///PC += off if (dst as u32) < imm
. - JLT_REG
- BPF opcode:
jlt dst, src, +off
///PC += off if dst < src
. - JLT_
REG32 - BPF opcode:
jlt dst, src, +off
///PC += off if (dst as u32) < (src as u32)
. - JNE_IMM
- BPF opcode:
jne dst, imm, +off
///PC += off if dst != imm
. - JNE_
IMM32 - BPF opcode:
jne dst, imm, +off
///PC += off if (dst as u32) != imm
. - JNE_REG
- BPF opcode:
jne dst, src, +off
///PC += off if dst != src
. - JNE_
REG32 - BPF opcode:
jne dst, src, +off
///PC += off if (dst as u32) != (src as u32)
. - JSET_
IMM - BPF opcode:
jset dst, imm, +off
///PC += off if dst & imm
. - JSET_
IMM32 - BPF opcode:
jset dst, imm, +off
///PC += off if (dst as u32) & imm
. - JSET_
REG - BPF opcode:
jset dst, src, +off
///PC += off if dst & src
. - JSET_
REG32 - BPF opcode:
jset dst, src, +off
///PC += off if (dst as u32) & (src as u32)
. - JSGE_
IMM - BPF opcode:
jsge dst, imm, +off
///PC += off if dst >= imm (signed)
. - JSGE_
IMM32 - BPF opcode:
jsge dst, imm, +off
///PC += off if (dst as i32) >= imm (signed)
. - JSGE_
REG - BPF opcode:
jsge dst, src, +off
///PC += off if dst >= src (signed)
. - JSGE_
REG32 - BPF opcode:
jsge dst, src, +off
///PC += off if (dst as i32) >= (src as i32) (signed)
. - JSGT_
IMM - BPF opcode:
jsgt dst, imm, +off
///PC += off if dst > imm (signed)
. - JSGT_
IMM32 - BPF opcode:
jsgt dst, imm, +off
///PC += off if (dst as i32) > imm (signed)
. - JSGT_
REG - BPF opcode:
jsgt dst, src, +off
///PC += off if dst > src (signed)
. - JSGT_
REG32 - BPF opcode:
jsgt dst, src, +off
///PC += off if (dst as i32) > (src as i32) (signed)
. - JSLE_
IMM - BPF opcode:
jsle dst, imm, +off
///PC += off if dst <= imm (signed)
. - JSLE_
IMM32 - BPF opcode:
jsle dst, imm, +off
///PC += off if (dst as i32) <= imm (signed)
. - JSLE_
REG - BPF opcode:
jsle dst, src, +off
///PC += off if dst <= src (signed)
. - JSLE_
REG32 - BPF opcode:
jsle dst, src, +off
///PC += off if (dst as i32) <= (src as i32) (signed)
. - JSLT_
IMM - BPF opcode:
jslt dst, imm, +off
///PC += off if dst < imm (signed)
. - JSLT_
IMM32 - BPF opcode:
jslt dst, imm, +off
///PC += off if (dst as i32) < imm (signed)
. - JSLT_
REG - BPF opcode:
jslt dst, src, +off
///PC += off if dst < src (signed)
. - JSLT_
REG32 - BPF opcode:
jslt dst, src, +off
///PC += off if (dst as i32) < (src as i32) (signed)
. - LD_
ABS_ B - BPF opcode:
ldabsb src, dst, imm
. - LD_
ABS_ DW - BPF opcode:
ldabsdw src, dst, imm
. - LD_
ABS_ H - BPF opcode:
ldabsh src, dst, imm
. - LD_
ABS_ W - BPF opcode:
ldabsw src, dst, imm
. - LD_
B_ REG - BPF opcode:
ldxb dst, [src + off]
///dst = (src + off) as u8
. - LD_
DW_ IMM - BPF opcode:
lddw dst, imm
///dst = imm
. - LD_
DW_ REG - BPF opcode:
ldxdw dst, [src + off]
///dst = (src + off) as u64
. - LD_
H_ REG - BPF opcode:
ldxh dst, [src + off]
///dst = (src + off) as u16
. - LD_
IND_ B - BPF opcode:
ldindb src, dst, imm
. - LD_
IND_ DW - BPF opcode:
ldinddw src, dst, imm
. - LD_
IND_ H - BPF opcode:
ldindh src, dst, imm
. - LD_
IND_ W - BPF opcode:
ldindw src, dst, imm
. - LD_
W_ REG - BPF opcode:
ldxw dst, [src + off]
///dst = (src + off) as u32
. - LE
- BPF opcode:
le dst
///dst = htole<imm>(dst), with imm in {16, 32, 64}
. - LSH32_
IMM - BPF opcode:
lsh32 dst, imm
///dst <<= imm
. - LSH32_
REG - BPF opcode:
lsh32 dst, src
///dst <<= src
. - LSH64_
IMM - BPF opcode:
lsh64 dst, imm
///dst <<= imm
. - LSH64_
REG - BPF opcode:
lsh64 dst, src
///dst <<= src
. - MOD32_
IMM - BPF opcode:
mod32 dst, imm
///dst %= imm
. - MOD32_
REG - BPF opcode:
mod32 dst, src
///dst %= src
. - MOD64_
IMM - BPF opcode:
mod64 dst, imm
///dst %= imm
. - MOD64_
REG - BPF opcode:
mod64 dst, src
///dst %= src
. - MOV32_
IMM - BPF opcode:
mov32 dst, imm
///dst = imm
. - MOV32_
REG - BPF opcode:
mov32 dst, src
///dst = src
. - MOV64_
IMM - BPF opcode:
mov64 dst, imm
///dst = imm
. - MOV64_
REG - BPF opcode:
mov64 dst, src
///dst = src
. - MUL32_
IMM - BPF opcode:
mul32 dst, imm
///dst *= imm
. - MUL32_
REG - BPF opcode:
mul32 dst, src
///dst *= src
. - MUL64_
IMM - BPF opcode:
div64 dst, imm
///dst /= imm
. - MUL64_
REG - BPF opcode:
div64 dst, src
///dst /= src
. - NEG32
- BPF opcode:
neg32 dst
///dst = -dst
. - NEG64
- BPF opcode:
neg64 dst, imm
///dst = -dst
. - OR32_
IMM - BPF opcode:
or32 dst, imm
///dst |= imm
. - OR32_
REG - BPF opcode:
or32 dst, src
///dst |= src
. - OR64_
IMM - BPF opcode:
or64 dst, imm
///dst |= imm
. - OR64_
REG - BPF opcode:
or64 dst, src
///dst |= src
. - PROG_
MAX_ INSNS - Maximum number of instructions in an eBPF program.
- PROG_
MAX_ SIZE - Maximum size of an eBPF program, in bytes.
- RSH32_
IMM - BPF opcode:
rsh32 dst, imm
///dst >>= imm
. - RSH32_
REG - BPF opcode:
rsh32 dst, src
///dst >>= src
. - RSH64_
IMM - BPF opcode:
rsh64 dst, imm
///dst >>= imm
. - RSH64_
REG - BPF opcode:
rsh64 dst, src
///dst >>= src
. - STACK_
SIZE - Stack for the eBPF stack, in bytes.
- ST_
B_ IMM - BPF opcode:
stb [dst + off], imm
///(dst + offset) as u8 = imm
. - ST_
B_ REG - BPF opcode:
stxb [dst + off], src
///(dst + offset) as u8 = src
. - ST_
DW_ IMM - BPF opcode:
stdw [dst + off], imm
///(dst + offset) as u64 = imm
. - ST_
DW_ REG - BPF opcode:
stxdw [dst + off], src
///(dst + offset) as u64 = src
. - ST_
DW_ XADD - BPF opcode:
stxxadddw [dst + off], src
. - ST_
H_ IMM - BPF opcode:
sth [dst + off], imm
///(dst + offset) as u16 = imm
. - ST_
H_ REG - BPF opcode:
stxh [dst + off], src
///(dst + offset) as u16 = src
. - ST_
W_ IMM - BPF opcode:
stw [dst + off], imm
///(dst + offset) as u32 = imm
. - ST_
W_ REG - BPF opcode:
stxw [dst + off], src
///(dst + offset) as u32 = src
. - ST_
W_ XADD - BPF opcode:
stxxaddw [dst + off], src
. - SUB32_
IMM - BPF opcode:
sub32 dst, imm
///dst -= imm
. - SUB32_
REG - BPF opcode:
sub32 dst, src
///dst -= src
. - SUB64_
IMM - BPF opcode:
sub64 dst, imm
///dst -= imm
. - SUB64_
REG - BPF opcode:
sub64 dst, src
///dst -= src
. - TAIL_
CALL - BPF opcode: tail call.
- XOR32_
IMM - BPF opcode:
xor32 dst, imm
///dst ^= imm
. - XOR32_
REG - BPF opcode:
xor32 dst, src
///dst ^= src
. - XOR64_
IMM - BPF opcode:
xor64 dst, imm
///dst ^= imm
. - XOR64_
REG - BPF opcode:
xor64 dst, src
///dst ^= src
.
Functions§
- get_
insn - Get the instruction at
idx
of an eBPF program.idx
is the index (number) of the instruction (not a byte offset). The first instruction has index 0. - to_
insn_ vec - Return a vector of
struct Insn
built from a program.
Type Aliases§
- Helper
- Prototype of an eBPF helper function.