bpftool gained support for probing the current system in order to see what program and map types, and what helpers are available on that system. This patch adds the possibility to pass an interface index to libbpf (and hence to the kernel) when trying to load the programs or to create the maps, in order to see what items a given network device can support. A new keyword "dev <ifname>" can be used as an alternative to "kernel" to indicate that the given device should be tested. If no target ("dev" or "kernel") is specified bpftool defaults to probing the kernel. Sample output: # bpftool -p feature probe dev lo { "syscall_config": { "have_bpf_syscall": true }, "program_types": { "have_sched_cls_prog_type": false, "have_xdp_prog_type": false }, ... } As the target is a network device, /proc/ parameters and kernel configuration are NOT dumped. Availability of the bpf() syscall is still probed, so we can return early if that syscall is not usable (since there is no point in attempting the remaining probes in this case). Among the program types, only the ones that can be offloaded are probed. All map types are probed, as there is no specific rule telling which one could or could not be supported by a device in the future. All helpers are probed (but only for offload-able program types). Caveat: as bpftool does not attempt to attach programs to the device at the moment, probes do not entirely reflect what the device accepts: typically, for Netronome's nfp, results will announce that TC cls offload is available even if support has been deactivated (with e.g. ethtool -K eth1 hw-tc-offload off). v2: - All helpers are probed, whereas previous version would only probe the ones compatible with an offload-able program type. This is because we do not keep a default compatible program type for each helper anymore. Signed-off-by: Quentin Monnet <quentin.monnet@netronome.com> Reviewed-by: Jakub Kicinski <jakub.kicinski@netronome.com> Reviewed-by: Stanislav Fomichev <sdf@google.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org>
86 lines
2.6 KiB
ReStructuredText
86 lines
2.6 KiB
ReStructuredText
===============
|
|
bpftool-feature
|
|
===============
|
|
-------------------------------------------------------------------------------
|
|
tool for inspection of eBPF-related parameters for Linux kernel or net device
|
|
-------------------------------------------------------------------------------
|
|
|
|
:Manual section: 8
|
|
|
|
SYNOPSIS
|
|
========
|
|
|
|
**bpftool** [*OPTIONS*] **feature** *COMMAND*
|
|
|
|
*OPTIONS* := { { **-j** | **--json** } [{ **-p** | **--pretty** }] }
|
|
|
|
*COMMANDS* := { **probe** | **help** }
|
|
|
|
MAP COMMANDS
|
|
=============
|
|
|
|
| **bpftool** **feature probe** [*COMPONENT*] [**macros** [**prefix** *PREFIX*]]
|
|
| **bpftool** **feature help**
|
|
|
|
|
| *COMPONENT* := { **kernel** | **dev** *NAME* }
|
|
|
|
DESCRIPTION
|
|
===========
|
|
**bpftool feature probe** [**kernel**] [**macros** [**prefix** *PREFIX*]]
|
|
Probe the running kernel and dump a number of eBPF-related
|
|
parameters, such as availability of the **bpf()** system call,
|
|
JIT status, eBPF program types availability, eBPF helper
|
|
functions availability, and more.
|
|
|
|
If the **macros** keyword (but not the **-j** option) is
|
|
passed, a subset of the output is dumped as a list of
|
|
**#define** macros that are ready to be included in a C
|
|
header file, for example. If, additionally, **prefix** is
|
|
used to define a *PREFIX*, the provided string will be used
|
|
as a prefix to the names of the macros: this can be used to
|
|
avoid conflicts on macro names when including the output of
|
|
this command as a header file.
|
|
|
|
Keyword **kernel** can be omitted. If no probe target is
|
|
specified, probing the kernel is the default behaviour.
|
|
|
|
Note that when probed, some eBPF helpers (e.g.
|
|
**bpf_trace_printk**\ () or **bpf_probe_write_user**\ ()) may
|
|
print warnings to kernel logs.
|
|
|
|
**bpftool feature probe dev** *NAME* [**macros** [**prefix** *PREFIX*]]
|
|
Probe network device for supported eBPF features and dump
|
|
results to the console.
|
|
|
|
The two keywords **macros** and **prefix** have the same
|
|
role as when probing the kernel.
|
|
|
|
**bpftool feature help**
|
|
Print short help message.
|
|
|
|
OPTIONS
|
|
=======
|
|
-h, --help
|
|
Print short generic help message (similar to **bpftool help**).
|
|
|
|
-v, --version
|
|
Print version number (similar to **bpftool version**).
|
|
|
|
-j, --json
|
|
Generate JSON output. For commands that cannot produce JSON, this
|
|
option has no effect.
|
|
|
|
-p, --pretty
|
|
Generate human-readable JSON output. Implies **-j**.
|
|
|
|
SEE ALSO
|
|
========
|
|
**bpf**\ (2),
|
|
**bpf-helpers**\ (7),
|
|
**bpftool**\ (8),
|
|
**bpftool-prog**\ (8),
|
|
**bpftool-map**\ (8),
|
|
**bpftool-cgroup**\ (8),
|
|
**bpftool-net**\ (8),
|
|
**bpftool-perf**\ (8)
|