Blame bash-completion/devlink

Packit Service 3880ab
# bash completion for devlink(8)                          -*- shell-script -*-
Packit Service 3880ab
Packit Service 3880ab
# Get all the optional commands for devlink
Packit Service 3880ab
_devlink_get_optional_commands()
Packit Service 3880ab
{
Packit Service 3880ab
    local object=$1; shift
Packit Service 3880ab
Packit Service 3880ab
    local filter_options=""
Packit Service 3880ab
    local options="$(devlink $object help 2>&1 \
Packit Service 3880ab
        | command sed -n -e "s/^.*devlink $object //p" \
Packit Service 3880ab
        | cut -d " " -f 1)"
Packit Service 3880ab
Packit Service 3880ab
    # Remove duplicate options from "devlink $OBJECT help" command
Packit Service 3880ab
    local opt
Packit Service 3880ab
    for opt in $options; do
Packit Service 3880ab
        if [[ $filter_options =~ $opt ]]; then
Packit Service 3880ab
            continue
Packit Service 3880ab
        else
Packit Service 3880ab
            filter_options="$filter_options $opt"
Packit Service 3880ab
        fi
Packit Service 3880ab
    done
Packit Service 3880ab
Packit Service 3880ab
    echo $filter_options
Packit Service 3880ab
}
Packit Service 3880ab
Packit Service 3880ab
# Complete based on given word, for when an argument or an option name has
Packit Service 3880ab
# but a few possible arguments.
Packit Service 3880ab
_devlink_direct_complete()
Packit Service 3880ab
{
Packit Service 3880ab
    local dev port region value
Packit Service 3880ab
Packit Service 3880ab
    case $1 in
Packit Service 3880ab
        dev)
Packit Service 3880ab
            value=$(devlink dev show 2>/dev/null)
Packit Service 3880ab
            ;;
Packit Service 3880ab
        param_name)
Packit Service 3880ab
            dev=${words[4]}
Packit Service 3880ab
            value=$(devlink -j dev param show 2>/dev/null \
Packit Service 3880ab
                    | jq ".param[\"$dev\"][].name")
Packit Service 3880ab
            ;;
Packit Service 3880ab
        port)
Packit Service 3880ab
            value=$(devlink -j port show 2>/dev/null \
Packit Service 3880ab
                    | jq '.port as $ports | $ports | keys[] as $key
Packit Service 3880ab
                    | ($ports[$key].netdev // $key)')
Packit Service 3880ab
            ;;
Packit Service 3880ab
        region)
Packit Service 3880ab
            value=$(devlink -j region show 2>/dev/null \
Packit Service 3880ab
                    | jq '.regions' | jq 'keys[]')
Packit Service 3880ab
            ;;
Packit Service 3880ab
        snapshot)
Packit Service 3880ab
            region=${words[3]}
Packit Service 3880ab
            value=$(devlink -j region show 2>/dev/null \
Packit Service 3880ab
                    | jq ".regions[\"$region\"].snapshot[]")
Packit Service 3880ab
            ;;
Packit Service 3880ab
        trap)
Packit Service 3880ab
            dev=${words[3]}
Packit Service 3880ab
            value=$(devlink -j trap show 2>/dev/null \
Packit Service 3880ab
                    | jq ".trap[\"$dev\"][].name")
Packit Service 3880ab
            ;;
Packit Service 3880ab
        trap_group)
Packit Service 3880ab
            dev=${words[4]}
Packit Service 3880ab
            value=$(devlink -j trap group show 2>/dev/null \
Packit Service 3880ab
                    | jq ".trap_group[\"$dev\"][].name")
Packit Service 3880ab
            ;;
Packit Service 3880ab
        trap_policer)
Packit Service 3880ab
            dev=${words[4]}
Packit Service 3880ab
            value=$(devlink -j trap policer show 2>/dev/null \
Packit Service 3880ab
                    | jq ".trap_policer[\"$dev\"][].policer")
Packit Service 3880ab
            ;;
Packit Service 3880ab
        health_dev)
Packit Service 3880ab
            value=$(devlink -j health show 2>/dev/null | jq '.health' \
Packit Service 3880ab
                    | jq 'keys[]')
Packit Service 3880ab
            ;;
Packit Service 3880ab
        reporter)
Packit Service 3880ab
            dev=${words[cword - 2]}
Packit Service 3880ab
            value=$(devlink -j health show 2>/dev/null \
Packit Service 3880ab
                    | jq ".health[\"$dev\"][].reporter")
Packit Service 3880ab
            ;;
Packit Service 3880ab
        pool)
Packit Service 3880ab
            dev=$pprev
Packit Service 3880ab
            value=$(devlink -j sb pool show 2>/dev/null \
Packit Service 3880ab
                    | jq ".pool[\"$dev\"][].pool")
Packit Service 3880ab
            ;;
Packit Service 3880ab
        port_pool)
Packit Service 3880ab
            port=${words[5]}
Packit Service 3880ab
            value=$(devlink -j sb port pool show 2>/dev/null \
Packit Service 3880ab
                    | jq ".port_pool[\"$port\"][].pool")
Packit Service 3880ab
            ;;
Packit Service 3880ab
        tc)
Packit Service 3880ab
            port=$pprev
Packit Service 3880ab
            value=$(devlink -j sb tc bind show 2>/dev/null \
Packit Service 3880ab
                    | jq ".tc_bind[\"$port\"][].tc")
Packit Service 3880ab
            ;;
Packit Service 3880ab
    esac
