tools: bpftool: fix bash completion for bpftool prog (attach|detach)

Fix bash completion for "bpftool prog (attach|detach) PROG TYPE MAP" so
that the list of indices proposed for MAP are map indices, and not PROG
indices. Also use variables for map and prog reference types ("id",
"pinned", and "tag" for programs).

Fixes: b7d3826c2e ("bpf: bpftool, add support for attaching programs to maps")
Signed-off-by: Quentin Monnet <quentin.monnet@netronome.com>
Reviewed-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
Quentin Monnet 2018-11-30 16:25:45 +00:00 коммит произвёл Alexei Starovoitov
Родитель 327e5dab6d
Коммит cad4977344
1 изменённых файлов: 49 добавлений и 24 удалений

Просмотреть файл

@ -243,16 +243,20 @@ _bpftool()
# Completion depends on object and command in use # Completion depends on object and command in use
case $object in case $object in
prog) prog)
if [[ $command != "load" && $command != "loadall" ]]; then # Complete id, only for subcommands that use prog (but no map) ids
case $command in
show|list|dump|pin)
case $prev in case $prev in
id) id)
_bpftool_get_prog_ids _bpftool_get_prog_ids
return 0 return 0
;; ;;
esac esac
fi ;;
esac
local PROG_TYPE='id pinned tag' local PROG_TYPE='id pinned tag'
local MAP_TYPE='id pinned'
case $command in case $command in
show|list) show|list)
[[ $prev != "$command" ]] && return 0 [[ $prev != "$command" ]] && return 0
@ -293,23 +297,44 @@ _bpftool()
return 0 return 0
;; ;;
attach|detach) attach|detach)
if [[ ${#words[@]} == 7 ]]; then case $cword in
COMPREPLY=( $( compgen -W "id pinned" -- "$cur" ) ) 3)
COMPREPLY=( $( compgen -W "$PROG_TYPE" -- "$cur" ) )
return 0 return 0
fi ;;
4)
if [[ ${#words[@]} == 6 ]]; then case $prev in
COMPREPLY=( $( compgen -W "msg_verdict skb_verdict \ id)
skb_parse flow_dissector" -- "$cur" ) ) _bpftool_get_prog_ids
;;
pinned)
_filedir
;;
esac
return 0 return 0
fi ;;
5)
if [[ $prev == "$command" ]]; then COMPREPLY=( $( compgen -W 'msg_verdict skb_verdict \
COMPREPLY=( $( compgen -W "id pinned" -- "$cur" ) ) skb_parse flow_dissector' -- "$cur" ) )
return 0 return 0
fi ;;
6)
COMPREPLY=( $( compgen -W "$MAP_TYPE" -- "$cur" ) )
return 0 return 0
;; ;;
7)
case $prev in
id)
_bpftool_get_map_ids
;;
pinned)
_filedir
;;
esac
return 0
;;
esac
;;
load|loadall) load|loadall)
local obj local obj