Netdev Archive on lore.kernel.org
help / color / mirror / Atom feed
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 v10 bpf-next 18/18] bpf: add bpf_xdp_adjust_data selftest
Date: Wed, 28 Jul 2021 11:38:23 +0200 [thread overview]
Message-ID: <8761f8ba2fd7f2940017c5b4c2aac1c6beeed066.1627463617.git.lorenzo@kernel.org> (raw)
In-Reply-To: <cover.1627463617.git.lorenzo@kernel.org>
Introduce kernel selftest for new bpf_xdp_adjust_data helper.
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
---
.../bpf/prog_tests/xdp_adjust_data.c | 55 +++++++++++++++++++
.../bpf/progs/test_xdp_update_frags.c | 49 +++++++++++++++++
2 files changed, 104 insertions(+)
create mode 100644 tools/testing/selftests/bpf/prog_tests/xdp_adjust_data.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_data.c b/tools/testing/selftests/bpf/prog_tests/xdp_adjust_data.c
new file mode 100644
index 000000000000..a3e098b72fc9
--- /dev/null
+++ b/tools/testing/selftests/bpf/prog_tests/xdp_adjust_data.c
@@ -0,0 +1,55 @@
+// SPDX-License-Identifier: GPL-2.0
+#include <test_progs.h>
+#include <network_helpers.h>
+
+void test_xdp_update_frag(void)
+{
+ const char *file = "./test_xdp_update_frags.o";
+ __u32 duration, retval, size;
+ struct bpf_object *obj;
+ int err, prog_fd;
+ __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);
+
+ err = bpf_prog_test_run(prog_fd, 1, buf, 128,
+ buf, &size, &retval, &duration);
+ free(buf);
+
+ CHECK(err || retval != XDP_DROP,
+ "128b", "err %d errno %d retval %d size %d\n",
+ err, errno, retval, size);
+
+ buf = malloc(9000);
+ if (CHECK(!buf, "malloc()", "error:%s\n", strerror(errno)))
+ return;
+
+ memset(buf, 0, 9000);
+ buf[5000] = 0xaa; /* marker at offset 5000 (frag0) */
+
+ err = bpf_prog_test_run(prog_fd, 1, buf, 9000,
+ buf, &size, &retval, &duration);
+
+ /* test_xdp_update_frags: buf[5000]: 0xaa -> 0xbb */
+ CHECK(err || retval != XDP_PASS || buf[5000] != 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_data(void)
+{
+ if (test__start_subtest("xdp_adjust_data"))
+ test_xdp_update_frag();
+}
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..2392cc3b6ba5
--- /dev/null
+++ b/tools/testing/selftests/bpf/progs/test_xdp_update_frags.c
@@ -0,0 +1,49 @@
+// 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_adjust_frags")
+int _xdp_adjust_frags(struct xdp_md *xdp)
+{
+ __u8 *data_end = (void *)(long)xdp->data_end;
+ __u8 *data = (void *)(long)xdp->data;
+ __u32 offset = 5000; /* marker offset */
+ int ret = XDP_DROP;
+ int data_len;
+
+ if (data + sizeof(__u32) > data_end)
+ return XDP_DROP;
+
+ data_len = bpf_xdp_adjust_data(xdp, offset);
+ if (data_len < 0)
+ return XDP_DROP;
+
+ if (data_len > 5000)
+ goto out;
+
+ data_end = (void *)(long)xdp->data_end;
+ data = (void *)(long)xdp->data;
+ offset -= data_len; /* offset in frag0 */
+
+ if (data + offset + 1 > data_end)
+ goto out;
+
+ if (data[offset] != 0xaa) /* marker */
+ goto out;
+
+ data[offset] = 0xbb; /* update the marker */
+ ret = XDP_PASS;
+out:
+ bpf_xdp_adjust_data(xdp, 0);
+ return ret;
+}
+
+char _license[] SEC("license") = "GPL";
--
2.31.1
next prev parent reply other threads:[~2021-07-28 9:40 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-07-28 9:33 [PATCH v10 bpf-next 00/18] mvneta: introduce XDP multi-buffer support Lorenzo Bianconi
2021-07-28 9:38 ` Lorenzo Bianconi
2021-07-28 9:38 ` [PATCH v10 bpf-next 01/18] net: skbuff: add size metadata to skb_shared_info for xdp Lorenzo Bianconi
2021-07-28 9:38 ` [PATCH v10 bpf-next 02/18] xdp: introduce flags field in xdp_buff/xdp_frame Lorenzo Bianconi
2021-07-28 9:38 ` [PATCH v10 bpf-next 03/18] net: mvneta: update mb bit before passing the xdp buffer to eBPF layer Lorenzo Bianconi
2021-07-28 9:38 ` [PATCH v10 bpf-next 04/18] net: mvneta: simplify mvneta_swbm_add_rx_fragment management Lorenzo Bianconi
2021-07-28 9:38 ` [PATCH v10 bpf-next 05/18] net: xdp: add xdp_update_skb_shared_info utility routine Lorenzo Bianconi
2021-07-28 9:38 ` [PATCH v10 bpf-next 06/18] net: marvell: rely on " Lorenzo Bianconi
2021-07-28 9:38 ` [PATCH v10 bpf-next 07/18] xdp: add multi-buff support to xdp_return_{buff/frame} Lorenzo Bianconi
2021-07-28 9:38 ` [PATCH v10 bpf-next 08/18] net: mvneta: add multi buffer support to XDP_TX Lorenzo Bianconi
2021-07-28 9:38 ` [PATCH v10 bpf-next 09/18] net: mvneta: enable jumbo frames for XDP Lorenzo Bianconi
2021-07-28 9:38 ` [PATCH v10 bpf-next 10/18] bpf: add multi-buff support to the bpf_xdp_adjust_tail() API Lorenzo Bianconi
2021-07-28 9:38 ` [PATCH v10 bpf-next 11/18] bpf: introduce bpf_xdp_get_buff_len helper Lorenzo Bianconi
2021-07-28 9:38 ` [PATCH v10 bpf-next 12/18] bpf: add multi-buffer support to xdp copy helpers Lorenzo Bianconi
2021-07-28 9:38 ` [PATCH v10 bpf-next 13/18] bpf: move user_size out of bpf_test_init Lorenzo Bianconi
2021-07-28 9:38 ` [PATCH v10 bpf-next 14/18] bpf: introduce multibuff support to bpf_prog_test_run_xdp() Lorenzo Bianconi
2021-07-28 9:38 ` [PATCH v10 bpf-next 15/18] bpf: test_run: add xdp_shared_info pointer in bpf_test_finish signature Lorenzo Bianconi
2021-07-28 9:38 ` [PATCH v10 bpf-next 16/18] bpf: update xdp_adjust_tail selftest to include multi-buffer Lorenzo Bianconi
2021-07-28 9:38 ` [PATCH v10 bpf-next 17/18] net: xdp: introduce bpf_xdp_adjust_data helper Lorenzo Bianconi
2021-07-28 9:38 ` Lorenzo Bianconi [this message]
2021-07-28 9:47 ` [PATCH v10 bpf-next 00/18] mvneta: introduce XDP multi-buffer support Lorenzo Bianconi
2021-07-30 23:00 ` Andrii Nakryiko
2021-08-02 14:42 ` 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=8761f8ba2fd7f2940017c5b4c2aac1c6beeed066.1627463617.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 \
--subject='Re: [PATCH v10 bpf-next 18/18] bpf: add bpf_xdp_adjust_data selftest' \
/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
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).