|
| 1 | +use crate::bpf_insn; |
| 2 | + |
| 3 | +pub const BPF_LD: u16 = 0x00; |
| 4 | +pub const BPF_LDX: u16 = 0x01; |
| 5 | +pub const BPF_ST: u16 = 0x02; |
| 6 | +pub const BPF_STX: u16 = 0x03; |
| 7 | +pub const BPF_ALU: u16 = 0x04; |
| 8 | +pub const BPF_JMP: u16 = 0x05; |
| 9 | +pub const BPF_RET: u16 = 0x06; |
| 10 | +pub const BPF_MISC: u16 = 0x07; |
| 11 | +pub const BPF_W: u16 = 0x00; |
| 12 | +pub const BPF_H: u16 = 0x08; |
| 13 | +pub const BPF_B: u16 = 0x10; |
| 14 | +pub const BPF_IMM: u16 = 0x00; |
| 15 | +pub const BPF_ABS: u16 = 0x20; |
| 16 | +pub const BPF_IND: u16 = 0x40; |
| 17 | +pub const BPF_MEM: u16 = 0x60; |
| 18 | +pub const BPF_LEN: u16 = 0x80; |
| 19 | +pub const BPF_MSH: u16 = 0xa0; |
| 20 | +pub const BPF_ADD: u16 = 0x00; |
| 21 | +pub const BPF_SUB: u16 = 0x10; |
| 22 | +pub const BPF_MUL: u16 = 0x20; |
| 23 | +pub const BPF_DIV: u16 = 0x30; |
| 24 | +pub const BPF_OR: u16 = 0x40; |
| 25 | +pub const BPF_AND: u16 = 0x50; |
| 26 | +pub const BPF_LSH: u16 = 0x60; |
| 27 | +pub const BPF_RSH: u16 = 0x70; |
| 28 | +pub const BPF_NEG: u16 = 0x80; |
| 29 | +pub const BPF_MOD: u16 = 0x90; |
| 30 | +pub const BPF_XOR: u16 = 0xa0; |
| 31 | +pub const BPF_JA: u16 = 0x00; |
| 32 | +pub const BPF_JEQ: u16 = 0x10; |
| 33 | +pub const BPF_JGT: u16 = 0x20; |
| 34 | +pub const BPF_JGE: u16 = 0x30; |
| 35 | +pub const BPF_JSET: u16 = 0x40; |
| 36 | +pub const BPF_K: u16 = 0x00; |
| 37 | +pub const BPF_X: u16 = 0x08; |
| 38 | +pub const BPF_A: u16 = 0x10; |
| 39 | +pub const BPF_TAX: u16 = 0x00; |
| 40 | +pub const BPF_TXA: u16 = 0x80; |
| 41 | + |
| 42 | +f! { |
| 43 | + pub fn BPF_CLASS(code: u32) -> u32 { |
| 44 | + code & 0x07 |
| 45 | + } |
| 46 | + |
| 47 | + pub fn BPF_SIZE(code: u32) -> u32 { |
| 48 | + code & 0x18 |
| 49 | + } |
| 50 | + |
| 51 | + pub fn BPF_MODE(code: u32) -> u32 { |
| 52 | + code & 0xe0 |
| 53 | + } |
| 54 | + |
| 55 | + pub fn BPF_OP(code: u32) -> u32 { |
| 56 | + code & 0xf0 |
| 57 | + } |
| 58 | + |
| 59 | + pub fn BPF_SRC(code: u32) -> u32 { |
| 60 | + code & 0x08 |
| 61 | + } |
| 62 | + |
| 63 | + pub fn BPF_RVAL(code: u32) -> u32 { |
| 64 | + code & 0x18 |
| 65 | + } |
| 66 | + |
| 67 | + pub fn BPF_MISCOP(code: u32) -> u32 { |
| 68 | + code & 0xf8 |
| 69 | + } |
| 70 | + |
| 71 | + pub fn BPF_STMT(code: u16, k: u32) -> bpf_insn { |
| 72 | + bpf_insn { |
| 73 | + code, |
| 74 | + jt: 0, |
| 75 | + jf: 0, |
| 76 | + k, |
| 77 | + } |
| 78 | + } |
| 79 | + |
| 80 | + pub fn BPF_JUMP(code: u16, k: u32, jt: u8, jf: u8) -> bpf_insn { |
| 81 | + bpf_insn { code, jt, jf, k } |
| 82 | + } |
| 83 | +} |
0 commit comments