Packit Service 3880ab
Packit Service 3880ab
    COMPREPLY+=( $( compgen -W "$value" -- "$cur" ) )
Packit Service 3880ab
    # Remove colon containing prefix from COMPREPLY items in order to avoid
Packit Service 3880ab
    # wordbreaks with colon.
Packit Service 3880ab
    __ltrim_colon_completions "$cur"
Packit Service 3880ab
}
Packit Service 3880ab
Packit Service 3880ab
# Completion for devlink dev eswitch set
Packit Service 3880ab
_devlink_dev_eswitch_set()
Packit Service 3880ab
{
Packit Service 3880ab
    local -A settings=(
Packit Service 3880ab
        [mode]=notseen
Packit Service 3880ab
        [inline-mode]=notseen
Packit Service 3880ab
        [encap-mode]=notseen
Packit Service 3880ab
    )
Packit Service 3880ab
Packit Service 3880ab
    if [[ $cword -eq 5 ]]; then
Packit Service 3880ab
        COMPREPLY=( $( compgen -W "mode inline-mode encap-mode" -- "$cur" ) )
Packit Service 3880ab
    fi
Packit Service 3880ab
Packit Service 3880ab
    # Mark seen settings
Packit Service 3880ab
    local word
Packit Service 3880ab
    for word in "${words[@]:5:${#words[@]}-1}"; do
Packit Service 3880ab
        if [[ -n $word ]]; then
Packit Service 3880ab
            if [[ "${settings[$word]}" ]]; then
Packit Service 3880ab
                settings[$word]=seen
Packit Service 3880ab
            fi
Packit Service 3880ab
        fi
Packit Service 3880ab
    done
Packit Service 3880ab
Packit Service 3880ab
    case $prev in
Packit Service 3880ab
        mode)
Packit Service 3880ab
            COMPREPLY=( $( compgen -W "legacy switchdev" -- "$cur" ) )
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
        inline-mode)
Packit Service 3880ab
            COMPREPLY=( $( compgen -W "none link network transport" -- \
Packit Service 3880ab
                "$cur" ) )
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
        encap-mode)
Packit Service 3880ab
            COMPREPLY=( $( compgen -W "none basic" -- "$cur" ) )
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
    esac
Packit Service 3880ab
Packit Service 3880ab
    local -a comp_words=()
Packit Service 3880ab
Packit Service 3880ab
    # Add settings not seen to completions
Packit Service 3880ab
    local setting
Packit Service 3880ab
    for setting in "${!settings[@]}"; do
Packit Service 3880ab
        if [ "${settings[$setting]}" = notseen ]; then
Packit Service 3880ab
            comp_words+=( "$setting" )
Packit Service 3880ab
        fi
Packit Service 3880ab
    done
Packit Service 3880ab
Packit Service 3880ab
    COMPREPLY=( $( compgen -W "${comp_words[*]}" -- "$cur" ) )
Packit Service 3880ab
}
Packit Service 3880ab
Packit Service 3880ab
# Completion for devlink dev eswitch
Packit Service 3880ab
_devlink_dev_eswitch()
Packit Service 3880ab
{
Packit Service 3880ab
    case "$cword" in
Packit Service 3880ab
        3)
Packit Service 3880ab
            COMPREPLY=( $( compgen -W "show set" -- "$cur" ) )
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
        4)
Packit Service 3880ab
            _devlink_direct_complete "dev"
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
    esac
Packit Service 3880ab
Packit Service 3880ab
    case "${words[3]}" in
Packit Service 3880ab
        set)
Packit Service 3880ab
            _devlink_dev_eswitch_set
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
        show)
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
    esac
Packit Service 3880ab
}
Packit Service 3880ab
Packit Service 3880ab
# Completion for devlink dev param set
Packit Service 3880ab
_devlink_dev_param_set()
Packit Service 3880ab
{
Packit Service 3880ab
    case $cword in
Packit Service 3880ab
        7)
Packit Service 3880ab
            COMPREPLY=( $( compgen -W "value" -- "$cur" ) )
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
        8)
Packit Service 3880ab
            # String argument
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
        9)
Packit Service 3880ab
            COMPREPLY=( $( compgen -W "cmode" -- "$cur" ) )
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
        10)
Packit Service 3880ab
            COMPREPLY=( $( compgen -W "runtime driverinit permanent" -- \
Packit Service 3880ab
                "$cur" ) )
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
    esac
Packit Service 3880ab
}
Packit Service 3880ab
Packit Service 3880ab
# Completion for devlink dev param
Packit Service 3880ab
_devlink_dev_param()
Packit Service 3880ab
{
Packit Service 3880ab
    case "$cword" in
Packit Service 3880ab
        3)
Packit Service 3880ab
            COMPREPLY=( $( compgen -W "show set" -- "$cur" ) )
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
        4)
Packit Service 3880ab
            _devlink_direct_complete "dev"
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
        5)
Packit Service 3880ab
            COMPREPLY=( $( compgen -W "name" -- "$cur" ) )
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
        6)
Packit Service 3880ab
            _devlink_direct_complete "param_name"
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
    esac
Packit Service 3880ab
Packit Service 3880ab
    if [[ "${words[3]}" == "set" ]]; then
Packit Service 3880ab
        _devlink_dev_param_set
Packit Service 3880ab
    fi
Packit Service 3880ab
}
Packit Service 3880ab
Packit Service 3880ab
# Completion for devlink dev reload
Packit Service 3880ab
_devlink_dev_reload()
Packit Service 3880ab
{
Packit Service 3880ab
    case "$cword" in
Packit Service 3880ab
        4)
