Module solana_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: syscall function call.
  • Mask to extract the operation class from an operation code.
  • BPF ALU/ALU64 operation code: division. [DEPRECATED]
  • 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 ALU/ALU64 operation code: high or.
  • 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. [DEPRECATED]
  • BPF operation class: load from register.
  • BPF PQR operation code: low multiplication.
  • BPF ALU/ALU64 operation code: left shift.
  • BPF mode modifier: load from / store to memory.
  • BPF ALU/ALU64 operation code: modulus. [DEPRECATED]
  • BPF ALU/ALU64 operation code: move.
  • BPF ALU/ALU64 operation code: multiplication. [DEPRECATED]
  • BPF ALU/ALU64 operation code: negation. [DEPRECATED]
  • BPF ALU/ALU64 operation code: or.
  • BPF operation class: product / quotient / remainder.
  • BPF ALU/ALU64 operation code: right shift.
  • BPF PQR operation code: signed division quotient.
  • BPF PQR operation code: signed high multiplication.
  • BPF PQR operation code: signed division remainder.
  • BPF operation class: store immediate.
  • BPF operation class: store value from register.
  • BPF ALU/ALU64 operation code: subtraction.
  • BPF PQR operation code: unsigned division quotient.
  • BPF PQR operation code: unsigned high multiplication.
  • BPF PQR operation code: unsigned division remainder.
  • BPF size modifier: word (4 bytes).
  • BPF source operand modifier: src register.
  • BPF ALU/ALU64 operation code: exclusive or.
  • BPF opcode: call imm /// syscall function call to syscall with key imm.
  • BPF opcode: tail call.
  • 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.
  • Solana BPF version flag
  • BPF opcode: exit /// return r0.
  • First scratch register
  • Frame pointer register
  • BPF opcode: hor64 dst, imm /// dst |= imm << 32.
  • Alignment of the memory regions in host address space in bytes
  • 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: ldxb dst, [src + off] /// dst = (src + off) as u8.
  • BPF opcode: lddw dst, imm /// dst = imm. [DEPRECATED]
  • BPF opcode: ldxdw dst, [src + off] /// dst = (src + off) as u64.
  • BPF opcode: ldxh dst, [src + off] /// dst = (src + off) as u16.
  • 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: lmul32 dst, imm /// dst *= (dst * imm) as u32.
  • BPF opcode: lmul32 dst, src /// dst *= (dst * src) as u32.
  • BPF opcode: lmul64 dst, imm /// dst = (dst * imm) as u64.
  • BPF opcode: lmul64 dst, src /// dst = (dst * src) as u64.
  • 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.
  • Start of the heap in the memory map
  • Start of the input buffers in the memory map
  • Start of the program bits (text and ro segments) in the memory map
  • Start of the stack in the memory map
  • 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.
  • 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.
  • Number of scratch registers
  • BPF opcode: shmul32 dst, imm /// dst = (dst * imm) as i64. BPF opcode: shmul32 dst, src /// dst = (dst * src) as i64. BPF opcode: sdiv32 dst, imm /// dst /= imm.
  • BPF opcode: sdiv32 dst, src /// dst /= src.
  • BPF opcode: sdiv64 dst, imm /// dst /= imm.
  • BPF opcode: sdiv64 dst, src /// dst /= src.
  • BPF opcode: shmul64 dst, imm /// dst = (dst * imm) >> 64.
  • BPF opcode: shmul64 dst, src /// dst = (dst * src) >> 64.
  • BPF opcode: srem32 dst, imm /// dst %= imm.
  • BPF opcode: srem32 dst, src /// dst %= src.
  • BPF opcode: srem64 dst, imm /// dst %= imm.
  • BPF opcode: srem64 dst, src /// dst %= src.
  • Stack pointer register
  • 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: 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: sub32 dst, imm /// dst = imm - dst.
  • BPF opcode: sub32 dst, src /// dst -= src.
  • BPF opcode: sub64 dst, imm /// dst -= imm.
  • BPF opcode: sub64 dst, src /// dst -= src.
  • BPF opcode: uhmul32 dst, imm /// dst = (dst * imm) as u64. BPF opcode: uhmul32 dst, src /// dst = (dst * src) as u64. BPF opcode: udiv32 dst, imm /// dst /= imm.
  • BPF opcode: udiv32 dst, src /// dst /= src.
  • BPF opcode: udiv64 dst, imm /// dst /= imm.
  • BPF opcode: udiv64 dst, src /// dst /= src.
  • BPF opcode: uhmul64 dst, imm /// dst = (dst * imm) >> 64.
  • BPF opcode: uhmul64 dst, src /// dst = (dst * src) >> 64.
  • BPF opcode: urem32 dst, imm /// dst %= imm.
  • BPF opcode: urem32 dst, src /// dst %= src.
  • BPF opcode: urem64 dst, imm /// dst %= imm.
  • BPF opcode: urem64 dst, src /// dst %= src.
  • Upper half of a pointer is the region index, lower half the virtual address inside that region.
  • 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