diff options
-rw-r--r-- | tools/completion/gobgp-completion.bash | 178 |
1 files changed, 68 insertions, 110 deletions
diff --git a/tools/completion/gobgp-completion.bash b/tools/completion/gobgp-completion.bash index b9e0c483..acf47858 100644 --- a/tools/completion/gobgp-completion.bash +++ b/tools/completion/gobgp-completion.bash @@ -8,129 +8,88 @@ __search_target() { local word target c=1 while [ $c -lt $cword ]; do - word="${words[c]}" - for target in $1; do - if [ "$target" = "$word" ]; then - echo "$target" - return - fi - done - ((c++)) + word="${words[c]}" + for target in $1; do + if [ "$target" = "$word" ]; then + echo "$target" + return + fi + done + ((c++)) done -} +} __gobgp_table_list() { - local table_list=("local adj-in adj-out") - local table="$(__search_target "${table_list}")" - if [ -z "$table" ]; then - case "$cur" in - *) - COMPREPLY=( $( compgen -W "${table_list}" -- "$cur") ) - ;; - esac - return + local targets=("local adj-in adj-out reset softreset softresetin softresetout shutdown enable disable") + local target="$(__search_target "$targets")" + if [ -z "$target" ]; then + case "$cur" in + *) + COMPREPLY=( $( compgen -W "${targets[*]}" -- "$cur") ) + ;; + esac + return fi - COMPREPLY=( $( compgen -W "ipv4 ipv6 evpn" -- "$cur") ) return } __gobgp_neighbr_list() { - local neighbor_list=( $(__gobgp_q --quiet show neighbors) ) + local url="" + local port="" + if [ ! -z "$gobgp_ip" ]; then + url="-u $gobgp_ip" + fi + if [ ! -z "$gobgp_port" ]; then + port="-p $gobgp_port" + fi + local neighbor_list=( $(__gobgp_q $url $port --quiet neighbor) ) local target="$(__search_target "${neighbor_list[*]}")" if [ -z "$target" ]; then - case "$cur" in - *) - COMPREPLY=( $( compgen -W "${neighbor_list[*]}" -- "$cur") ) - ;; - esac - __ltrim_colon_completions "$cur" - return 0 + case "$cur" in + *) + COMPREPLY=( $( compgen -W "${neighbor_list[*]}" -- "$cur") ) + ;; + esac + __ltrim_colon_completions "$cur" + return 0 fi return 1 } -_gobgp_show_neighbor() { - __gobgp_neighbr_list - if [ $? -ne 0 ] ; then - __gobgp_table_list - fi -} - -_gobgp_show_neighbors() { - case "$cur" in - *) - ;; - esac - return -} - -_gobgp_show_global() { - local targets="ipv4 ipv6 evpn" - local target="$(__search_target "$targets")" - if [ -z "$target" ]; then - case "$cur" in - *) - COMPREPLY=( $( compgen -W "${targets[*]}" -- "$cur" ) ) - ;; - esac - return - fi -} -_gobgp_show() { - local targets="neighbor neighbors global" +_gobgp_global_rib(){ + local targets="add del" local target="$(__search_target "$targets")" if [ -z "$target" ]; then - case "$cur" in - *) - COMPREPLY=( $( compgen -W "${targets[*]}" -- "$cur" ) ) - ;; - esac - return + case "$cur" in + *) + COMPREPLY=( $( compgen -W "${targets[*]}" -- "$cur" ) ) + ;; + esac + return fi - _gobgp_show_${target} } -__gobgp_generic_reset() { - local targets="neighbor" +_gobgp_global() { + local targets="rib" local target="$(__search_target "$targets")" if [ -z "$target" ]; then - case "$cur" in - *) - COMPREPLY=( $( compgen -W "${targets[*]}" -- "$cur" ) ) - ;; - esac - return + case "$cur" in + *) + COMPREPLY=( $( compgen -W "${targets[*]}" -- "$cur" ) ) + ;; + esac + return fi - __gobgp_neighbr_list -} - -_gobgp_reset() { - __gobgp_generic_reset + _gobgp_global_${target} } -_gobgp_softreset() { - __gobgp_generic_reset -} - -_gobgp_softresetin() { - __gobgp_generic_reset -} - -_gobgp_softresetout() { - __gobgp_generic_reset -} - -_gobgp_shutdown() { - __gobgp_generic_reset -} - -_gobgp_enable() { - __gobgp_generic_reset -} +_gobgp_neighbor() { + __gobgp_neighbr_list + if [ $? -ne 0 ] ; then + __gobgp_table_list + fi -_gobgp_disable() { - __gobgp_generic_reset } _gobgp_gobgp() { @@ -147,21 +106,15 @@ _gobgp_gobgp() { COMPREPLY=( $( compgen -W "-h" -- "$cur" ) ) ;; *) - COMPREPLY=( $( compgen -W "${commands[*]} help" -- "$cur" ) ) + COMPREPLY=( $( compgen -W "${commands[*]} " -- "$cur" ) ) ;; esac } _gobgp() { local commands=( - show - reset - softreset - softresetin - softresetout - shutdown - enable - disable + global + neighbor ) COMPREPLY=() @@ -172,9 +125,14 @@ _gobgp() { local counter=1 while [ $counter -lt $cword ]; do case "${words[$counter]}" in - -h) - (( counter++ )) - ;; + -u) + (( counter++ )) + gobgp_ip="${words[$counter]}" + ;; + -p) + (( counter++ )) + gobgp_port="${words[$counter]}" + ;; -*) ;; *) @@ -192,4 +150,4 @@ _gobgp() { return 0 } -complete -F _gobgp gobgp +complete -F _gobgp gobgp
\ No newline at end of file |