From: Stanislav Fomichev <sdf@google.com>
To: bpf@vger.kernel.org
Cc: ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org,
martin.lau@linux.dev, song@kernel.org, yhs@fb.com,
john.fastabend@gmail.com, kpsingh@kernel.org, sdf@google.com,
haoluo@google.com, jolsa@kernel.org,
Jakub Kicinski <kuba@kernel.org>
Subject: [PATCH bpf-next] selftests/bpf: Bring test_offload.py back to life
Date: Mon, 5 Dec 2022 17:10:52 -0800 [thread overview]
Message-ID: <20221206011052.3099563-1-sdf@google.com> (raw)
Commit ccc3f56918f6 ("selftests/bpf: convert remaining legacy map
definitions") converted sample_map_ret0.c to modern BTF map format.
However, it doesn't looks like iproute2 part that attaches XDP
supports this format. Let's use bpftool to load the obj file
instead of iproute2; iproute2 will only attach a pinned program.
Some other related issues:
* bpftool has new extra libbpf_det_bind probing map we need to exclude
* skip trying to load netdevsim modules if it's already loaded (builtin)
Cc: Jakub Kicinski <kuba@kernel.org>
Fixes: ccc3f56918f6 ("selftests/bpf: convert remaining legacy map definitions")
Signed-off-by: Stanislav Fomichev <sdf@google.com>
---
tools/testing/selftests/bpf/test_offload.py | 33 ++++++++++++++++-----
1 file changed, 25 insertions(+), 8 deletions(-)
diff --git a/tools/testing/selftests/bpf/test_offload.py b/tools/testing/selftests/bpf/test_offload.py
index 7fc15e0d24a9..9718140c13fa 100755
--- a/tools/testing/selftests/bpf/test_offload.py
+++ b/tools/testing/selftests/bpf/test_offload.py
@@ -769,12 +769,14 @@ skip(ret != 0, "bpftool not installed")
base_progs = progs
_, base_maps = bpftool("map")
base_map_names = [
- 'pid_iter.rodata' # created on each bpftool invocation
+ 'pid_iter.rodata', # created on each bpftool invocation
+ 'libbpf_det_bind', # created on each bpftool invocation
]
# Check netdevsim
-ret, out = cmd("modprobe netdevsim", fail=False)
-skip(ret != 0, "netdevsim module could not be loaded")
+if not os.path.isdir("/sys/bus/netdevsim/"):
+ ret, out = cmd("modprobe netdevsim", fail=False)
+ skip(ret != 0, "netdevsim module could not be loaded")
# Check debugfs
_, out = cmd("mount")
@@ -1169,9 +1171,12 @@ netns = []
simdev = NetdevSimDev()
sim, = simdev.nsims
- map_obj = bpf_obj("sample_map_ret0.bpf.o")
+ bpftool_prog_load("sample_map_ret0.bpf.o", "/sys/fs/bpf/offload",
+ dev=sim['ifname'])
+ offload = bpf_pinned("/sys/fs/bpf/offload")
+
start_test("Test loading program with maps...")
- sim.set_xdp(map_obj, "offload", JSON=False) # map fixup msg breaks JSON
+ sim.set_xdp(offload, "offload", JSON=False) # map fixup msg breaks JSON
start_test("Test bpftool bound info reporting (own ns)...")
check_dev_info(False, "")
@@ -1191,6 +1196,7 @@ netns = []
prog_file, _ = pin_prog("/sys/fs/bpf/tmp_prog")
map_file, _ = pin_map("/sys/fs/bpf/tmp_map", idx=1, expected=2)
simdev.remove()
+ rm("/sys/fs/bpf/offload")
start_test("Test bpftool bound info reporting (removed dev)...")
check_dev_info_removed(prog_file=prog_file, map_file=map_file)
@@ -1203,7 +1209,10 @@ netns = []
sim, = simdev.nsims
start_test("Test map update (no flags)...")
- sim.set_xdp(map_obj, "offload", JSON=False) # map fixup msg breaks JSON
+ bpftool_prog_load("sample_map_ret0.bpf.o", "/sys/fs/bpf/offload",
+ dev=sim['ifname'])
+ offload = bpf_pinned("/sys/fs/bpf/offload")
+ sim.set_xdp(offload, "offload", JSON=False) # map fixup msg breaks JSON
maps = bpftool_map_list(expected=2)
array = maps[0] if maps[0]["type"] == "array" else maps[1]
htab = maps[0] if maps[0]["type"] == "hash" else maps[1]
@@ -1280,23 +1289,31 @@ netns = []
start_test("Test map remove...")
sim.unset_xdp("offload")
+ rm("/sys/fs/bpf/offload")
bpftool_map_list_wait(expected=0)
simdev.remove()
simdev = NetdevSimDev()
sim, = simdev.nsims
- sim.set_xdp(map_obj, "offload", JSON=False) # map fixup msg breaks JSON
+ bpftool_prog_load("sample_map_ret0.bpf.o", "/sys/fs/bpf/offload",
+ dev=sim['ifname'])
+ offload = bpf_pinned("/sys/fs/bpf/offload")
+ sim.set_xdp(offload, "offload", JSON=False) # map fixup msg breaks JSON
+ rm("/sys/fs/bpf/offload")
simdev.remove()
bpftool_map_list_wait(expected=0)
start_test("Test map creation fail path...")
simdev = NetdevSimDev()
sim, = simdev.nsims
+ bpftool_prog_load("sample_map_ret0.bpf.o", "/sys/fs/bpf/nooffload")
+ nooffload = bpf_pinned("/sys/fs/bpf/nooffload")
sim.dfs["bpf_map_accept"] = "N"
- ret, _ = sim.set_xdp(map_obj, "offload", JSON=False, fail=False)
+ ret, _ = sim.set_xdp(nooffload, "offload", JSON=False, fail=False)
fail(ret == 0,
"netdevsim didn't refuse to create a map with offload disabled")
+ rm("/sys/fs/bpf/nooffload")
simdev.remove()
start_test("Test multi-dev ASIC program reuse...")
--
2.39.0.rc0.267.gcb52ba06e7-goog
next reply other threads:[~2022-12-06 1:10 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-12-06 1:10 Stanislav Fomichev [this message]
2022-12-06 11:49 ` [PATCH bpf-next] selftests/bpf: Bring test_offload.py back to life Toke Høiland-Jørgensen
2022-12-06 18:40 ` Stanislav Fomichev
2022-12-06 19:27 ` Toke Høiland-Jørgensen
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=20221206011052.3099563-1-sdf@google.com \
--to=sdf@google.com \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=haoluo@google.com \
--cc=john.fastabend@gmail.com \
--cc=jolsa@kernel.org \
--cc=kpsingh@kernel.org \
--cc=kuba@kernel.org \
--cc=martin.lau@linux.dev \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.