[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20181213190301.65816-1-sdf@google.com>
Date: Thu, 13 Dec 2018 11:02:55 -0800
From: Stanislav Fomichev <sdf@...gle.com>
To: netdev@...r.kernel.org, ast@...nel.org
Cc: davem@...emloft.net, daniel@...earbox.net, ecree@...arflare.com,
quentin.monnet@...ronome.com, Stanislav Fomichev <sdf@...gle.com>
Subject: [PATCH bpf-next 0/6] skip verifier/map tests if kernel support is missing
If test_maps/test_verifier is running against the kernel which doesn't
have _all_ BPF features enabled, it fails with an error. This patch
series tries to probe kernel support for each failed test and skip
it instead. This lets users run BPF selftests in the not-all-bpf-yes
environments and received correct PASS/NON-PASS result.
See https://www.spinics.net/lists/netdev/msg539331.html for more
context.
The series goes like this:
* patch #1 adds bpf_prog_type_supported() and
bpf_map_type_supported() which query the kernel (insert 'return 0'
program or try to create empty map with correct key/value sizes) and
return supported/unsupported.
Note: this functionality can later be reimplemented on top of Quentin's
recent 'bpftool feature' patchset if he decides to move the probes
into libbpf.
* patch #2 skips sockmap tests in test_maps.c if BPF_MAP_TYPE_SOCKMAP
map is not supported (if bpf_create_map fails, we probe the kernel
for support)
* patch #3 skips verifier tests if test->prog_type is not supported (if
bpf_verify_program fails, we probe the kernel for support)
* patch #4 skips verifier tests if test fixup map is not supported (if
create_map fails, we probe the kernel for support)
Note: we can probably move this probe into create_map helper and
return some argument instead of adding skip_unsupported_map()
to each fixup; but I'm not sure it's better.
Also note: in current implementation we still print 'Failed to
create hash map' from the create_map, but still skip the test.
* next patches fix various small issues that arise from the first four:
* patch #5 sets "unknown func bpf_trace_printk#6" prog_type to
BPF_PROG_TYPE_TRACEPOINT so it is correctly skipped in
CONFIG_BPF_EVENTS=n case
* patch #6 exposes BPF_PROG_TYPE_CGROUP_{SKB,SOCK,SOCK_ADDR} only when
CONFIG_CGROUP_BPF=y, this makes verifier correctly skip appropriate
tests
Note: I'm not sure whether it's worth sprinkling CONFIG_CGROUP_BPF
ifdefs all around net/core/filter.c, maybe it's enough to do only
in bpf_types.h?
Stanislav Fomichev (6):
selftests/bpf: add map/prog type probe helpers
selftests/bpf: skip sockmap in test_maps if kernel doesn't have
support
selftests/bpf: skip verifier tests for unsupported program types
selftests/bpf: skip verifier tests for unsupported map types
selftests/bpf: mark verifier test that uses bpf_trace_printk as
BPF_PROG_TYPE_TRACEPOINT
bpf: BPF_PROG_TYPE_CGROUP_{SKB,SOCK,SOCK_ADDR} require cgroups enabled
include/linux/bpf_types.h | 2 +
net/core/filter.c | 18 ++++++
tools/testing/selftests/bpf/Makefile | 2 +
tools/testing/selftests/bpf/probe_helpers.c | 69 +++++++++++++++++++++
tools/testing/selftests/bpf/probe_helpers.h | 10 +++
tools/testing/selftests/bpf/test_maps.c | 14 ++++-
tools/testing/selftests/bpf/test_verifier.c | 45 ++++++++++++--
7 files changed, 155 insertions(+), 5 deletions(-)
create mode 100644 tools/testing/selftests/bpf/probe_helpers.c
create mode 100644 tools/testing/selftests/bpf/probe_helpers.h
--
2.20.0.rc2.403.gdbc3b29805-goog
Powered by blists - more mailing lists