summaryrefslogtreecommitdiffstats
path: root/completions/tipc
diff options
context:
space:
mode:
Diffstat (limited to 'completions/tipc')
-rw-r--r--completions/tipc289
1 files changed, 289 insertions, 0 deletions
diff --git a/completions/tipc b/completions/tipc
new file mode 100644
index 0000000..44ade36
--- /dev/null
+++ b/completions/tipc
@@ -0,0 +1,289 @@
+# tipc(8) completion -*- shell-script -*-
+
+_tipc_media()
+{
+ local optind=$1
+
+ if ((cword == optind)); then
+ COMPREPLY=($(compgen -W 'media' -- $cur))
+ return 0
+ elif ((cword == optind + 1)); then
+ COMPREPLY=($(compgen -W 'udp eth ib' -- $cur))
+ return 0
+ fi
+
+ return 1
+}
+
+_tipc_bearer()
+{
+ local optind=$1
+ local media i
+
+ if _tipc_media $optind; then
+ return
+ fi
+
+ for ((i = 0; i < cword; i++)); do
+ if [[ ${words[i]} == 'media' ]]; then
+ media=${words[i + 1]}
+ fi
+ done
+
+ if ((cword == optind + 2)); then
+ case "$media" in
+ "udp")
+ COMPREPLY=($(compgen -W 'name' -- $cur))
+ ;;
+ "eth" | "ib")
+ COMPREPLY=($(compgen -W 'device' -- $cur))
+ ;;
+ esac
+ elif ((cword == optind + 3)); then
+ case "$media" in
+ "udp")
+ local names=$(tipc bearer list 2>/dev/null | awk -F: '/^udp:/ {print $2}')
+ COMPREPLY=($(compgen -W '$names' -- $cur))
+ ;;
+ "eth")
+ local interfaces=$(command ls /sys/class/net/)
+ COMPREPLY=($(compgen -W '$interfaces' -- $cur))
+ ;;
+ esac
+ fi
+}
+
+_tipc_link_opts()
+{
+ COMPREPLY=($(compgen -W 'priority tolerance window' -- $cur))
+}
+
+_tipc_link()
+{
+ local optind=$1
+ local filter=$2
+
+ if ((cword == optind)); then
+ COMPREPLY=($(compgen -W 'link' -- $cur))
+ elif ((cword == optind + 1)); then
+ # awk drops link state and last trailing :
+ local links=$(tipc link list 2>/dev/null |
+ awk '{print substr($1, 0, length($1))}')
+ local -a exclude
+ [[ $filter == peers ]] && exclude=(-X broadcast-link)
+ COMPREPLY=($(compgen "${exclude[@]}" -W '$links' -- $cur))
+ fi
+}
+
+_tipc()
+{
+ local cur prev words cword optind i p
+ _init_completion || return
+
+ optind=1
+ COMPREPLY=()
+
+ # Flags can be placed anywhere in the commandline
+ case "$cur" in
+ -*)
+ COMPREPLY=($(compgen -W '-h --help' -- $cur))
+ return
+ ;;
+ esac
+
+ if ((cword == 1)); then
+ COMPREPLY=($(compgen -W 'bearer link media nametable node socket' -- $cur))
+ return
+ fi
+
+ case "${words[optind]}" in
+ bearer)
+ ((optind++))
+
+ if ((cword == optind)); then
+ COMPREPLY=($(compgen -W 'enable disable set get list' -- $cur))
+ return
+ fi
+
+ case "${words[optind]}" in
+ enable)
+ local media params
+ ((optind++))
+
+ if ((cword < optind + 4)); then
+ _tipc_bearer $optind
+ return
+ fi
+
+ for ((i = 0; i < cword; i++)); do
+ if [[ ${words[i]} == 'media' ]]; then
+ media=${words[i + 1]}
+ fi
+ done
+ case "$media" in
+ "udp")
+ declare -a params=("localip" "localport" "remoteip"
+ "remoteport" "domain" "priority")
+ ;;
+ "eth" | "ib")
+ declare -a params=("domain" "priority")
+ ;;
+ *)
+ return
+ ;;
+ esac
+
+ # If the previous word was a known parameter, we assume a value for
+ # that key. Note that this would break if the user attempts to use
+ # a known key as value.
+ for i in "${params[@]}"; do
+ if [[ $prev == "$i" ]]; then
+ return
+ fi
+ done
+
+ # In order not to print already used options, we remove them
+ for p in "${words[@]}"; do
+ for i in "${params[@]}"; do
+ if [[ $p == "$i" ]]; then
+ params=("${params[@]/$i/}")
+ fi
+ done
+ done
+
+ COMPREPLY=($(compgen -W '${params[@]}' -- $cur))
+ ;;
+ disable)
+ ((optind++))
+
+ _tipc_bearer $optind
+ ;;
+ get)
+ ((optind++))
+
+ if ((cword == optind)); then
+ _tipc_link_opts
+ elif ((cword >= optind + 1)); then
+ _tipc_bearer $((optind + 1))
+ fi
+ ;;
+ set)
+ ((optind++))
+
+ if ((cword == optind)); then
+ _tipc_link_opts
+ elif ((cword >= optind + 2)); then
+ _tipc_bearer $((optind + 2))
+ fi
+ ;;
+ esac
+ ;;
+ link)
+ ((optind++))
+
+ if ((cword == optind)); then
+ COMPREPLY=($(compgen -W 'get set list statistics' -- $cur))
+ return
+ fi
+
+ case "${words[optind]}" in
+ get)
+ ((optind++))
+
+ if ((cword == optind)); then
+ _tipc_link_opts
+ elif ((cword >= optind + 1)); then
+ _tipc_link $((optind + 1)) "peers"
+ fi
+ ;;
+ set)
+ ((optind++))
+
+ if ((cword == optind)); then
+ _tipc_link_opts
+ elif ((cword >= optind + 2)); then
+ _tipc_link $((optind + 2)) "peers"
+ fi
+ ;;
+ statistics)
+ ((optind++))
+
+ if ((cword == optind)); then
+ COMPREPLY=($(compgen -W 'show reset' -- $cur))
+ return
+ fi
+
+ case "${words[optind]}" in
+ show | reset)
+ _tipc_link $((optind + 1))
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ media)
+ ((optind++))
+
+ if ((cword == optind)); then
+ COMPREPLY=($(compgen -W 'get set list' -- $cur))
+ return
+ fi
+
+ case "${words[optind]}" in
+ get)
+ ((optind++))
+
+ if ((cword == optind)); then
+ _tipc_link_opts
+ elif ((cword >= optind + 1)); then
+ _tipc_media $((optind + 1))
+ fi
+ ;;
+ set)
+ ((optind++))
+
+ if ((cword == optind)); then
+ _tipc_link_opts
+ elif ((cword >= optind + 2)); then
+ _tipc_media $((optind + 2))
+ fi
+ ;;
+ esac
+ ;;
+ nametable)
+ ((optind++))
+
+ if ((cword == optind)); then
+ COMPREPLY=($(compgen -W 'show' -- $cur))
+ fi
+ ;;
+ node)
+ ((optind++))
+
+ if ((cword == optind)); then
+ COMPREPLY=($(compgen -W 'list get set' -- $cur))
+ return
+ fi
+
+ case "${words[optind]}" in
+ get | set)
+ ((optind++))
+
+ if ((cword == optind)); then
+ COMPREPLY=($(compgen -W 'address netid' -- $cur))
+ fi
+ ;;
+ esac
+ ;;
+ socket)
+ ((optind++))
+
+ if ((cword == optind)); then
+ COMPREPLY=($(compgen -W 'list' -- $cur))
+ fi
+ ;;
+ esac
+} &&
+ complete -F _tipc tipc
+
+# ex: filetype=sh