From: Lorenzo Bianconi <lorenzo@kernel.org>
To: bpf@vger.kernel.org, netdev@vger.kernel.org
Cc: lorenzo.bianconi@redhat.com, davem@davemloft.net,
kuba@kernel.org, ast@kernel.org, daniel@iogearbox.net,
shayagr@amazon.com, john.fastabend@gmail.com, dsahern@kernel.org,
brouer@redhat.com, echaudro@redhat.com, jasowang@redhat.com,
alexander.duyck@gmail.com, saeed@kernel.org,
maciej.fijalkowski@intel.com, magnus.karlsson@intel.com,
tirthendu.sarkar@intel.com, toke@redhat.com
Subject: [PATCH v17 bpf-next 21/23] bpf: selftests: introduce bpf_xdp_{load,store}_bytes selftest
Date: Thu, 4 Nov 2021 18:35:41 +0100 [thread overview]
Message-ID: <e011034dd6d7ff0a80b38aa2f6e2ed209ed6458e.1636044387.git.lorenzo@kernel.org> (raw)
In-Reply-To: <cover.1636044387.git.lorenzo@kernel.org>
Introduce kernel selftest for new bpf_xdp_{load,store}_bytes helpers.
and bpf_xdp_pointer/bpf_xdp_copy_buf utility routines.
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
---
.../bpf/prog_tests/xdp_adjust_frags.c | 81 +++++++++++++++++++
.../bpf/progs/test_xdp_update_frags.c | 42 ++++++++++
2 files changed, 123 insertions(+)
create mode 100644 tools/testing/selftests/bpf/prog_tests/xdp_adjust_frags.c
create mode 100644 tools/testing/selftests/bpf/progs/test_xdp_update_frags.c
diff --git a/tools/testing/selftests/bpf/prog_tests/xdp_adjust_frags.c b/tools/testing/selftests/bpf/prog_tests/xdp_adjust_frags.c
new file mode 100644
index 000000000000..53febbcb8fd4
--- /dev/null
+++ b/tools/testing/selftests/bpf/prog_tests/xdp_adjust_frags.c
@@ -0,0 +1,81 @@
+// SPDX-License-Identifier: GPL-2.0
+#include <test_progs.h>
+#include <network_helpers.h>
+
+void test_xdp_update_frags(void)
+{
+ const char *file = "./test_xdp_update_frags.o";
+ __u32 duration, retval, size;
+ struct bpf_object *obj;
+ int err, prog_fd;
+ __u32 *offset;
+ __u8 *buf;
+
+ err = bpf_prog_load(file, BPF_PROG_TYPE_XDP, &obj, &prog_fd);
+ if (CHECK_FAIL(err))
+ return;
+
+ buf = malloc(128);
+ if (CHECK(!buf, "malloc()", "error:%s\n", strerror(errno)))
+ return;
+
+ memset(buf, 0, 128);
+ offset = (__u32 *)buf;
+ *offset = 16;
+ buf[*offset] = 0xaa; /* marker at offset 16 */
+ buf[*offset + 15] = 0xaa; /* marker at offset 31 */
+
+ err = bpf_prog_test_run(prog_fd, 1, buf, 128,
+ buf, &size, &retval, &duration);
+
+ /* test_xdp_update_frags: buf[16,31]: 0xaa -> 0xbb */
+ CHECK(err || retval != XDP_PASS || buf[16] != 0xbb || buf[31] != 0xbb,
+ "128b", "err %d errno %d retval %d size %d\n",
+ err, errno, retval, size);
+
+ free(buf);
+
+ buf = malloc(9000);
+ if (CHECK(!buf, "malloc()", "error:%s\n", strerror(errno)))
+ return;
+
+ memset(buf, 0, 9000);
+ offset = (__u32 *)buf;
+ *offset = 5000;
+ buf[*offset] = 0xaa; /* marker at offset 5000 (frag0) */
+ buf[*offset + 15] = 0xaa; /* marker at offset 5015 (frag0) */
+
+ err = bpf_prog_test_run(prog_fd, 1, buf, 9000,
+ buf, &size, &retval, &duration);
+
+ /* test_xdp_update_frags: buf[5000,5015]: 0xaa -> 0xbb */
+ CHECK(err || retval != XDP_PASS ||
+ buf[5000] != 0xbb || buf[5015] != 0xbb,
+ "9000b", "err %d errno %d retval %d size %d\n",
+ err, errno, retval, size);
+
+ memset(buf, 0, 9000);
+ offset = (__u32 *)buf;
+ *offset = 3510;
+ buf[*offset] = 0xaa; /* marker at offset 3510 (head) */
+ buf[*offset + 15] = 0xaa; /* marker at offset 3525 (frag0) */
+
+ err = bpf_prog_test_run(prog_fd, 1, buf, 9000,
+ buf, &size, &retval, &duration);
+
+ /* test_xdp_update_frags: buf[3510,3525]: 0xaa -> 0xbb */
+ CHECK(err || retval != XDP_PASS ||
+ buf[3510] != 0xbb || buf[3525] != 0xbb,
+ "9000b", "err %d errno %d retval %d size %d\n",
+ err, errno, retval, size);
+
+ free(buf);
+
+ bpf_object__close(obj);
+}
+
+void test_xdp_adjust_frags(void)
+{
+ if (test__start_subtest("xdp_adjust_frags"))
+ test_xdp_update_frags();
+}
diff --git a/tools/testing/selftests/bpf/progs/test_xdp_update_frags.c b/tools/testing/selftests/bpf/progs/test_xdp_update_frags.c
new file mode 100644
index 000000000000..5801f05219db
--- /dev/null
+++ b/tools/testing/selftests/bpf/progs/test_xdp_update_frags.c
@@ -0,0 +1,42 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of version 2 of the GNU General Public
+ * License as published by the Free Software Foundation.
+ */
+#include <linux/bpf.h>
+#include <linux/if_ether.h>
+#include <bpf/bpf_helpers.h>
+
+int _version SEC("version") = 1;
+
+SEC("xdp_mb/xdp_adjust_frags")
+int _xdp_adjust_frags(struct xdp_md *xdp)
+{
+ __u8 *data_end = (void *)(long)xdp->data_end;
+ __u8 *data = (void *)(long)xdp->data;
+ __u8 val[16] = {};
+ __u32 offset;
+ int err;
+
+ if (data + sizeof(__u32) > data_end)
+ return XDP_DROP;
+
+ offset = *(__u32 *)data;
+ err = bpf_xdp_load_bytes(xdp, offset, val, sizeof(val));
+ if (err < 0)
+ return XDP_DROP;
+
+ if (val[0] != 0xaa || val[15] != 0xaa) /* marker */
+ return XDP_DROP;
+
+ val[0] = 0xbb; /* update the marker */
+ val[15] = 0xbb;
+ err = bpf_xdp_store_bytes(xdp, offset, val, sizeof(val));
+ if (err < 0)
+ return XDP_DROP;
+
+ return XDP_PASS;
+}
+
+char _license[] SEC("license") = "GPL";
--
2.31.1
next prev parent reply other threads:[~2021-11-04 17:37 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-11-04 17:35 [PATCH v17 bpf-next 00/23] mvneta: introduce XDP multi-buffer support Lorenzo Bianconi
2021-11-04 17:35 ` [PATCH v17 bpf-next 01/23] net: skbuff: add size metadata to skb_shared_info for xdp Lorenzo Bianconi
2021-11-04 17:35 ` [PATCH v17 bpf-next 02/23] xdp: introduce flags field in xdp_buff/xdp_frame Lorenzo Bianconi
2021-11-04 17:35 ` [PATCH v17 bpf-next 03/23] net: mvneta: update mb bit before passing the xdp buffer to eBPF layer Lorenzo Bianconi
2021-11-04 17:35 ` [PATCH v17 bpf-next 04/23] net: mvneta: simplify mvneta_swbm_add_rx_fragment management Lorenzo Bianconi
2021-11-04 17:35 ` [PATCH v17 bpf-next 05/23] net: xdp: add xdp_update_skb_shared_info utility routine Lorenzo Bianconi
2021-11-04 17:35 ` [PATCH v17 bpf-next 06/23] net: marvell: rely on " Lorenzo Bianconi
2021-11-04 17:35 ` [PATCH v17 bpf-next 07/23] xdp: add multi-buff support to xdp_return_{buff/frame} Lorenzo Bianconi
2021-11-04 17:35 ` [PATCH v17 bpf-next 08/23] net: mvneta: add multi buffer support to XDP_TX Lorenzo Bianconi
2021-11-04 17:35 ` [PATCH v17 bpf-next 09/23] bpf: introduce BPF_F_XDP_MB flag in prog_flags loading the ebpf program Lorenzo Bianconi
2021-11-04 17:35 ` [PATCH v17 bpf-next 10/23] net: mvneta: enable jumbo frames if the loaded XDP program support mb Lorenzo Bianconi
2021-11-04 17:35 ` [PATCH v17 bpf-next 11/23] bpf: introduce bpf_xdp_get_buff_len helper Lorenzo Bianconi
2021-11-04 17:35 ` [PATCH v17 bpf-next 12/23] bpf: add multi-buff support to the bpf_xdp_adjust_tail() API Lorenzo Bianconi
2021-11-05 2:16 ` Jakub Kicinski
2021-11-05 13:57 ` Lorenzo Bianconi
2021-11-05 23:29 ` Jakub Kicinski
2021-11-08 16:55 ` Lorenzo Bianconi
2021-11-08 18:08 ` Toke Høiland-Jørgensen
2021-11-08 19:06 ` Lorenzo Bianconi
2021-11-08 20:46 ` Toke Høiland-Jørgensen
2021-11-08 21:40 ` Jakub Kicinski
2021-11-09 21:58 ` Lorenzo Bianconi
2021-11-04 17:35 ` [PATCH v17 bpf-next 13/23] bpf: add multi-buffer support to xdp copy helpers Lorenzo Bianconi
2021-11-05 23:29 ` Jakub Kicinski
2021-11-08 13:59 ` Lorenzo Bianconi
2021-11-11 7:50 ` Eelco Chaudron
2021-11-04 17:35 ` [PATCH v17 bpf-next 14/23] bpf: move user_size out of bpf_test_init Lorenzo Bianconi
2021-11-04 17:35 ` [PATCH v17 bpf-next 15/23] bpf: introduce multibuff support to bpf_prog_test_run_xdp() Lorenzo Bianconi
2021-11-04 17:35 ` [PATCH v17 bpf-next 16/23] bpf: test_run: add xdp_shared_info pointer in bpf_test_finish signature Lorenzo Bianconi
2021-11-04 17:35 ` [PATCH v17 bpf-next 17/23] bpf: selftests: update xdp_adjust_tail selftest to include multi-buffer Lorenzo Bianconi
2021-11-04 17:35 ` [PATCH v17 bpf-next 18/23] libbpf: Add SEC name for xdp_mb programs Lorenzo Bianconi
2021-11-04 17:35 ` [PATCH v17 bpf-next 19/23] bpf: generalise tail call map Lorenzo Bianconi
2021-11-04 17:35 ` [PATCH v17 bpf-next 20/23] net: xdp: introduce bpf_xdp_pointer utility routine Lorenzo Bianconi
2021-11-05 23:29 ` Jakub Kicinski
2021-11-08 16:48 ` Lorenzo Bianconi
2021-11-04 17:35 ` Lorenzo Bianconi [this message]
2021-11-04 17:35 ` [PATCH v17 bpf-next 22/23] bpf: selftests: add CPUMAP/DEVMAP selftests for xdp multi-buff Lorenzo Bianconi
2021-11-04 17:35 ` [PATCH v17 bpf-next 23/23] xdp: disable XDP_REDIRECT " Lorenzo Bianconi
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=e011034dd6d7ff0a80b38aa2f6e2ed209ed6458e.1636044387.git.lorenzo@kernel.org \
--to=lorenzo@kernel.org \
--cc=alexander.duyck@gmail.com \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=brouer@redhat.com \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=dsahern@kernel.org \
--cc=echaudro@redhat.com \
--cc=jasowang@redhat.com \
--cc=john.fastabend@gmail.com \
--cc=kuba@kernel.org \
--cc=lorenzo.bianconi@redhat.com \
--cc=maciej.fijalkowski@intel.com \
--cc=magnus.karlsson@intel.com \
--cc=netdev@vger.kernel.org \
--cc=saeed@kernel.org \
--cc=shayagr@amazon.com \
--cc=tirthendu.sarkar@intel.com \
--cc=toke@redhat.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).