Packit Service 3880ab
            COMPREPLY=( $( compgen -W "netns" -- "$cur" ) )
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
        5)
Packit Service 3880ab
            local nslist=$( ip netns list 2>/dev/null )
Packit Service 3880ab
            COMPREPLY=( $( compgen -W "$nslist" -- "$cur" ) )
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
    esac
Packit Service 3880ab
}
Packit Service 3880ab
Packit Service 3880ab
# Completion for devlink dev flash
Packit Service 3880ab
_devlink_dev_flash()
Packit Service 3880ab
{
Packit Service 3880ab
    case "$cword" in
Packit Service 3880ab
        4)
Packit Service 3880ab
            COMPREPLY=( $( compgen -W "file" -- "$cur" ) )
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
        5)
Packit Service 3880ab
            _filedir
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
        6)
Packit Service 3880ab
            COMPREPLY=( $( compgen -W "component" -- "$cur" ) )
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
     esac
Packit Service 3880ab
}
Packit Service 3880ab
Packit Service 3880ab
# Completion for devlink dev
Packit Service 3880ab
_devlink_dev()
Packit Service 3880ab
{
Packit Service 3880ab
    case $command in
Packit Service 3880ab
        show|reload|info|flash)
Packit Service 3880ab
            if [[ $cword -le 3 ]]; then
Packit Service 3880ab
                _devlink_direct_complete "dev"
Packit Service 3880ab
            elif [[ $command == "reload" || $command == "flash" ]];then
Packit Service 3880ab
                _devlink_dev_$command
Packit Service 3880ab
            fi
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
        eswitch|param)
Packit Service 3880ab
            _devlink_dev_$command
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
    esac
Packit Service 3880ab
}
Packit Service 3880ab
Packit Service 3880ab
# Completion for devlink port set
Packit Service 3880ab
_devlink_port_set()
Packit Service 3880ab
{
Packit Service 3880ab
    case "$cword" in
Packit Service 3880ab
        3)
Packit Service 3880ab
            _devlink_direct_complete "port"
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
        4)
Packit Service 3880ab
            COMPREPLY=( $( compgen -W "type" -- "$cur" ) )
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
        5)
Packit Service 3880ab
            COMPREPLY=( $( compgen -W "eth ib auto" -- "$cur" ) )
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
    esac
Packit Service 3880ab
}
Packit Service 3880ab
Packit Service 3880ab
# Completion for devlink port split
Packit Service 3880ab
_devlink_port_split()
Packit Service 3880ab
{
Packit Service 3880ab
    case "$cword" in
Packit Service 3880ab
        3)
Packit Service 3880ab
            _devlink_direct_complete "port"
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
        4)
Packit Service 3880ab
            COMPREPLY=( $( compgen -W "count" -- "$cur" ) )
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
        5)
Packit Service 3880ab
            # Integer argument
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
    esac
Packit Service 3880ab
}
Packit Service 3880ab
Packit Service 3880ab
# Completion for devlink port
Packit Service 3880ab
_devlink_port()
Packit Service 3880ab
{
Packit Service 3880ab
    case $command in
Packit Service 3880ab
        set)
Packit Service 3880ab
            _devlink_port_set
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
        split)
Packit Service 3880ab
            _devlink_port_split
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
        show|unsplit)
Packit Service 3880ab
            if [[ $cword -eq 3 ]]; then
Packit Service 3880ab
                _devlink_direct_complete "port"
Packit Service 3880ab
            fi
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
    esac
Packit Service 3880ab
}
Packit Service 3880ab
Packit Service 3880ab
# Completion for devlink dpipe
Packit Service 3880ab
_devlink_dpipe()
Packit Service 3880ab
{
Packit Service 3880ab
    local options="$(devlink dpipe help 2>&1 \
Packit Service 3880ab
                     | command sed -e '/OBJECT-LIST := /!d' \
Packit Service 3880ab
                     -e 's/.*{ //' -e 's/}.*//' -e 's/|//g' )"
Packit Service 3880ab
Packit Service 3880ab
    if [[ $cword -eq 2 ]]; then
Packit Service 3880ab
        COMPREPLY+=( $( compgen -W "$options" -- "$cur" ) )
Packit Service 3880ab
    fi
Packit Service 3880ab
}
Packit Service 3880ab
Packit Service 3880ab
# Completion for devlink monitor
Packit Service 3880ab
_devlink_monitor()
Packit Service 3880ab
{
Packit Service 3880ab
    local options="$(devlink monitor help 2>&1 \
Packit Service 3880ab
                     | command sed -e '/OBJECT-LIST := /!d' \
Packit Service 3880ab
                     -e 's/.*{ //' -e 's/}.*//' -e 's/|//g' )"
Packit Service 3880ab
Packit Service 3880ab
    if [[ $cword -eq 2 ]]; then
Packit Service 3880ab
        COMPREPLY+=( $( compgen -W "all $options" -- "$cur" ) )
Packit Service 3880ab
    fi
Packit Service 3880ab
}
Packit Service 3880ab
Packit Service 3880ab
# Completion for the rest of devlink sb $command
Packit Service 3880ab
_devlink_sb_command_options()
Packit Service 3880ab
{
Packit Service 3880ab
    local subcmd
Packit Service 3880ab
Packit Service 3880ab
    case $command in
Packit Service 3880ab
        pool)
