From: Ido Schimmel Date: Tue, 31 Mar 2020 08:42:53 +0000 (+0300) Subject: bash-completion: devlink: Extend bash-completion for new commands X-Git-Tag: v5.7.0~48 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0141ca64b83c4c5e1b739ef73d159d77bef93405;p=thirdparty%2Fiproute2.git 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 Signed-off-by: David Ahern --- 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 }