Module rbpf::ebpf

source ·
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

An eBPF instruction.

Constants

BPF opcode: add32 dst, imm /// dst += imm.
BPF opcode: add32 dst, src /// dst += src.
BPF opcode: add64 dst, imm /// dst += imm.
BPF opcode: add64 dst, src /// dst += src.
BPF opcode: and32 dst, imm /// dst &= imm.
BPF opcode: and32 dst, src /// dst &= src.
BPF opcode: and64 dst, imm /// dst &= imm.
BPF opcode: and64 dst, src /// dst &= src.
BPF opcode: arsh32 dst, imm /// dst >>= imm (arithmetic).
BPF opcode: arsh32 dst, src /// dst >>= src (arithmetic).
BPF opcode: arsh64 dst, imm /// dst >>= imm (arithmetic).
BPF opcode: arsh64 dst, src /// dst >>= src (arithmetic).
BPF opcode: be dst /// dst = htobe<imm>(dst), with imm in {16, 32, 64}.
BPF mode modifier: absolute load.
BPF ALU/ALU64 operation code: addition.
BPF operation class: 32 bits arithmetic operation.
BPF operation class: 64 bits arithmetic operation.
Mask to extract the arithmetic operation code from an instruction operation code.
BPF ALU/ALU64 operation code: and.
BPF ALU/ALU64 operation code: sign extending right shift.
BPF size modifier: byte (1 byte).
BPF JMP operation code: helper function call.
Mask to extract the operation class from an operation code.
BPF ALU/ALU64 operation code: division.
BPF size modifier: double word (8 bytes).
BPF ALU/ALU64 operation code: endianness conversion.
BPF JMP operation code: return from program.
BPF size modifier: half-word (2 bytes).
BPF mode modifier: immediate value.
BPF mode modifier: indirect load.
BPF JMP operation code: jump.
BPF JMP operation code: jump if equal.
BPF JMP operation code: jump if greater or equal.
BPF JMP operation code: jump if greater than.
BPF JMP operation code: jump if lower or equal.
BPF JMP operation code: jump if lower than.
BPF operation class: jump.
BPF JMP operation code: jump if not equal.
BPF JMP operation code: jump if src & reg.
BPF JMP operation code: jump if greater or equal (signed).
BPF JMP operation code: jump if greater than (signed).
BPF JMP operation code: jump if lower or equal (signed).
BPF JMP operation code: jump if lower than (signed).
BPF source operand modifier: 32-bit immediate value.
BPF operation class: load from immediate.
BPF operation class: load from register.
BPF ALU/ALU64 operation code: left shift.
BPF mode modifier: load from / store to memory.
BPF ALU/ALU64 operation code: modulus.
BPF ALU/ALU64 operation code: move.
BPF ALU/ALU64 operation code: multiplication.
BPF ALU/ALU64 operation code: negation.
BPF ALU/ALU64 operation code: or.
BPF ALU/ALU64 operation code: right shift.
BPF operation class: store immediate.
BPF operation class: store value from register.
BPF ALU/ALU64 operation code: subtraction.
BPF size modifier: word (4 bytes).
BPF source operand modifier: src register.
BPF mode modifier: exclusive add.
BPF ALU/ALU64 operation code: exclusive or.
BPF opcode: call imm /// helper function call to helper with key imm.
BPF opcode: div32 dst, imm /// dst /= imm.
BPF opcode: div32 dst, src /// dst /= src.
BPF opcode: div64 dst, imm /// dst /= imm.
BPF opcode: div64 dst, src /// dst /= src.
BPF opcode: exit /// return r0.
Size of an eBPF instructions, in bytes.
BPF opcode: ja +off /// PC += off.
BPF opcode: jeq dst, imm, +off /// PC += off if dst == imm.
BPF opcode: jeq dst, src, +off /// PC += off if dst == src.
BPF opcode: jge dst, imm, +off /// PC += off if dst >= imm.
BPF opcode: jge dst, src, +off /// PC += off if dst >= src.
BPF opcode: jgt dst, imm, +off /// PC += off if dst > imm.
BPF opcode: jgt dst, src, +off /// PC += off if dst > src.
BPF opcode: jle dst, imm, +off /// PC += off if dst <= imm.
BPF opcode: jle dst, src, +off /// PC += off if dst <= src.
BPF opcode: jlt dst, imm, +off /// PC += off if dst < imm.
BPF opcode: jlt dst, src, +off /// PC += off if dst < src.
BPF opcode: jne dst, imm, +off /// PC += off if dst != imm.
BPF opcode: jne dst, src, +off /// PC += off if dst != src.
BPF opcode: jset dst, imm, +off /// PC += off if dst & imm.
BPF opcode: jset dst, src, +off /// PC += off if dst & src.
BPF opcode: jsge dst, imm, +off /// PC += off if dst >= imm (signed).
BPF opcode: jsge dst, src, +off /// PC += off if dst >= src (signed).
BPF opcode: jsgt dst, imm, +off /// PC += off if dst > imm (signed).
BPF opcode: jsgt dst, src, +off /// PC += off if dst > src (signed).
BPF opcode: jsle dst, imm, +off /// PC += off if dst <= imm (signed).
BPF opcode: jsle dst, src, +off /// PC += off if dst <= src (signed).
BPF opcode: jslt dst, imm, +off /// PC += off if dst < imm (signed).
BPF opcode: jslt dst, src, +off /// PC += off if dst < src (signed).
BPF opcode: ldabsb src, dst, imm.
BPF opcode: ldabsdw src, dst, imm.
BPF opcode: ldabsh src, dst, imm.
BPF opcode: ldabsw src, dst, imm.
BPF opcode: ldxb dst, [src + off] /// dst = (src + off) as u8.
BPF opcode: lddw dst, imm /// dst = imm.
BPF opcode: ldxdw dst, [src + off] /// dst = (src + off) as u64.
BPF opcode: ldxh dst, [src + off] /// dst = (src + off) as u16.
BPF opcode: ldindb src, dst, imm.
BPF opcode: ldinddw src, dst, imm.
BPF opcode: ldindh src, dst, imm.
BPF opcode: ldindw src, dst, imm.
BPF opcode: ldxw dst, [src + off] /// dst = (src + off) as u32.
BPF opcode: le dst /// dst = htole<imm>(dst), with imm in {16, 32, 64}.
BPF opcode: lsh32 dst, imm /// dst <<= imm.
BPF opcode: lsh32 dst, src /// dst <<= src.
BPF opcode: lsh64 dst, imm /// dst <<= imm.
BPF opcode: lsh64 dst, src /// dst <<= src.
BPF opcode: mod32 dst, imm /// dst %= imm.
BPF opcode: mod32 dst, src /// dst %= src.
BPF opcode: mod64 dst, imm /// dst %= imm.
BPF opcode: mod64 dst, src /// dst %= src.
BPF opcode: mov32 dst, imm /// dst = imm.
BPF opcode: mov32 dst, src /// dst = src.
BPF opcode: mov64 dst, imm /// dst = imm.
BPF opcode: mov64 dst, src /// dst = src.
BPF opcode: mul32 dst, imm /// dst *= imm.
BPF opcode: mul32 dst, src /// dst *= src.
BPF opcode: div64 dst, imm /// dst /= imm.
BPF opcode: div64 dst, src /// dst /= src.
BPF opcode: neg32 dst /// dst = -dst.
BPF opcode: neg64 dst, imm /// dst = -dst.
BPF opcode: or32 dst, imm /// dst |= imm.
BPF opcode: or32 dst, src /// dst |= src.
BPF opcode: or64 dst, imm /// dst |= imm.
BPF opcode: or64 dst, src /// dst |= src.
Maximum number of instructions in an eBPF program.
Maximum size of an eBPF program, in bytes.
BPF opcode: rsh32 dst, imm /// dst >>= imm.
BPF opcode: rsh32 dst, src /// dst >>= src.
BPF opcode: rsh64 dst, imm /// dst >>= imm.
BPF opcode: rsh64 dst, src /// dst >>= src.
Stack for the eBPF stack, in bytes.
BPF opcode: stb [dst + off], imm /// (dst + offset) as u8 = imm.
BPF opcode: stxb [dst + off], src /// (dst + offset) as u8 = src.
BPF opcode: stdw [dst + off], imm /// (dst + offset) as u64 = imm.
BPF opcode: stxdw [dst + off], src /// (dst + offset) as u64 = src.
BPF opcode: stxxadddw [dst + off], src.
BPF opcode: sth [dst + off], imm /// (dst + offset) as u16 = imm.
BPF opcode: stxh [dst + off], src /// (dst + offset) as u16 = src.
BPF opcode: stw [dst + off], imm /// (dst + offset) as u32 = imm.
BPF opcode: stxw [dst + off], src /// (dst + offset) as u32 = src.
BPF opcode: stxxaddw [dst + off], src.
BPF opcode: sub32 dst, imm /// dst -= imm.
BPF opcode: sub32 dst, src /// dst -= src.
BPF opcode: sub64 dst, imm /// dst -= imm.
BPF opcode: sub64 dst, src /// dst -= src.
BPF opcode: tail call.
BPF opcode: xor32 dst, imm /// dst ^= imm.
BPF opcode: xor32 dst, src /// dst ^= src.
BPF opcode: xor64 dst, imm /// dst ^= imm.
BPF opcode: xor64 dst, src /// dst ^= src.

Functions

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.
Return a vector of struct Insn built from a program.

Type Definitions

Prototype of an eBPF helper function.