On Wed, 29 Jun 2022 at 18:33, Daniel Müller <deso@xxxxxxxxxx> wrote: > > On Wed, Jun 29, 2022 at 03:40:18PM +0100, Quentin Monnet wrote: > > Add a "bpftool feature list" subcommand to list BPF "features". > > Contrarily to "bpftool feature probe", this is not about the features > > available on the system. Instead, it lists all features known to bpftool > > from compilation time; in other words, all program, map, attach, link > > types known to the libbpf version in use, and all helpers found in the > > UAPI BPF header. > > > > The first use case for this feature is bash completion: running the > > command provides a list of types that can be used to produce the list of > > candidate map types, for example. > > > > Now that bpftool uses "standard" names provided by libbpf for the > > program, map, link, and attach types, having the ability to list these > > types and helpers could also be useful in scripts to loop over existing > > items. > > > > Sample output: > > > > # bpftool feature list prog_types | grep -vw unspec | head -n 6 > > socket_filter > > kprobe > > sched_cls > > sched_act > > tracepoint > > xdp > > > > # bpftool -p feature list map_types | jq '.[1]' > > "hash" > > > > # bpftool feature list attach_types | grep '^cgroup_' > > cgroup_inet_ingress > > cgroup_inet_egress > > [...] > > cgroup_inet_sock_release > > > > # bpftool feature list helpers | grep -vw bpf_unspec | wc -l > > 207 > > > > The "unspec" types and helpers are not filtered out by bpftool, so as to > > remain closer to the enums, and to preserve the indices in the JSON > > arrays (e.g. "hash" at index 1 == BPF_MAP_TYPE_HASH in map types list). > > > > Signed-off-by: Quentin Monnet <quentin@xxxxxxxxxxxxx> > > --- > > .../bpftool/Documentation/bpftool-feature.rst | 12 ++++ > > tools/bpf/bpftool/bash-completion/bpftool | 7 ++- > > tools/bpf/bpftool/feature.c | 55 +++++++++++++++++++ > > 3 files changed, 73 insertions(+), 1 deletion(-) > > > > diff --git a/tools/bpf/bpftool/Documentation/bpftool-feature.rst b/tools/bpf/bpftool/Documentation/bpftool-feature.rst > > index 4ce9a77bc1e0..4bf1724d0e8c 100644 > > --- a/tools/bpf/bpftool/Documentation/bpftool-feature.rst > > +++ b/tools/bpf/bpftool/Documentation/bpftool-feature.rst > > @@ -24,9 +24,11 @@ FEATURE COMMANDS > > ================ > > > > | **bpftool** **feature probe** [*COMPONENT*] [**full**] [**unprivileged**] [**macros** [**prefix** *PREFIX*]] > > +| **bpftool** **feature list** *GROUP* > > | **bpftool** **feature help** > > | > > | *COMPONENT* := { **kernel** | **dev** *NAME* } > > +| *GROUP* := { **prog_types** | **map_types** | **attach_types** | **helpers** } > > Is **link_types** missing from this enumeration? Yes of course, thanks for catching this. And for the review! v2 is on its way. Quentin