From ec3b566eb26bbe8fa4cf8a9f8625712a21286bf7 Mon Sep 17 00:00:00 2001 From: Paul Chaignon Date: Tue, 7 Nov 2023 20:41:30 +0100 Subject: sys/linux: describe BPF helper call to bpf_ringbuf_query This BPF helper has the prototype: bpf_ringbuf_query(void *ringbuf, u64 flags) Signed-off-by: Paul Chaignon --- sys/linux/bpf.txt | 10 ++++++++++ sys/linux/bpf.txt.const | 1 + sys/linux/test/bpf_helpers | 4 ++++ 3 files changed, 15 insertions(+) (limited to 'sys/linux') diff --git a/sys/linux/bpf.txt b/sys/linux/bpf.txt index 1b1b455d3..72e94157e 100644 --- a/sys/linux/bpf.txt +++ b/sys/linux/bpf.txt @@ -424,6 +424,7 @@ bpf_insn [ printk bpf_insn_trace_printk snprintf bpf_insn_snprintf tail_call bpf_insn_tail_call + ringbuf_query bpf_insn_ringbuf_query ] [varlen] bpf_insn_generic { @@ -785,6 +786,15 @@ bpf_insn_ringbuf_free { bpf_helpers_ringbuf_free = BPF_FUNC_ringbuf_submit, BPF_FUNC_ringbuf_discard +# (18) r1 = map[id:16] +# (b7) r2 = 0 +# (85) call bpf_ringbuf_query#322192 +bpf_insn_ringbuf_query { + insn1 bpf_insn_tail_call_map_fd[BPF_REG_1] + insn2 bpf_insn_mov_imm[BPF_REG_2, 0] + insn3 bpf_insn_call_helper_t[const[BPF_FUNC_ringbuf_query, 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 9e476d995..154f11b67 100644 --- a/sys/linux/bpf.txt.const +++ b/sys/linux/bpf.txt.const @@ -69,6 +69,7 @@ BPF_FUNC_INFO_SIZE = 8 BPF_FUNC_ringbuf_discard = 133 BPF_FUNC_ringbuf_reserve = 131 BPF_FUNC_ringbuf_submit = 132 +BPF_FUNC_ringbuf_query = 134 BPF_FUNC_snprintf = 165 BPF_FUNC_tail_call = 12 BPF_FUNC_trace_printk = 6 diff --git a/sys/linux/test/bpf_helpers b/sys/linux/test/bpf_helpers index f8ef4a2cd..b8472113f 100644 --- a/sys/linux/test/bpf_helpers +++ b/sys/linux/test/bpf_helpers @@ -26,3 +26,7 @@ r4 = bpf$PROG_LOAD(AUTO, &AUTO={0x3, AUTO, &AUTO=@framed={{AUTO, AUTO, AUTO, AUT r1 = bpf$MAP_CREATE_RINGBUF(AUTO, &AUTO={AUTO, AUTO, AUTO, 0x40000, AUTO, 0x0, 0x0, "00000000000000000000000000000000", 0x0, 0x0, 0x0, 0x0, 0x0, AUTO}, 0x48) r2 = bpf$PROG_LOAD(AUTO, &AUTO={0x3, AUTO, &AUTO=@ringbuf={{AUTO, AUTO, AUTO, AUTO, 0x0, AUTO, AUTO, AUTO, 0x0}, {{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, 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, 0x84}, {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) + +# 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) -- cgit mrf-deployment