aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIdo Schimmel <idosch@mellanox.com>2020-03-31 11:42:53 +0300
committerDavid Ahern <dsahern@gmail.com>2020-03-31 23:25:13 +0000
commit0141ca64b83c4c5e1b739ef73d159d77bef93405 (patch)
tree44de9fbbd851ebf16c7cbd6eb7e23e4e1d07913c
parent02a2a6683ff2df271c0f58e57a7fe6ff979c6de5 (diff)
downloadiproute2-0141ca64b83c4c5e1b739ef73d159d77bef93405.tar.gz
bash-completion: devlink: Extend bash-completion for new commands
Extend bash-completion for two new commands: devlink trap policer set DEV policer POLICER [ rate RATE ] [ burst BURST ] devlink trap policer show DEV policer POLICER And for "policer" / "nopolicer" parameters in existing command: devlink trap group set DEV group GROUP [ action { trap | drop } ] [ policer POLICER ] [ nopolicer ] Signed-off-by: Ido Schimmel <idosch@mellanox.com> Signed-off-by: David Ahern <dsahern@gmail.com>
-rw-r--r--bash-completion/devlink131
1 files changed, 130 insertions, 1 deletions
diff --git a/bash-completion/devlink b/bash-completion/devlink
index 45fba75c1..45ca1fe62 100644
--- a/bash-completion/devlink
+++ b/bash-completion/devlink
@@ -62,6 +62,11 @@ _devlink_direct_complete()
value=$(devlink -j trap group show 2>/dev/null \
| jq ".trap_group[\"$dev\"][].name")
;;
+ trap_policer)
+ dev=${words[4]}
+ value=$(devlink -j trap policer show 2>/dev/null \
+ | jq ".trap_policer[\"$dev\"][].policer")
+ ;;
health_dev)
value=$(devlink -j health show 2>/dev/null | jq '.health' \
| jq 'keys[]')
@@ -678,6 +683,53 @@ _devlink_trap_set_action()
esac
}
+# Completion for devlink trap group set
+_devlink_trap_group_set()
+{
+ local -A settings=(
+ [action]=notseen
+ [policer]=notseen
+ [nopolicer]=notseen
+ )
+
+ if [[ $cword -eq 7 ]]; then
+ COMPREPLY=( $( compgen -W "action policer nopolicer" -- "$cur" ) )
+ fi
+
+ # Mark seen settings
+ local word
+ for word in "${words[@]:7:${#words[@]}-1}"; do
+ if [[ -n $word ]]; then
+ if [[ "${settings[$word]}" ]]; then
+ settings[$word]=seen
+ fi
+ fi
+ done
+
+ case $prev in
+ action)
+ COMPREPLY=( $( compgen -W "trap drop" -- "$cur" ) )
+ return
+ ;;
+ policer)
+ _devlink_direct_complete "trap_policer"
+ return
+ ;;
+ esac
+
+ local -a comp_words=()
+
+ # Add settings not seen to completions
+ local setting
+ for setting in "${!settings[@]}"; do
+ if [ "${settings[$setting]}" = notseen ]; then
+ comp_words+=( "$setting" )
+ fi
+ done
+
+ COMPREPLY=( $( compgen -W "${comp_words[*]}" -- "$cur" ) )
+}
+
# Completion for devlink trap group
_devlink_trap_group()
{
@@ -701,7 +753,80 @@ _devlink_trap_group()
esac
if [[ ${words[3]} == "set" ]]; then
- _devlink_trap_set_action 1
+ _devlink_trap_group_set
+ fi
+}
+
+# Completion for devlink trap policer set
+_devlink_trap_policer_set()
+{
+ local -A settings=(
+ [rate]=notseen
+ [burst]=notseen
+ )
+
+ if [[ $cword -eq 7 ]]; then
+ COMPREPLY=( $( compgen -W "rate burst" -- "$cur" ) )
+ fi
+
+ # Mark seen settings
+ local word
+ for word in "${words[@]:7:${#words[@]}-1}"; do
+ if [[ -n $word ]]; then
+ if [[ "${settings[$word]}" ]]; then
+ settings[$word]=seen
+ fi
+ fi
+ done
+
+ case $prev in
+ rate)
+ # Integer argument
+ return
+ ;;
+ burst)
+ # Integer argument
+ return
+ ;;
+ esac
+
+ local -a comp_words=()
+
+ # Add settings not seen to completions
+ local setting
+ for setting in "${!settings[@]}"; do
+ if [ "${settings[$setting]}" = notseen ]; then
+ comp_words+=( "$setting" )
+ fi
+ done
+
+ COMPREPLY=( $( compgen -W "${comp_words[*]}" -- "$cur" ) )
+}
+
+# Completion for devlink trap policer
+_devlink_trap_policer()
+{
+ case $cword in
+ 3)
+ COMPREPLY=( $( compgen -W "set show" -- "$cur" ) )
+ return
+ ;;
+ 4)
+ _devlink_direct_complete "dev"
+ return
+ ;;
+ 5)
+ COMPREPLY=( $( compgen -W "policer" -- "$cur" ) )
+ return
+ ;;
+ 6)
+ _devlink_direct_complete "trap_policer"
+ return
+ ;;
+ esac
+
+ if [[ ${words[3]} == "set" ]]; then
+ _devlink_trap_policer_set
fi
}
@@ -731,6 +856,10 @@ _devlink_trap()
_devlink_trap_$command
return
;;
+ policer)
+ _devlink_trap_$command
+ return
+ ;;
esac
}