Commit 47cf52a2 authored by Jakub Kicinski's avatar Jakub Kicinski Committed by Daniel Borkmann

selftests/bpf: test offloads even with BPF programs present

Modern distroes increasingly make use of BPF programs.  Default
Ubuntu 18.04 installation boots with a number of cgroup_skb
programs loaded.

test_offloads.py tries to check if programs and maps are not
leaked on error paths by confirming the list of programs on the
system is empty between tests.

Since we can no longer expect the system to have no BPF objects
at boot try to remember the programs and maps present at the start,
and skip those when scanning the system.
Signed-off-by: default avatarJakub Kicinski <jakub.kicinski@netronome.com>
Reviewed-by: default avatarQuentin Monnet <quentin.monnet@netronome.com>
Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
parent 07480cbc
...@@ -163,6 +163,10 @@ def bpftool(args, JSON=True, ns="", fail=True): ...@@ -163,6 +163,10 @@ def bpftool(args, JSON=True, ns="", fail=True):
def bpftool_prog_list(expected=None, ns=""): def bpftool_prog_list(expected=None, ns=""):
_, progs = bpftool("prog show", JSON=True, ns=ns, fail=True) _, progs = bpftool("prog show", JSON=True, ns=ns, fail=True)
# Remove the base progs
for p in base_progs:
if p in progs:
progs.remove(p)
if expected is not None: if expected is not None:
if len(progs) != expected: if len(progs) != expected:
fail(True, "%d BPF programs loaded, expected %d" % fail(True, "%d BPF programs loaded, expected %d" %
...@@ -171,6 +175,10 @@ def bpftool_prog_list(expected=None, ns=""): ...@@ -171,6 +175,10 @@ def bpftool_prog_list(expected=None, ns=""):
def bpftool_map_list(expected=None, ns=""): def bpftool_map_list(expected=None, ns=""):
_, maps = bpftool("map show", JSON=True, ns=ns, fail=True) _, maps = bpftool("map show", JSON=True, ns=ns, fail=True)
# Remove the base maps
for m in base_maps:
if m in maps:
maps.remove(m)
if expected is not None: if expected is not None:
if len(maps) != expected: if len(maps) != expected:
fail(True, "%d BPF maps loaded, expected %d" % fail(True, "%d BPF maps loaded, expected %d" %
...@@ -585,8 +593,8 @@ skip(os.getuid() != 0, "test must be run as root") ...@@ -585,8 +593,8 @@ skip(os.getuid() != 0, "test must be run as root")
# Check tools # Check tools
ret, progs = bpftool("prog", fail=False) ret, progs = bpftool("prog", fail=False)
skip(ret != 0, "bpftool not installed") skip(ret != 0, "bpftool not installed")
# Check no BPF programs are loaded base_progs = progs
skip(len(progs) != 0, "BPF programs already loaded on the system") _, base_maps = bpftool("map")
# Check netdevsim # Check netdevsim
ret, out = cmd("modprobe netdevsim", fail=False) ret, out = cmd("modprobe netdevsim", fail=False)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment