From: Francis Laniel <flaniel@linux.microsoft.com>
To: bpf@vger.kernel.org
Cc: Francis Laniel <flaniel@linux.microsoft.com>,
Alexei Starovoitov <ast@kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>,
Andrii Nakryiko <andrii@kernel.org>,
Martin KaFai Lau <martin.lau@linux.dev>,
Song Liu <song@kernel.org>, Yonghong Song <yhs@fb.com>,
John Fastabend <john.fastabend@gmail.com>,
KP Singh <kpsingh@kernel.org>,
Stanislav Fomichev <sdf@google.com>, Hao Luo <haoluo@google.com>,
Jiri Olsa <jolsa@kernel.org>, Jonathan Corbet <corbet@lwn.net>,
Mykola Lysenko <mykolal@fb.com>, Shuah Khan <shuah@kernel.org>,
Joanne Koong <joannelkoong@gmail.com>,
Dave Marchevsky <davemarchevsky@fb.com>,
Lorenzo Bianconi <lorenzo@kernel.org>,
Maxim Mikityanskiy <maximmi@nvidia.com>,
Geliang Tang <geliang.tang@suse.com>,
"Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com>,
linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org,
linux-kselftest@vger.kernel.org
Subject: [RFC PATCH v2 5/5] for test purpose only: Add toy to play with BPF ring.
Date: Tue, 6 Sep 2022 21:56:46 +0200 [thread overview]
Message-ID: <20220906195656.33021-6-flaniel@linux.microsoft.com> (raw)
In-Reply-To: <20220906195656.33021-1-flaniel@linux.microsoft.com>
This patch should be applied on iovisor/bcc.
Signed-off-by: Francis Laniel <flaniel@linux.microsoft.com>
---
...-only-Add-toy-to-play-with-BPF-ring-.patch | 147 ++++++++++++++++++
1 file changed, 147 insertions(+)
create mode 100644 0001-for-test-purpose-only-Add-toy-to-play-with-BPF-ring-.patch
diff --git a/0001-for-test-purpose-only-Add-toy-to-play-with-BPF-ring-.patch b/0001-for-test-purpose-only-Add-toy-to-play-with-BPF-ring-.patch
new file mode 100644
index 000000000000..37d08cc08a88
--- /dev/null
+++ b/0001-for-test-purpose-only-Add-toy-to-play-with-BPF-ring-.patch
@@ -0,0 +1,147 @@
+From e4b95b1f9625f62d0978173973070dce38bd7210 Mon Sep 17 00:00:00 2001
+From: Francis Laniel <flaniel@linux.microsoft.com>
+Date: Tue, 9 Aug 2022 18:18:53 +0200
+Subject: [PATCH] for test purpose only: Add toy to play with BPF ring buffer.
+
+Signed-off-by: Francis Laniel <flaniel@linux.microsoft.com>
+---
+ libbpf-tools/Makefile | 1 +
+ libbpf-tools/toy.bpf.c | 29 +++++++++++++++++++
+ libbpf-tools/toy.c | 65 ++++++++++++++++++++++++++++++++++++++++++
+ libbpf-tools/toy.h | 4 +++
+ 4 files changed, 99 insertions(+)
+ create mode 100644 libbpf-tools/toy.bpf.c
+ create mode 100644 libbpf-tools/toy.c
+ create mode 100644 libbpf-tools/toy.h
+
+diff --git a/libbpf-tools/Makefile b/libbpf-tools/Makefile
+index 3e40f6e5..0d81d3b7 100644
+--- a/libbpf-tools/Makefile
++++ b/libbpf-tools/Makefile
+@@ -68,6 +68,7 @@ APPS = \
+ tcplife \
+ tcprtt \
+ tcpsynbl \
++ toy \
+ vfsstat \
+ #
+
+diff --git a/libbpf-tools/toy.bpf.c b/libbpf-tools/toy.bpf.c
+new file mode 100644
+index 00000000..3c28a20b
+--- /dev/null
++++ b/libbpf-tools/toy.bpf.c
+@@ -0,0 +1,29 @@
++#include <linux/types.h>
++#include <bpf/bpf_helpers.h>
++#include <linux/bpf.h>
++#include "toy.h"
++
++
++struct {
++ __uint(type, BPF_MAP_TYPE_RINGBUF);
++ __uint(max_entries, 4096);
++ __uint(map_flags, 1U << 13);
++} buffer SEC(".maps");
++
++static __u32 count = 0;
++
++SEC("tracepoint/syscalls/sys_enter_execve")
++int sys_enter_execve(void) {
++ count++;
++ struct event *event = bpf_ringbuf_reserve(&buffer, sizeof(struct event), 0);
++ if (!event) {
++ return 1;
++ }
++
++ event->count = count;
++ bpf_ringbuf_submit(event, 0);
++
++ return 0;
++}
++
++char _license[] SEC("license") = "GPL";
+diff --git a/libbpf-tools/toy.c b/libbpf-tools/toy.c
+new file mode 100644
+index 00000000..4cd8b588
+--- /dev/null
++++ b/libbpf-tools/toy.c
+@@ -0,0 +1,65 @@
++#include <bpf/libbpf.h>
++#include <stdio.h>
++#include <unistd.h>
++#include "toy.h"
++#include "toy.skel.h"
++#include "btf_helpers.h"
++
++
++static int buf_process_sample(void *ctx, void *data, size_t len) {
++ struct event *evt = (struct event *)data;
++
++ printf("%d\n", evt->count);
++
++ return 0;
++}
++
++int main(void) {
++ LIBBPF_OPTS(bpf_object_open_opts, open_opts);
++ int buffer_map_fd = -1;
++ struct toy_bpf *obj;
++ int err;
++
++ libbpf_set_strict_mode(LIBBPF_STRICT_ALL);
++
++ err = ensure_core_btf(&open_opts);
++ if (err) {
++ fprintf(stderr, "failed to fetch necessary BTF for CO-RE: %s\n", strerror(-err));
++ return 1;
++ }
++
++ obj = toy_bpf__open_opts(&open_opts);
++ if (!obj) {
++ fprintf(stderr, "failed to open BPF object\n");
++ return 1;
++ }
++
++ err = toy_bpf__load(obj);
++ if (err) {
++ fprintf(stderr, "failed to load BPF object: %d\n", err);
++ return 1;
++ }
++
++ struct ring_buffer *ring_buffer;
++
++ buffer_map_fd = bpf_object__find_map_fd_by_name(obj->obj, "buffer");
++ ring_buffer = ring_buffer__new(buffer_map_fd, buf_process_sample, NULL, NULL);
++
++ if(!ring_buffer) {
++ fprintf(stderr, "failed to create ring buffer\n");
++ return 1;
++ }
++
++ err = toy_bpf__attach(obj);
++ if (err) {
++ fprintf(stderr, "failed to attach BPF programs\n");
++ return 1;
++ }
++
++ for (;;) {
++ ring_buffer__consume(ring_buffer);
++ sleep(1);
++ }
++
++ return 0;
++}
+diff --git a/libbpf-tools/toy.h b/libbpf-tools/toy.h
+new file mode 100644
+index 00000000..ebfedf06
+--- /dev/null
++++ b/libbpf-tools/toy.h
+@@ -0,0 +1,4 @@
++struct event {
++ __u32 count;
++ char filler[4096 / 8 - sizeof(__u32) - 8];
++};
+--
+2.25.1
+
--
2.25.1
next prev parent reply other threads:[~2022-09-06 20:05 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-06 19:56 [RFC PATCH v2 0/5] Make BPF ring buffer overwritable Francis Laniel
2022-09-06 19:56 ` [RFC PATCH v2 1/5] bpf: Make " Francis Laniel
2022-09-06 19:56 ` [RFC PATCH v2 2/5] selftests: Add BPF overwritable ring buffer self tests Francis Laniel
2022-09-06 19:56 ` [RFC PATCH v2 3/5] docs/bpf: Add documentation for overwritable ring buffer Francis Laniel
2022-09-06 19:56 ` [RFC PATCH v2 4/5] libbpf: Add implementation to consume overwritable BPF " Francis Laniel
2022-09-06 19:56 ` Francis Laniel [this message]
2022-09-28 0:12 ` [RFC PATCH v2 0/5] Make BPF ring buffer overwritable Andrii Nakryiko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220906195656.33021-6-flaniel@linux.microsoft.com \
--to=flaniel@linux.microsoft.com \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=corbet@lwn.net \
--cc=daniel@iogearbox.net \
--cc=davemarchevsky@fb.com \
--cc=geliang.tang@suse.com \
--cc=haoluo@google.com \
--cc=joannelkoong@gmail.com \
--cc=john.fastabend@gmail.com \
--cc=jolsa@kernel.org \
--cc=kpsingh@kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=lorenzo@kernel.org \
--cc=martin.lau@linux.dev \
--cc=maximmi@nvidia.com \
--cc=mykolal@fb.com \
--cc=naveen.n.rao@linux.vnet.ibm.com \
--cc=sdf@google.com \
--cc=shuah@kernel.org \
--cc=song@kernel.org \
--cc=yhs@fb.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).