1# systemd-resolve(1) completion -*- shell-script -*- 2# SPDX-License-Identifier: LGPL-2.1-or-later 3# 4# This file is part of systemd. 5# 6# systemd is free software; you can redistribute it and/or modify it 7# under the terms of the GNU Lesser General Public License as published by 8# the Free Software Foundation; either version 2.1 of the License, or 9# (at your option) any later version. 10# 11# systemd is distributed in the hope that it will be useful, but 12# WITHOUT ANY WARRANTY; without even the implied warranty of 13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14# General Public License for more details. 15# 16# You should have received a copy of the GNU Lesser General Public License 17# along with systemd; If not, see <http://www.gnu.org/licenses/>. 18 19__contains_word () { 20 local w word=$1; shift 21 for w in "$@"; do 22 [[ $w = "$word" ]] && return 23 done 24} 25 26__get_interfaces(){ 27 local name 28 for name in $(cd /sys/class/net && command ls); do 29 [[ "$name" != "lo" ]] && echo "$name" 30 done 31} 32 33_systemd-resolve() { 34 local i comps 35 local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} 36 local -A OPTS=( 37 [STANDALONE]='-h --help --version --no-pager -4 -6 38 --service --openpgp --tlsa --status --statistics 39 --reset-statistics --service-address=no --service-txt=no 40 --cname=no --search=no --legend=no --flush-caches 41 --reset-server-features --revert' 42 [ARG]='-i --interface -p --protocol -t --type -c --class --raw 43 --set-dns --set-domain --set-llmnr --set-mdns --set-dnssec --set-nta' 44 ) 45 46 if __contains_word "$prev" ${OPTS[ARG]}; then 47 case $prev in 48 --interface|-i) 49 comps=$( __get_interfaces ) 50 ;; 51 --protocol|-p|--type|-t|--class|-c) 52 comps=$( systemd-resolve --legend=no "$prev" help; echo help ) 53 ;; 54 --raw) 55 comps="payload packet" 56 ;; 57 --set-dns|--set-domain|--set-nta) 58 comps="" 59 ;; 60 --set-llmnr|--set-mdns) 61 comps="yes no resolve" 62 ;; 63 --set-dnssec) 64 comps="yes no allow-downgrade" 65 ;; 66 --set-dnsovertls) 67 comps="yes no opportunistic" 68 ;; 69 esac 70 COMPREPLY=( $(compgen -W '$comps' -- "$cur") ) 71 return 0 72 fi 73 74 if [[ "$cur" = -* ]] || [[ -z ${comps-} ]]; then 75 COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") ) 76 return 0 77 fi 78} 79 80complete -F _systemd-resolve systemd-resolve 81