Packit Service 3880ab
            subcmd=${words[3]}
Packit Service 3880ab
            if [[ $cword -eq 5 ]]; then
Packit Service 3880ab
                COMPREPLY=( $( compgen -W "pool" -- "$cur" ) )
Packit Service 3880ab
            fi
Packit Service 3880ab
            if [[ $subcmd == "set" ]]; then
Packit Service 3880ab
                case $cword in
Packit Service 3880ab
                    7)
Packit Service 3880ab
                        COMPREPLY+=( $( compgen -W "size" -- "$cur" ) )
Packit Service 3880ab
                        ;;
Packit Service 3880ab
                    9)
Packit Service 3880ab
                        COMPREPLY+=( $( compgen -W "thtype" -- "$cur" ) )
Packit Service 3880ab
                        ;;
Packit Service 3880ab
                esac
Packit Service 3880ab
            fi
Packit Service 3880ab
            ;;
Packit Service 3880ab
        port)
Packit Service 3880ab
            subcmd=${words[4]}
Packit Service 3880ab
            if [[ $cword -eq 6 ]]; then
Packit Service 3880ab
                COMPREPLY+=( $( compgen -W "pool" -- "$cur" ) )
Packit Service 3880ab
            fi
Packit Service 3880ab
            if [[ $subcmd == "set" ]]; then
Packit Service 3880ab
                case $cword in
Packit Service 3880ab
                    8)
Packit Service 3880ab
                        COMPREPLY+=( $( compgen -W "th" -- "$cur" ) )
Packit Service 3880ab
                        ;;
Packit Service 3880ab
                esac
Packit Service 3880ab
            fi
Packit Service 3880ab
            ;;
Packit Service 3880ab
        tc)
Packit Service 3880ab
            subcmd=${words[4]}
Packit Service 3880ab
            case $cword in
Packit Service 3880ab
                6)
Packit Service 3880ab
                    COMPREPLY+=( $( compgen -W "tc" -- "$cur" ) )
Packit Service 3880ab
                    ;;
Packit Service 3880ab
                8)
Packit Service 3880ab
                    COMPREPLY+=( $( compgen -W "type" -- "$cur" ) )
Packit Service 3880ab
                    ;;
Packit Service 3880ab
            esac
Packit Service 3880ab
            if [[ $subcmd == "set" ]]; then
Packit Service 3880ab
                case $cword in
Packit Service 3880ab
                    10)
Packit Service 3880ab
                        COMPREPLY+=( $( compgen -W "pool" -- "$cur" ) )
Packit Service 3880ab
                        ;;
Packit Service 3880ab
                    12)
Packit Service 3880ab
                        COMPREPLY+=( $( compgen -W "th" -- "$cur" ) )
Packit Service 3880ab
                        ;;
Packit Service 3880ab
                esac
Packit Service 3880ab
            fi
Packit Service 3880ab
            ;;
Packit Service 3880ab
    esac
Packit Service 3880ab
}
Packit Service 3880ab
Packit Service 3880ab
# Completion for devlink sb
Packit Service 3880ab
_devlink_sb()
Packit Service 3880ab
{
Packit Service 3880ab
    case $prev in
Packit Service 3880ab
        bind)
Packit Service 3880ab
            COMPREPLY=( $( compgen -W "set show" -- "$cur" ) )
Packit Service 3880ab
            ;;
Packit Service 3880ab
        occupancy)
Packit Service 3880ab
            COMPREPLY=( $( compgen -W "show snapshot clearmax" -- "$cur" ) )
Packit Service 3880ab
            ;;
Packit Service 3880ab
        pool)
Packit Service 3880ab
            if [[ $cword -eq 3 || $cword -eq 4 ]]; then
Packit Service 3880ab
                COMPREPLY=( $( compgen -W "set show" -- "$cur" ) )
Packit Service 3880ab
            elif [[ $command == "port" || $command == "tc" ]]; then
Packit Service 3880ab
                _devlink_direct_complete "port_pool"
Packit Service 3880ab
            else
Packit Service 3880ab
                _devlink_direct_complete "pool"
Packit Service 3880ab
            fi
Packit Service 3880ab
            ;;
Packit Service 3880ab
        port)
Packit Service 3880ab
            if [[ $cword -eq 3 ]]; then
Packit Service 3880ab
                COMPREPLY=( $( compgen -W "pool" -- "$cur" ) )
Packit Service 3880ab
            fi
Packit Service 3880ab
            ;;
Packit Service 3880ab
        show|set|snapshot|clearmax)
Packit Service 3880ab
            case $command in
Packit Service 3880ab
                show|pool|occupancy)
Packit Service 3880ab
                    _devlink_direct_complete "dev"
Packit Service 3880ab
                    if [[ $command == "occupancy" && $prev == "show" ]];then
Packit Service 3880ab
                        _devlink_direct_complete "port"
Packit Service 3880ab
                    fi
Packit Service 3880ab
                    ;;
Packit Service 3880ab
                port|tc)
Packit Service 3880ab
                    _devlink_direct_complete "port"
Packit Service 3880ab
                    ;;
Packit Service 3880ab
            esac
Packit Service 3880ab
            ;;
Packit Service 3880ab
        size)
Packit Service 3880ab
            # Integer argument
Packit Service 3880ab
            ;;
Packit Service 3880ab
        thtype)
Packit Service 3880ab
            COMPREPLY=( $( compgen -W "static dynamic" -- "$cur" ) )
Packit Service 3880ab
            ;;
