Commit cad49773 authored by Quentin Monnet's avatar Quentin Monnet Committed by Alexei Starovoitov
Browse files

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: b7d3826c ("bpf: bpftool, add support for attaching programs to maps")
Signed-off-by: default avatarQuentin Monnet <quentin.monnet@netronome.com>
Reviewed-by: default avatarJakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
parent 327e5dab
Loading
Loading
Loading
Loading
+49 −24
Original line number Diff line number Diff line
@@ -243,16 +243,20 @@ _bpftool()
    # Completion depends on object and command in use
    case $object in
        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
                        id)
                            _bpftool_get_prog_ids
                            return 0
                            ;;
                    esac
            fi
                    ;;
            esac

            local PROG_TYPE='id pinned tag'
            local MAP_TYPE='id pinned'
            case $command in
                show|list)
                    [[ $prev != "$command" ]] && return 0
@@ -293,23 +297,44 @@ _bpftool()
                    return 0
                    ;;
                attach|detach)
                    if [[ ${#words[@]} == 7 ]]; then
                        COMPREPLY=( $( compgen -W "id pinned" -- "$cur" ) )
                    case $cword in
                        3)
                            COMPREPLY=( $( compgen -W "$PROG_TYPE" -- "$cur" ) )
                            return 0
                    fi

                    if [[ ${#words[@]} == 6 ]]; then
                        COMPREPLY=( $( compgen -W "msg_verdict skb_verdict \
                            skb_parse flow_dissector" -- "$cur" ) )
                            ;;
                        4)
                            case $prev in
                                id)
                                    _bpftool_get_prog_ids
                                    ;;
                                pinned)
                                    _filedir
                                    ;;
                            esac
                            return 0
                    fi

                    if [[ $prev == "$command" ]]; then
                        COMPREPLY=( $( compgen -W "id pinned" -- "$cur" ) )
                            ;;
                        5)
                            COMPREPLY=( $( compgen -W 'msg_verdict skb_verdict \
                                skb_parse flow_dissector' -- "$cur" ) )
                            return 0
                    fi
                            ;;
                        6)
                            COMPREPLY=( $( compgen -W "$MAP_TYPE" -- "$cur" ) )
                            return 0
                            ;;
                        7)
                            case $prev in
                                id)
                                    _bpftool_get_map_ids
                                    ;;
                                pinned)
                                    _filedir
                                    ;;
                            esac
                            return 0
                            ;;
                    esac
                    ;;
                load|loadall)
                    local obj