tools: bpftool: Add "inner_map" to "bpftool map create" outer maps
authorQuentin Monnet <quentin@isovalent.com>
Thu, 10 Sep 2020 10:26:52 +0000 (11:26 +0100)
committerAlexei Starovoitov <ast@kernel.org>
Fri, 11 Sep 2020 00:29:21 +0000 (17:29 -0700)
commite3b9626f09d429788d929c9b9000a069fcfc056e
tree2d586e1bc5e3a844c854ac698253912d71f176b7
parent86233ce35e4b886dc5998c72ec6158ed72150782
tools: bpftool: Add "inner_map" to "bpftool map create" outer maps

There is no support for creating maps of types array-of-map or
hash-of-map in bpftool. This is because the kernel needs an inner_map_fd
to collect metadata on the inner maps to be supported by the new map,
but bpftool does not provide a way to pass this file descriptor.

Add a new optional "inner_map" keyword that can be used to pass a
reference to a map, retrieve a fd to that map, and pass it as the
inner_map_fd.

Add related documentation and bash completion. Note that we can
reference the inner map by its name, meaning we can have several times
the keyword "name" with different meanings (mandatory outer map name,
and possibly a name to use to find the inner_map_fd). The bash
completion will offer it just once, and will not suggest "name" on the
following command:

    # bpftool map create /sys/fs/bpf/my_outer_map type hash_of_maps \
        inner_map name my_inner_map [TAB]

Fixing that specific case seems too convoluted. Completion will work as
expected, however, if the outer map name comes first and the "inner_map
name ..." is passed second.

Signed-off-by: Quentin Monnet <quentin@isovalent.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Acked-by: Andrii Nakryiko <andriin@fb.com>
Link: https://lore.kernel.org/bpf/20200910102652.10509-4-quentin@isovalent.com
tools/bpf/bpftool/Documentation/bpftool-map.rst
tools/bpf/bpftool/bash-completion/bpftool
tools/bpf/bpftool/map.c