Commit 902196a5 authored by Daniel Borkmann's avatar Daniel Borkmann

Merge branch 'bpf-misc-fixes'

Jakub Kicinski says:

====================
This small series allows test_offload.py selftest to run on modern
distributions which may create BPF programs for cgroups at boot,
like Ubuntu 18.04.  We still expect the program list to not be
altered by any other agent while the test is running, but no longer
depend on there being no BPF programs at all at the start.

Fixing the test revealed a small problem with bpftool, which doesn't
report the program load time very accurately.  Because nanoseconds
were not taken into account reported load time would fluctuate by
1 second.  First patch of the series takes care of fixing that.
====================
Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
parents 3bce593a 47cf52a2
...@@ -90,7 +90,9 @@ static void print_boot_time(__u64 nsecs, char *buf, unsigned int size) ...@@ -90,7 +90,9 @@ static void print_boot_time(__u64 nsecs, char *buf, unsigned int size)
} }
wallclock_secs = (real_time_ts.tv_sec - boot_time_ts.tv_sec) + wallclock_secs = (real_time_ts.tv_sec - boot_time_ts.tv_sec) +
nsecs / 1000000000; (real_time_ts.tv_nsec - boot_time_ts.tv_nsec + nsecs) /
1000000000;
if (!localtime_r(&wallclock_secs, &load_tm)) { if (!localtime_r(&wallclock_secs, &load_tm)) {
snprintf(buf, size, "%llu", nsecs / 1000000000); snprintf(buf, size, "%llu", nsecs / 1000000000);
......
...@@ -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