mirror of
https://github.com/Gator96100/ProxSpace.git
synced 2025-01-09 20:33:34 -08:00
290 lines
8.1 KiB
Bash
290 lines
8.1 KiB
Bash
# 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
|