Message ID | 20190320173332.18105-5-alban@kinvolk.io |
---|---|
State | Changes Requested |
Delegated to: | BPF Maintainers |
Headers | show |
Series | [bpf-next,v1,1/7] tools: bpftool: fix infinite loop | expand |
2019-03-20 18:33 UTC+0100 ~ Alban Crequy <alban.crequy@gmail.com> > From: Alban Crequy <alban@kinvolk.io> > > Using a file descriptor passed by the parent process enables > applications to fork a bpftool command to inspect a map they know by > file descriptor even when they don't support bpffs or map ids. > > Documentation and bash completion updated as well. > > Signed-off-by: Alban Crequy <alban@kinvolk.io> > --- > tools/bpf/bpftool/Documentation/bpftool-map.rst | 8 ++++++++ > tools/bpf/bpftool/bash-completion/bpftool | 10 +++++----- > tools/bpf/bpftool/map.c | 13 +++++++++++++ > 3 files changed, 26 insertions(+), 5 deletions(-) > > diff --git a/tools/bpf/bpftool/Documentation/bpftool-map.rst b/tools/bpf/bpftool/Documentation/bpftool-map.rst > index dfd8352fa453..658fe2fb8ecf 100644 > --- a/tools/bpf/bpftool/Documentation/bpftool-map.rst > +++ b/tools/bpf/bpftool/Documentation/bpftool-map.rst > @@ -265,6 +265,14 @@ would be lost as soon as bpftool exits). > > anon_inode:bpf-map > > +**# bpftool map exec pinned /sys/fs/bpf/foo fd 99 cmd -- bpftool map show fd 99** > + > +:: > + > + 10: hash name some_map flags 0x0 > + key 4B value 8B max_entries 2048 memlock 167936B > + > + Could you please also update the description of the command higher in that page, and in the interactive help?
diff --git a/tools/bpf/bpftool/Documentation/bpftool-map.rst b/tools/bpf/bpftool/Documentation/bpftool-map.rst index dfd8352fa453..658fe2fb8ecf 100644 --- a/tools/bpf/bpftool/Documentation/bpftool-map.rst +++ b/tools/bpf/bpftool/Documentation/bpftool-map.rst @@ -265,6 +265,14 @@ would be lost as soon as bpftool exits). anon_inode:bpf-map +**# bpftool map exec pinned /sys/fs/bpf/foo fd 99 cmd -- bpftool map show fd 99** + +:: + + 10: hash name some_map flags 0x0 + key 4B value 8B max_entries 2048 memlock 167936B + + SEE ALSO ======== **bpf**\ (2), diff --git a/tools/bpf/bpftool/bash-completion/bpftool b/tools/bpf/bpftool/bash-completion/bpftool index 63cd53c4d3a7..9ec1833bda1e 100644 --- a/tools/bpf/bpftool/bash-completion/bpftool +++ b/tools/bpf/bpftool/bash-completion/bpftool @@ -253,7 +253,7 @@ _bpftool() esac local PROG_TYPE='id pinned tag' - local MAP_TYPE='id pinned' + local MAP_TYPE='id pinned fd' case $command in show|list) [[ $prev != "$command" ]] && return 0 @@ -343,7 +343,7 @@ _bpftool() obj=${words[3]} if [[ ${words[-4]} == "map" ]]; then - COMPREPLY=( $( compgen -W "id pinned" -- "$cur" ) ) + COMPREPLY=( $( compgen -W "id pinned fd" -- "$cur" ) ) return 0 fi if [[ ${words[-3]} == "map" ]]; then @@ -406,7 +406,7 @@ _bpftool() esac ;; map) - local MAP_TYPE='id pinned' + local MAP_TYPE='id pinned fd' case $command in show|list|dump|peek|pop|dequeue) case $prev in @@ -462,7 +462,7 @@ _bpftool() return 0 ;; innermap) - COMPREPLY+=( $( compgen -W "id pinned" -- "$cur" ) ) + COMPREPLY+=( $( compgen -W "id pinned fd" -- "$cur" ) ) return 0 ;; id) @@ -525,7 +525,7 @@ _bpftool() # map, depending on the type of the map to update. case "$(_bpftool_map_guess_map_type)" in array_of_maps|hash_of_maps) - local MAP_TYPE='id pinned' + local MAP_TYPE='id pinned fd' COMPREPLY+=( $( compgen -W "$MAP_TYPE" \ -- "$cur" ) ) return 0 diff --git a/tools/bpf/bpftool/map.c b/tools/bpf/bpftool/map.c index 768497364cee..9befcabc299d 100644 --- a/tools/bpf/bpftool/map.c +++ b/tools/bpf/bpftool/map.c @@ -125,6 +125,19 @@ int map_parse_fd(int *argc, char ***argv) NEXT_ARGP(); return open_obj_pinned_any(path, BPF_OBJ_MAP); + } else if (is_prefix(**argv, "fd")) { + char *endptr; + + NEXT_ARGP(); + + fd = strtoul(**argv, &endptr, 0); + if (*endptr) { + p_err("can't parse %s as fd", **argv); + return -1; + } + NEXT_ARGP(); + + return dup(fd); } p_err("expected 'id' or 'pinned', got: '%s'?", **argv);