Packit Service 3880ab
        th)
Packit Service 3880ab
            # Integer argument
Packit Service 3880ab
            ;;
Packit Service 3880ab
        tc)
Packit Service 3880ab
            if [[ $cword -eq 3 ]]; then
Packit Service 3880ab
                COMPREPLY=( $( compgen -W "bind" -- "$cur" ) )
Packit Service 3880ab
            else
Packit Service 3880ab
                _devlink_direct_complete "tc"
Packit Service 3880ab
            fi
Packit Service 3880ab
            ;;
Packit Service 3880ab
        type)
Packit Service 3880ab
            COMPREPLY=( $( compgen -W "ingress egress" -- "$cur" ) )
Packit Service 3880ab
            ;;
Packit Service 3880ab
    esac
Packit Service 3880ab
Packit Service 3880ab
    _devlink_sb_command_options
Packit Service 3880ab
    return
Packit Service 3880ab
}
Packit Service 3880ab
Packit Service 3880ab
# Completion for devlink resource set path argument
Packit Service 3880ab
_devlink_resource_path()
Packit Service 3880ab
{
Packit Service 3880ab
    local path parents parent all_path
Packit Service 3880ab
    local dev=${words[3]}
Packit Service 3880ab
    local -a path
Packit Service 3880ab
Packit Service 3880ab
    local all_path=$(
Packit Service 3880ab
        devlink resource show $dev \
Packit Service 3880ab
            | sed -E '# Of resource lines, keep only the name itself.
Packit Service 3880ab
                    s/name ([^ ]*) .*/\1/
Packit Service 3880ab
                    # Drop headers.
Packit Service 3880ab
                    /:$/d
Packit Service 3880ab
                    # First layer is not aligned enough, align it.
Packit Service 3880ab
                    s/^/  /
Packit Service 3880ab
                    # Use slashes as unary code for resource depth.
Packit Service 3880ab
                    s,    ,/,g
Packit Service 3880ab
                    # Separate tally count from resource name.
Packit Service 3880ab
                    s,/*,&\t,' \
Packit Service 3880ab
            | while read d name; do
Packit Service 3880ab
                    while ((${#path[@]} > ${#d})); do
Packit Service 3880ab
                        unset path[$((${#path[@]} - 1))]
Packit Service 3880ab
                    done
Packit Service 3880ab
                    path[$((${#d} - 1))]=$name
Packit Service 3880ab
                    echo ${path[@]}
Packit Service 3880ab
              done \
Packit Service 3880ab
            | sed '# Convert paths to slash-separated
Packit Service 3880ab
                    s,^,/,;s, ,/,g;s,$,/,'
Packit Service 3880ab
    )
Packit Service 3880ab
    COMPREPLY=( ${COMPREPLY[@]:-} $( compgen -W "$all_path" -- "$cur" ) )
Packit Service 3880ab
}
Packit Service 3880ab
Packit Service 3880ab
# Completion for devlink resource set
Packit Service 3880ab
_devlink_resource_set()
Packit Service 3880ab
{
Packit Service 3880ab
    case "$cword" in
Packit Service 3880ab
        3)
Packit Service 3880ab
            _devlink_direct_complete "dev"
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
        4)
Packit Service 3880ab
            COMPREPLY=( $( compgen -W "path" -- "$cur" ) )
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
        5)
Packit Service 3880ab
            _devlink_resource_path
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
        6)
Packit Service 3880ab
            COMPREPLY=( $( compgen -W "size" -- "$cur" ) )
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
        7)
Packit Service 3880ab
            # Integer argument
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
    esac
Packit Service 3880ab
}
Packit Service 3880ab
Packit Service 3880ab
# Completion for devlink resource
Packit Service 3880ab
_devlink_resource()
Packit Service 3880ab
{
Packit Service 3880ab
    case $command in
Packit Service 3880ab
        show)
Packit Service 3880ab
            if [[ $cword -eq 3 ]]; then
Packit Service 3880ab
                _devlink_direct_complete "dev"
Packit Service 3880ab
            fi
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
        set)
Packit Service 3880ab
            _devlink_resource_set
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
    esac
Packit Service 3880ab
}
Packit Service 3880ab
Packit Service 3880ab
# Completion for devlink region read
Packit Service 3880ab
_devlink_region_read()
Packit Service 3880ab
{
Packit Service 3880ab
    case "$cword" in
Packit Service 3880ab
        6)
Packit Service 3880ab
            COMPREPLY=( $( compgen -W "address" -- "$cur" ) )
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
        7)
Packit Service 3880ab
            # Address argument, for example: 0x10
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
        8)
Packit Service 3880ab
            COMPREPLY=( $( compgen -W "length" -- "$cur" ) )
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
        9)
Packit Service 3880ab
            # Integer argument
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
    esac
Packit Service 3880ab
}
Packit Service 3880ab
Packit Service 3880ab
# Completion for devlink region
Packit Service 3880ab
_devlink_region()
Packit Service 3880ab
{
Packit Service 3880ab
    if [[ $cword -eq 3 && $command != "help" ]]; then
Packit Service 3880ab
            _devlink_direct_complete "region"
Packit Service 3880ab
    fi
Packit Service 3880ab
Packit Service 3880ab
    case $command in
Packit Service 3880ab
        show)
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
        del|dump|read)
Packit Service 3880ab
            case "$cword" in
Packit Service 3880ab
                4)
Packit Service 3880ab
                    COMPREPLY=( $( compgen -W "snapshot" -- "$cur" ) )
Packit Service 3880ab
                    ;;
Packit Service 3880ab
                5)
Packit Service 3880ab
                    _devlink_direct_complete "snapshot"
Packit Service 3880ab
                    ;;
Packit Service 3880ab
            esac
Packit Service 3880ab
Packit Service 3880ab
            if [[ $command == "read" ]]; then
Packit Service 3880ab
                _devlink_region_read
Packit Service 3880ab
            fi
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
    esac
Packit Service 3880ab
}
Packit Service 3880ab
Packit Service 3880ab
# Completion reporter for devlink health
Packit Service 3880ab
_devlink_health_reporter()
Packit Service 3880ab
{
Packit Service 3880ab
    local i=$1; shift
Packit Service 3880ab
Packit Service 3880ab
    case $cword in
Packit Service 3880ab
        $((3 + $i)))
Packit Service 3880ab
            _devlink_direct_complete "health_dev"
Packit Service 3880ab
            ;;
Packit Service 3880ab
        $((4 + $i)))
Packit Service 3880ab
            COMPREPLY=( $( compgen -W "reporter" -- "$cur" ) )
Packit Service 3880ab
            ;;
Packit Service 3880ab
        $((5 + $i)))
Packit Service 3880ab
            _devlink_direct_complete "reporter"
Packit Service 3880ab
            ;;
Packit Service 3880ab
    esac
Packit Service 3880ab
}
Packit Service 3880ab
Packit Service 3880ab
# Completion for devlink health
Packit Service 3880ab
_devlink_health()
Packit Service 3880ab
{
Packit Service 3880ab
    case $command in
Packit Service 3880ab
        show|recover|diagnose|set)
Packit Service 3880ab
            _devlink_health_reporter 0
Packit Service 3880ab
            if [[ $command == "set" ]]; then
Packit Service 3880ab
                case $cword in
Packit Service 3880ab
                    6)
Packit Service 3880ab
                        COMPREPLY=( $( compgen -W "grace_period auto_recover" \
Packit Service 3880ab
                                   -- "$cur" ) )
Packit Service 3880ab
                        ;;
Packit Service 3880ab
                    7)
Packit Service 3880ab
                        case $prev in
Packit Service 3880ab
                            grace_period)
Packit Service 3880ab
                                # Integer argument- msec
Packit Service 3880ab
                                ;;
Packit Service 3880ab
                            auto_recover)
Packit Service 3880ab
                                COMPREPLY=( $( compgen -W "true false" -- \
Packit Service 3880ab
                                    "$cur" ) )
Packit Service 3880ab
                                ;;
Packit Service 3880ab
                        esac
Packit Service 3880ab
                esac
Packit Service 3880ab
            fi
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
        dump)
Packit Service 3880ab
            if [[ $cword -eq 3 ]]; then
Packit Service 3880ab
                COMPREPLY=( $( compgen -W "show clear" -- "$cur" ) )
Packit Service 3880ab
            fi
Packit Service 3880ab
Packit Service 3880ab
            _devlink_health_reporter 1
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
    esac
Packit Service 3880ab
}
Packit Service 3880ab
Packit Service 3880ab
# Completion for action in devlink trap set
Packit Service 3880ab
_devlink_trap_set_action()
Packit Service 3880ab
{
Packit Service 3880ab
    local i=$1; shift
Packit Service 3880ab
Packit Service 3880ab
    case $cword in
Packit Service 3880ab
        $((6 + $i)))
Packit Service 3880ab
            COMPREPLY=( $( compgen -W "action" -- "$cur" ) )
Packit Service 3880ab
            ;;
Packit Service 3880ab
        $((7 + $i)))
Packit Service 3880ab
            COMPREPLY=( $( compgen -W "trap drop mirror" -- "$cur" ) )
Packit Service 3880ab
            ;;
Packit Service 3880ab
    esac
Packit Service 3880ab
}
Packit Service 3880ab
Packit Service 3880ab
# Completion for devlink trap group set
Packit Service 3880ab
_devlink_trap_group_set()
Packit Service 3880ab
{
Packit Service 3880ab
    local -A settings=(
Packit Service 3880ab
        [action]=notseen
Packit Service 3880ab
        [policer]=notseen
Packit Service 3880ab
        [nopolicer]=notseen
Packit Service 3880ab
    )
Packit Service 3880ab
Packit Service 3880ab
    if [[ $cword -eq 7 ]]; then
Packit Service 3880ab
        COMPREPLY=( $( compgen -W "action policer nopolicer" -- "$cur" ) )
Packit Service 3880ab
    fi
Packit Service 3880ab
Packit Service 3880ab
    # Mark seen settings
Packit Service 3880ab
    local word
Packit Service 3880ab
    for word in "${words[@]:7:${#words[@]}-1}"; do
Packit Service 3880ab
        if [[ -n $word ]]; then
Packit Service 3880ab
            if [[ "${settings[$word]}" ]]; then
Packit Service 3880ab
                settings[$word]=seen
Packit Service 3880ab
            fi
Packit Service 3880ab
        fi
Packit Service 3880ab
    done
Packit Service 3880ab
Packit Service 3880ab
    case $prev in
Packit Service 3880ab
        action)
Packit Service 3880ab
            COMPREPLY=( $( compgen -W "trap drop mirror" -- "$cur" ) )
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
        policer)
Packit Service 3880ab
            _devlink_direct_complete "trap_policer"
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
    esac
Packit Service 3880ab
Packit Service 3880ab
    local -a comp_words=()
Packit Service 3880ab
Packit Service 3880ab
    # Add settings not seen to completions
Packit Service 3880ab
    local setting
Packit Service 3880ab
    for setting in "${!settings[@]}"; do
Packit Service 3880ab
        if [ "${settings[$setting]}" = notseen ]; then
Packit Service 3880ab
            comp_words+=( "$setting" )
Packit Service 3880ab
        fi
Packit Service 3880ab
    done
Packit Service 3880ab
Packit Service 3880ab
    COMPREPLY=( $( compgen -W "${comp_words[*]}" -- "$cur" ) )
Packit Service 3880ab
}
Packit Service 3880ab
Packit Service 3880ab
# Completion for devlink trap group
Packit Service 3880ab
_devlink_trap_group()
Packit Service 3880ab
{
Packit Service 3880ab
    case $cword in
Packit Service 3880ab
        3)
Packit Service 3880ab
            COMPREPLY=( $( compgen -W "set show" -- "$cur" ) )
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
        4)
Packit Service 3880ab
            _devlink_direct_complete "dev"
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
        5)
Packit Service 3880ab
            COMPREPLY=( $( compgen -W "group" -- "$cur" ) )
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
        6)
Packit Service 3880ab
            _devlink_direct_complete "trap_group"
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
    esac
Packit Service 3880ab
Packit Service 3880ab
    if [[ ${words[3]} == "set" ]]; then
Packit Service 3880ab
        _devlink_trap_group_set
Packit Service 3880ab
    fi
Packit Service 3880ab
}
Packit Service 3880ab
Packit Service 3880ab
# Completion for devlink trap policer set
Packit Service 3880ab
_devlink_trap_policer_set()
Packit Service 3880ab
{
Packit Service 3880ab
    local -A settings=(
Packit Service 3880ab
        [rate]=notseen
Packit Service 3880ab
        [burst]=notseen
Packit Service 3880ab
    )
Packit Service 3880ab
Packit Service 3880ab
    if [[ $cword -eq 7 ]]; then
Packit Service 3880ab
        COMPREPLY=( $( compgen -W "rate burst" -- "$cur" ) )
Packit Service 3880ab
    fi
Packit Service 3880ab
Packit Service 3880ab
    # Mark seen settings
Packit Service 3880ab
    local word
Packit Service 3880ab
    for word in "${words[@]:7:${#words[@]}-1}"; do
Packit Service 3880ab
        if [[ -n $word ]]; then
Packit Service 3880ab
            if [[ "${settings[$word]}" ]]; then
Packit Service 3880ab
                settings[$word]=seen
Packit Service 3880ab
            fi
Packit Service 3880ab
        fi
Packit Service 3880ab
    done
Packit Service 3880ab
Packit Service 3880ab
    case $prev in
Packit Service 3880ab
        rate)
Packit Service 3880ab
            # Integer argument
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
        burst)
Packit Service 3880ab
            # Integer argument
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
    esac
Packit Service 3880ab
Packit Service 3880ab
    local -a comp_words=()
Packit Service 3880ab
Packit Service 3880ab
    # Add settings not seen to completions
Packit Service 3880ab
    local setting
Packit Service 3880ab
    for setting in "${!settings[@]}"; do
Packit Service 3880ab
        if [ "${settings[$setting]}" = notseen ]; then
Packit Service 3880ab
            comp_words+=( "$setting" )
Packit Service 3880ab
        fi
Packit Service 3880ab
    done
Packit Service 3880ab
Packit Service 3880ab
    COMPREPLY=( $( compgen -W "${comp_words[*]}" -- "$cur" ) )
Packit Service 3880ab
}
Packit Service 3880ab
Packit Service 3880ab
# Completion for devlink trap policer
Packit Service 3880ab
_devlink_trap_policer()
Packit Service 3880ab
{
Packit Service 3880ab
    case $cword in
Packit Service 3880ab
        3)
Packit Service 3880ab
            COMPREPLY=( $( compgen -W "set show" -- "$cur" ) )
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
        4)
Packit Service 3880ab
            _devlink_direct_complete "dev"
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
        5)
Packit Service 3880ab
            COMPREPLY=( $( compgen -W "policer" -- "$cur" ) )
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
        6)
Packit Service 3880ab
            _devlink_direct_complete "trap_policer"
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
    esac
Packit Service 3880ab
Packit Service 3880ab
    if [[ ${words[3]} == "set" ]]; then
Packit Service 3880ab
        _devlink_trap_policer_set
Packit Service 3880ab
    fi
Packit Service 3880ab
}
Packit Service 3880ab
Packit Service 3880ab
# Completion for devlink trap
Packit Service 3880ab
_devlink_trap()
Packit Service 3880ab
{
Packit Service 3880ab
    case $command in
Packit Service 3880ab
        show|set)
Packit Service 3880ab
            case $cword in
Packit Service 3880ab
                3)
Packit Service 3880ab
                    _devlink_direct_complete "dev"
Packit Service 3880ab
                    ;;
Packit Service 3880ab
                4)
Packit Service 3880ab
                    COMPREPLY=( $( compgen -W "trap" -- "$cur" ) )
Packit Service 3880ab
                    ;;
Packit Service 3880ab
                5)
Packit Service 3880ab
                    _devlink_direct_complete "trap"
Packit Service 3880ab
                    ;;
Packit Service 3880ab
            esac
Packit Service 3880ab
Packit Service 3880ab
            if [[ $command == "set" ]]; then
Packit Service 3880ab
                _devlink_trap_set_action 0
Packit Service 3880ab
            fi
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
        group)
Packit Service 3880ab
            _devlink_trap_$command
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
        policer)
Packit Service 3880ab
            _devlink_trap_$command
Packit Service 3880ab
            return
Packit Service 3880ab
            ;;
Packit Service 3880ab
    esac
Packit Service 3880ab
}
Packit Service 3880ab
Packit Service 3880ab
# Complete any devlink command
Packit Service 3880ab
_devlink()
Packit Service 3880ab
{
Packit Service 3880ab
    local cur prev words cword
Packit Service 3880ab
    local opt='--Version --no-nice-names --json --pretty --verbose \
Packit Service 3880ab
        --statistics --force --Netns --batch'
Packit Service 3880ab
    local objects="$(devlink help 2>&1 | command sed -e '/OBJECT := /!d' \
Packit Service 3880ab
		     -e 's/.*{//' -e 's/}.*//' -e \ 's/|//g' )"
Packit Service 3880ab
Packit Service 3880ab
    _init_completion || return
Packit Service 3880ab
    # Gets the word-to-complete without considering the colon as word breaks
Packit Service 3880ab
    _get_comp_words_by_ref -n : cur prev words cword
Packit Service 3880ab
Packit Service 3880ab
    if [[ $cword -eq 1 ]]; then
Packit Service 3880ab
	    case $cur in
Packit Service 3880ab
	        -*)
Packit Service 3880ab
		        COMPREPLY=( $( compgen -W "$opt" -- "$cur" ) )
Packit Service 3880ab
		        return 0
Packit Service 3880ab
		        ;;
Packit Service 3880ab
	        *)
