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: Jakub Kicinski <jakub.kicinski@netronome.com> Reviewed-by: Quentin Monnet <quentin.monnet@netronome.com> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
This commit is contained in:

committed by
Daniel Borkmann

parent
07480cbc05
commit
47cf52a246
@@ -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=""):
|
|||||||
|
|
||||||
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")
|
|||||||
# 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)
|
||||||
|
Reference in New Issue
Block a user