def BpfOp.encode

bend-osdev-bpf@0.1.0.0 · insn.bend:192

import bend-osdev-bpf@0.1.0.0/insn.bend as Insn
import Base

192# the sock_filter of an instruction; unused fields are 0
193def BpfOp.encode(op: BpfOp) -> BpfRaw:
194  match op:
195    case BpfLdAbs{size, k}:
196      BpfRaw{U32.or(32, BpfSize.bits(size)), 0, 0, k}
197    case BpfLdInd{size, k}:
198      BpfRaw{U32.or(64, BpfSize.bits(size)), 0, 0, k}
199    case BpfLdImm{k}:
200      BpfRaw{0, 0, 0, k}
201    case BpfLdLen{}:
202      BpfRaw{128, 0, 0, 0}
203    case BpfLdMem{k}:
204      BpfRaw{96, 0, 0, k}
205    case BpfLdxImm{k}:
206      BpfRaw{1, 0, 0, k}
207    case BpfLdxMem{k}:
208      BpfRaw{97, 0, 0, k}
209    case BpfLdxLen{}:
210      BpfRaw{129, 0, 0, 0}
211    case BpfLdxMsh{k}:
212      BpfRaw{177, 0, 0, k}
213    case BpfSt{k}:
214      BpfRaw{2, 0, 0, k}
215    case BpfStx{k}:
216      BpfRaw{3, 0, 0, k}
217    case BpfAlu{o, +src}:
218      BpfRaw{U32.or(4, U32.or(BpfAluOp.bits(o), BpfSrc.bits(src))), 0, 0, BpfSrc.k(src)}
219    case BpfNeg{}:
220      BpfRaw{132, 0, 0, 0}
221    case BpfJa{k}:
222      BpfRaw{5, 0, 0, k}
223    case BpfJmp{c, +src, jt, jf}:
224      BpfRaw{U32.or(5, U32.or(BpfCond.bits(c), BpfSrc.bits(src))), jt, jf, BpfSrc.k(src)}
225    case BpfRet{r}:
226      BpfRval.encode(r)
227    case BpfTax{}:
228      BpfRaw{7, 0, 0, 0}
229    case BpfTxa{}:
230      BpfRaw{135, 0, 0, 0}

Uses (9)

Used by (5)