Packit Service 3880ab
		        COMPREPLY=( $( compgen -W "$objects" -- "$cur" ) )
Packit Service 3880ab
		        return 0
Packit Service 3880ab
		        ;;
Packit Service 3880ab
	    esac
Packit Service 3880ab
    fi
Packit Service 3880ab
Packit Service 3880ab
    # Deal with options
Packit Service 3880ab
    if [[ $prev == -* ]]; then
Packit Service 3880ab
	    case $prev in
Packit Service 3880ab
	        -V|--Version)
Packit Service 3880ab
		        return 0
Packit Service 3880ab
		        ;;
Packit Service 3880ab
	        -b|--batch)
Packit Service 3880ab
		        _filedir
Packit Service 3880ab
		        return 0
Packit Service 3880ab
		        ;;
Packit Service 3880ab
	        --force)
Packit Service 3880ab
                COMPREPLY=( $( compgen -W "--batch" -- "$cur" ) )
Packit Service 3880ab
		        return 0
Packit Service 3880ab
		        ;;
Packit Service 3880ab
	        -N|--Netns)
Packit Service 3880ab
		        local nslist=$( ip netns list 2>/dev/null )
Packit Service 3880ab
		        COMPREPLY=( $( compgen -W "$nslist" -- "$cur" ) )
