|
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
|