diff options
Diffstat (limited to 'sys')
| -rw-r--r-- | sys/linux/bpf.txt | 20 | ||||
| -rw-r--r-- | sys/linux/bpf.txt.const | 1 | ||||
| -rw-r--r-- | sys/linux/test/bpf_helpers | 4 |
3 files changed, 25 insertions, 0 deletions
diff --git a/sys/linux/bpf.txt b/sys/linux/bpf.txt index 72e94157e..c66ab24b5 100644 --- a/sys/linux/bpf.txt +++ b/sys/linux/bpf.txt @@ -425,6 +425,7 @@ bpf_insn [ snprintf bpf_insn_snprintf tail_call bpf_insn_tail_call ringbuf_query bpf_insn_ringbuf_query + ringbuf_output bpf_insn_ringbuf_output ] [varlen] bpf_insn_generic { @@ -795,6 +796,25 @@ bpf_insn_ringbuf_query { insn3 bpf_insn_call_helper_t[const[BPF_FUNC_ringbuf_query, int32]] } +# (18) r1 = map[id:16] +# (b7) r8 = X +# (7b) *(u64 *)(r10 -8) = r8 +# (bf) r2 = r10 +# (07) r2 += -8 +# (b7) r3 = 8 +# (b7) r4 = 0 +# (85) call bpf_ringbuf_output#322192 +bpf_insn_ringbuf_output { + insn1 bpf_insn_tail_call_map_fd[BPF_REG_1] + insn2 bpf_insn_mov_imm_any[BPF_REG_8] + insn3 bpf_insn_st64_reg[BPF_REG_8, BPF_REG_10, -8] + insn4 bpf_insn_mov_reg[BPF_REG_10, BPF_REG_2] + insn5 bpf_insn_op_imm[BPF_REG_2, BPF_ADD0, -8] + insn6 bpf_insn_mov_imm[BPF_REG_3, 8] + insn7 bpf_insn_mov_imm[BPF_REG_4, 0] + insn8 bpf_insn_call_helper_t[const[BPF_FUNC_ringbuf_output, int32]] +} + define MAX_BPF_REG __MAX_BPF_REG bpf_obj_pin_map [ diff --git a/sys/linux/bpf.txt.const b/sys/linux/bpf.txt.const index 154f11b67..53cfb9bd7 100644 --- a/sys/linux/bpf.txt.const +++ b/sys/linux/bpf.txt.const @@ -66,6 +66,7 @@ BPF_EXIST = 2 BPF_EXIT0 = 9 BPF_FLOW_DISSECTOR = 17 BPF_FUNC_INFO_SIZE = 8 +BPF_FUNC_ringbuf_output = 130 BPF_FUNC_ringbuf_discard = 133 BPF_FUNC_ringbuf_reserve = 131 BPF_FUNC_ringbuf_submit = 132 diff --git a/sys/linux/test/bpf_helpers b/sys/linux/test/bpf_helpers index b8472113f..d45a468e3 100644 --- a/sys/linux/test/bpf_helpers +++ b/sys/linux/test/bpf_helpers @@ -30,3 +30,7 @@ r2 = bpf$PROG_LOAD(AUTO, &AUTO={0x3, AUTO, &AUTO=@ringbuf={{AUTO, AUTO, AUTO, AU # Prepare, load, and execute a BPF program that calls bpf_ringbuf_query r3 = bpf$PROG_LOAD(AUTO, &AUTO={0x3, AUTO, &AUTO=@framed={{AUTO, AUTO, AUTO, AUTO, 0x0, AUTO, AUTO, AUTO, 0x0}, [@ringbuf_query={{AUTO, AUTO, AUTO, AUTO, r1, AUTO, AUTO, AUTO, AUTO}, {AUTO, AUTO, AUTO, AUTO, AUTO, AUTO, AUTO}, {AUTO, AUTO, AUTO, AUTO}}], {AUTO, AUTO, AUTO, AUTO}}, &AUTO='GPL\x00', 0x0, 0x0, 0x0, 0x0, 0x0, "00000000000000000000000000000000", 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, 0xa0) + +# Load, and execute a BPF program that calls bpf_ringbuf_output + +r3 = bpf$PROG_LOAD(AUTO, &AUTO={0x3, AUTO, &AUTO=@framed={{AUTO, AUTO, AUTO, AUTO, 0x0, AUTO, AUTO, AUTO, 0x0}, [@ringbuf_output={{AUTO, AUTO, AUTO, AUTO, r1, AUTO, AUTO, AUTO, AUTO}, {AUTO, AUTO, AUTO, AUTO, AUTO, AUTO, 0x1234}, {AUTO, AUTO, AUTO, AUTO, AUTO, AUTO, AUTO}, {AUTO, AUTO, AUTO, AUTO, AUTO, AUTO, AUTO}, {AUTO, AUTO, AUTO, AUTO, AUTO, AUTO, AUTO}, {AUTO, AUTO, AUTO, AUTO, AUTO, AUTO, AUTO}, {AUTO, AUTO, AUTO, AUTO, AUTO, AUTO, AUTO}, {AUTO, AUTO, AUTO, AUTO}}], {AUTO, AUTO, AUTO, AUTO}}, &AUTO='GPL\x00', 0x0, 0x0, 0x0, 0x0, 0x0, "00000000000000000000000000000000", 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, 0xa0) |
