Linux lhjmq-records 5.15.0-118-generic #128-Ubuntu SMP Fri Jul 5 09:28:59 UTC 2024 x86_64
Your IP : 18.191.205.110
# 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
|