Packit Service 3880ab
		        return 0
Packit Service 3880ab
		        ;;
Packit Service 3880ab
	        -j|--json)
Packit Service 3880ab
		        COMPREPLY=( $( compgen -W "--pretty $objects" -- "$cur" ) )
Packit Service 3880ab
		        return 0
Packit Service 3880ab
		        ;;
Packit Service 3880ab
            *)
Packit Service 3880ab
                COMPREPLY=( $( compgen -W "$objects" -- "$cur" ) )
Packit Service 3880ab
		        return 0
Packit Service 3880ab
		        ;;
Packit Service 3880ab
	    esac
Packit Service 3880ab
    fi
Packit Service 3880ab
Packit Service 3880ab
    # Remove all options so completions don't have to deal with them.
Packit Service 3880ab
    local i
Packit Service 3880ab
    for (( i=1; i < ${#words[@]}; )); do
Packit Service 3880ab
        if [[ ${words[i]::1} == - ]]; then
Packit Service 3880ab
            words=( "${words[@]:0:i}" "${words[@]:i+1}" )
Packit Service 3880ab
            [[ $i -le $cword ]] && cword=$(( cword - 1 ))
Packit Service 3880ab
        else
Packit Service 3880ab
            i=$(( ++i ))
Packit Service 3880ab
        fi
Packit Service 3880ab
    done
Packit Service 3880ab
Packit Service 3880ab
    local object=${words[1]}
Packit Service 3880ab
    local command=${words[2]}
Packit Service 3880ab
    local pprev=${words[cword - 2]}
Packit Service 3880ab
Packit Service 3880ab
    if [[ $objects =~ $object ]]; then
Packit Service 3880ab
        if [[ $cword -eq 2 ]]; then
Packit Service 3880ab
            COMPREPLY=( $( compgen -W "help" -- "$cur") )
Packit Service 3880ab
            if [[ $object != "monitor" && $object != "dpipe" ]]; then
Packit Service 3880ab
                COMPREPLY+=( $( compgen -W \
Packit Service 3880ab
                    "$(_devlink_get_optional_commands $object)" -- "$cur" ) )
Packit Service 3880ab
            fi
Packit Service 3880ab
        fi
Packit Service 3880ab
        "_devlink_$object"
Packit Service 3880ab
    fi
Packit Service 3880ab
Packit Service 3880ab
} &&
Packit Service 3880ab
complete -F _devlink devlink
Packit Service 3880ab
Packit Service 3880ab
# ex: ts=4 sw=4 et filetype=sh