?????????? ????????? - ??????????????? - /home/agenciai/public_html/cd38d8/bash_completion.d.zip
???????
PK �)�[&�3� � vdostatsnu �[��� # bash completion for vdostats # # Copyright Red Hat # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # # TODO : Add device name at the end of completion of the commands. _vdostats() { local opts cur _init_completion || return COMPREPLY=() opts="--help --all --human-readable --si --verbose --version" cur="${COMP_WORDS[COMP_CWORD]}" case "${cur}" in *) COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) ;; esac } complete -F _vdostats vdostats PK �)�[P��Q Q authselect-completion.shnu �[��� # # Authors: # Tomas Halman <thalman@redhat.com> # # Copyright (C) 2019 Red Hat # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # # # provides autocompletion for authselect command # _authselect_completions() { local COMMANDS local command local possibleopts function is_valid_command() { local cmd for cmd in "${COMMANDS[@]}"; do if [[ "$cmd" = "$1" ]]; then return 0 fi done return 1 } function get_command() { local opt if [[ $COMP_CWORD -lt 2 ]] ; then return fi for opt in "${COMP_WORDS[@]:0:$COMP_CWORD}"; do if is_valid_command "$opt"; then echo "$opt" return fi done } function get_command_param() { local havecmd=0 local len=${#COMP_WORDS[@]}-1 if [[ "$command" = "" ]]; then return fi havecmd=0 for (( i=0; i<$len; i++ )); do if [[ "$havecmd" = "1" ]] ; then if [[ "${COMP_WORDS[$i]}" =~ ^[-=] || "${COMP_WORDS[$i-1]}" = "=" ]] ; then continue fi echo "${COMP_WORDS[$i]}" return fi if [[ "${COMP_WORDS[$i]}" = "$command" ]] ; then havecmd=1 fi done } function get_profile() { case "$command" in select|show|requirements|test|list-features) get_command_param ;; enable-feature|disable-feature) authselect current 2>/dev/null | head -n1 | cut -d" " -f3 ;; esac } function get_command_keywords() { local profile case "$command" in select|requirements|test) profile="$(get_profile)" if [[ "$profile" != "" ]] ; then authselect list-features "$profile" 2>/dev/null fi ;; esac } function get_command_options() { if [[ "${COMP_WORDS[$COMP_CWORD]}" =~ ^- ]] ; then case "$command" in select) echo "--force --quiet --nobackup --backup=" ;; apply-changes|disable-feature) echo "--backup=" ;; enable-feature) echo "--backup= --quiet" ;; current|backup-list) echo "--raw" ;; create-profile) echo "--vendor --base-on= --base-on-default" \ "--symlink-meta --symlink-nsswitch --symlink-pam" \ "--symlink-dconf --symlink=" ;; test) echo "--all --nsswitch --system-auth --password-auth" \ "--smartcard-auth --fingerprint-auth --postlogin" \ "--dconf-db --dconf-lock" ;; esac fi } function get_global_options() { if [[ "${COMP_WORDS[$COMP_CWORD]}" =~ ^- ]] ; then echo "--debug --trace --warn --help" fi } function get_option_params() { local opt if [[ $COMP_CWORD -gt 2 && "${COMP_WORDS[$COMP_CWORD-1]}" = "=" ]] ; then opt="${COMP_WORDS[$COMP_CWORD-2]}" else if [[ $COMP_CWORD -gt 1 ]] ; then opt="${COMP_WORDS[$COMP_CWORD-1]}" fi fi case "$opt" in --base-on) authselect list 2>/dev/null | cut -d" " -f2 ;; --symlink) echo "dconf-db dconf-locks fingerprint-auth nsswitch.conf" \ "password-auth postlogin smartcard-auth system-auth" \ "README REQUIREMENTS" ;; esac } function get_command_params() { local i local profile if [[ "$command" = "" ]]; then return fi for (( i=$COMP_CWORD-1; i>1; i-- )); do opt="${COMP_WORDS[$i]}" if [[ "$opt" = "$command" ]] ; then break fi if [[ "$opt" =~ ^[-=] || "${COMP_WORDS[$i-1]}" = "=" ]] ; then continue fi return done case "$command" in select|show|requirements|test|list-features) authselect list 2>/dev/null | cut -d" " -f2 ;; backup-remove|backup-restore) authselect backup-list 2>/dev/null | cut -d" " -f1 ;; enable-feature|disable-feature) profile="$(get_profile)" if [[ "$profile" != "" ]] ; then authselect list-features "$profile" 2>/dev/null fi ;; esac } COMMANDS=(select apply-changes list list-features show requirements current check test enable-feature disable-feature create-profile backup-list backup-remove backup-restore) possibleopts="$(get_option_params)" if [[ "$possibleopts" != "" ]]; then if [[ "${COMP_WORDS[$COMP_CWORD]}" = "=" ]]; then COMPREPLY=($(compgen -W "$possibleopts")) else COMPREPLY=($(compgen -W "$possibleopts" -- "${COMP_WORDS[$COMP_CWORD]}")) fi else command="$(get_command)" if [[ "$command" = "" ]]; then possibleopts="$(get_global_options) ${COMMANDS[@]}" else possibleopts="$(get_global_options) $(get_command_params) $(get_command_keywords) $(get_command_options)" fi COMPREPLY=($(compgen -W "$possibleopts" -- "${COMP_WORDS[$COMP_CWORD]}")) fi } complete -F _authselect_completions authselect PK �)�[ٝ�lh h tracernu �[��� command -v register-python-argcomplete 2>&1 > /dev/null && eval "$(register-python-argcomplete tracer)" PK �)�[��-w w redefine_filedirnu �[��� # This is a copy of the _filedir function in bash_completion, included # and (re)defined separately here because some versions of Adobe # Reader, if installed, are known to override this function with an # incompatible version, causing various problems. # # https://bugzilla.redhat.com/677446 # http://forums.adobe.com/thread/745833 _filedir() { local IFS=$'\n' _tilde "${cur-}" || return local -a toks local reset arg=${1-} if [[ $arg == -d ]]; then reset=$(shopt -po noglob) set -o noglob toks=($(compgen -d -- "${cur-}")) IFS=' ' $reset IFS=$'\n' else local quoted _quote_readline_by_ref "${cur-}" quoted # Munge xspec to contain uppercase version too # https://lists.gnu.org/archive/html/bug-bash/2010-09/msg00036.html # news://news.gmane.io/4C940E1C.1010304@case.edu local xspec=${arg:+"!*.@($arg|${arg^^})"} plusdirs=() # Use plusdirs to get dir completions if we have a xspec; if we don't, # there's no need, dirs come along with other completions. Don't use # plusdirs quite yet if fallback is in use though, in order to not ruin # the fallback condition with the "plus" dirs. local opts=(-f -X "$xspec") [[ $xspec ]] && plusdirs=(-o plusdirs) [[ ${COMP_FILEDIR_FALLBACK-} || -z ${plusdirs-} ]] || opts+=("${plusdirs[@]}") reset=$(shopt -po noglob) set -o noglob toks+=($(compgen "${opts[@]}" -- $quoted)) IFS=' ' $reset IFS=$'\n' # Try without filter if it failed to produce anything and configured to [[ -n ${COMP_FILEDIR_FALLBACK-} && -n $arg && ${#toks[@]} -lt 1 ]] && { reset=$(shopt -po noglob) set -o noglob toks+=($(compgen -f ${plusdirs+"${plusdirs[@]}"} -- $quoted)) IFS=' ' $reset IFS=$'\n' } fi if ((${#toks[@]} != 0)); then # 2>/dev/null for direct invocation, e.g. in the _filedir unit test compopt -o filenames 2>/dev/null COMPREPLY+=("${toks[@]}") fi } # _filedir() PK �)�[=�Cq q sclnu �[��� # main function bound to scl command _scl() { local cur actions cur_action collections COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" actions="enable run load unload list-collections list-packages man register deregister --help" collections=`scl list-collections` # Complete action names if ((COMP_CWORD == 1)); then COMPREPLY=( $(compgen -W "${actions}" -- ${cur}) ) return 0; fi # If there is command or separator in arguments then stop completition if ((COMP_CWORD > 3)); then for word in "${COMP_WORDS[@]}"; do if [[ ${word} == \'* || ${word} == \"* || ${word} == "--" ]] ; then return 0 fi done fi # Complete one or none action argument if ((COMP_CWORD >= 2)); then cur_action="${COMP_WORDS[1]}" case "$cur_action" in # No argument list-collections|list-enabled|--help) return 0 ;; # Argument is collection name list-packages|man) if ((COMP_CWORD == 2)); then COMPREPLY=( $(compgen -W "$collections" -- ${cur}) ) fi return 0 ;; # Argument is collection name or "-f" or "--force" deregister) if ((COMP_CWORD == 2)); then COMPREPLY=( $(compgen -W "$collections --force -f" -- ${cur})) fi if [ "$COMP_CWORD" -eq 3 -a "(" "${COMP_WORDS[2]}" == "--force" -o "${COMP_WORDS[2]}" == "-f" ")" ]; then COMPREPLY=( $(compgen -W "$collections" -- ${cur})) fi return 0 ;; # Argument is directory register) compopt -o plusdirs if ((COMP_CWORD == 2)); then COMPREPLY=( $(compgen -A directory -- ${cur}) ) fi return 0 ;; # Arguments are collections or "-x" or "--exec" run|enable) if ((COMP_CWORD == 2)); then COMPREPLY=( $(compgen -W "$collections -x --exec" -- ${cur}) ) else COMPREPLY=( $(compgen -W "$collections" -- ${cur}) ) fi return 0 ;; # Arguments are collections load|unload) COMPREPLY=( $(compgen -W "$collections" -- ${cur}) ) return 0 ;; *) ;; esac fi } # bind the scl command to the _scl function for completion complete -F _scl scl PK �)�[�܄�= = iprconfignu �[��� # IBM IPR adapter configuration utility # # (C) Copyright 2000, 2015 # International Business Machines Corporation and others. # All Rights Reserved. This program and the accompanying # materials are made available under the terms of the # Common Public License v1.0 which accompanies this distribution. _comp_iprconfig () { iprconfig="${COMP_WORDS[0]}" cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" case "${prev}" in "-c") opts=$(${iprconfig} -l 2>/dev/null) COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) ;; "-k") COMPREPLY=( $(compgen -o dirnames -- ${cur}) ) ;; *) opts=$(find /dev -printf "%f\n" | grep -G "^\(sd\|sg\)") COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) ;; esac return 0; } complete -F _comp_iprconfig iprconfig PK �)�[���\�� �� bpftoolnu �[��� # bpftool(8) bash completion -*- shell-script -*- # # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) # Copyright (C) 2017-2018 Netronome Systems, Inc. # # Author: Quentin Monnet <quentin.monnet@netronome.com> # Takes a list of words in argument; each one of them is added to COMPREPLY if # it is not already present on the command line. Returns no value. _bpftool_once_attr() { local w idx found for w in $*; do found=0 for (( idx=3; idx < ${#words[@]}-1; idx++ )); do if [[ $w == ${words[idx]} ]]; then found=1 break fi done [[ $found -eq 0 ]] && \ COMPREPLY+=( $( compgen -W "$w" -- "$cur" ) ) done } # Takes a list of words as argument; if any of those words is present on the # command line, return 0. Otherwise, return 1. _bpftool_search_list() { local w idx for w in $*; do for (( idx=3; idx < ${#words[@]}-1; idx++ )); do [[ $w == ${words[idx]} ]] && return 0 done done return 1 } # Takes a list of words in argument; adds them all to COMPREPLY if none of them # is already present on the command line. Returns no value. _bpftool_one_of_list() { _bpftool_search_list $* && return 1 COMPREPLY+=( $( compgen -W "$*" -- "$cur" ) ) } _bpftool_get_map_ids() { COMPREPLY+=( $( compgen -W "$( bpftool -jp map 2>&1 | \ command sed -n 's/.*"id": \(.*\),$/\1/p' )" -- "$cur" ) ) } # Takes map type and adds matching map ids to the list of suggestions. _bpftool_get_map_ids_for_type() { local type="$1" COMPREPLY+=( $( compgen -W "$( bpftool -jp map 2>&1 | \ command grep -C2 "$type" | \ command sed -n 's/.*"id": \(.*\),$/\1/p' )" -- "$cur" ) ) } _bpftool_get_map_names() { COMPREPLY+=( $( compgen -W "$( bpftool -jp map 2>&1 | \ command sed -n 's/.*"name": \(.*\),$/\1/p' )" -- "$cur" ) ) } # Takes map type and adds matching map names to the list of suggestions. _bpftool_get_map_names_for_type() { local type="$1" COMPREPLY+=( $( compgen -W "$( bpftool -jp map 2>&1 | \ command grep -C2 "$type" | \ command sed -n 's/.*"name": \(.*\),$/\1/p' )" -- "$cur" ) ) } _bpftool_get_prog_ids() { COMPREPLY+=( $( compgen -W "$( bpftool -jp prog 2>&1 | \ command sed -n 's/.*"id": \(.*\),$/\1/p' )" -- "$cur" ) ) } _bpftool_get_prog_tags() { COMPREPLY+=( $( compgen -W "$( bpftool -jp prog 2>&1 | \ command sed -n 's/.*"tag": "\(.*\)",$/\1/p' )" -- "$cur" ) ) } _bpftool_get_prog_names() { COMPREPLY+=( $( compgen -W "$( bpftool -jp prog 2>&1 | \ command sed -n 's/.*"name": "\(.*\)",$/\1/p' )" -- "$cur" ) ) } _bpftool_get_btf_ids() { COMPREPLY+=( $( compgen -W "$( bpftool -jp btf 2>&1 | \ command sed -n 's/.*"id": \(.*\),$/\1/p' )" -- "$cur" ) ) } _bpftool_get_link_ids() { COMPREPLY+=( $( compgen -W "$( bpftool -jp link 2>&1 | \ command sed -n 's/.*"id": \(.*\),$/\1/p' )" -- "$cur" ) ) } _bpftool_get_obj_map_names() { local obj maps obj=$1 maps=$(objdump -j .maps -t $obj 2>/dev/null | \ command awk '/g . .maps/ {print $NF}') COMPREPLY+=( $( compgen -W "$maps" -- "$cur" ) ) } _bpftool_get_obj_map_idxs() { local obj nmaps obj=$1 nmaps=$(objdump -j maps -t $obj 2>/dev/null | grep -c 'g . maps') COMPREPLY+=( $( compgen -W "$(seq 0 $((nmaps - 1)))" -- "$cur" ) ) } _sysfs_get_netdevs() { COMPREPLY+=( $( compgen -W "$( ls /sys/class/net 2>/dev/null )" -- \ "$cur" ) ) } # Retrieve type of the map that we are operating on. _bpftool_map_guess_map_type() { local keyword idx ref="" for (( idx=3; idx < ${#words[@]}-1; idx++ )); do case "${words[$((idx-2))]}" in lookup|update) keyword=${words[$((idx-1))]} ref=${words[$((idx))]} ;; push) printf "stack" return 0 ;; enqueue) printf "queue" return 0 ;; esac done [[ -z $ref ]] && return 0 local type type=$(bpftool -jp map show $keyword $ref | \ command sed -n 's/.*"type": "\(.*\)",$/\1/p') [[ -n $type ]] && printf $type } _bpftool_map_update_get_id() { local command="$1" # Is it the map to update, or a map to insert into the map to update? # Search for "value" keyword. local idx value for (( idx=7; idx < ${#words[@]}-1; idx++ )); do if [[ ${words[idx]} == "value" ]]; then value=1 break fi done if [[ $value -eq 0 ]]; then case "$command" in push) _bpftool_get_map_ids_for_type stack ;; enqueue) _bpftool_get_map_ids_for_type queue ;; *) _bpftool_get_map_ids ;; esac return 0 fi # Id to complete is for a value. It can be either prog id or map id. This # depends on the type of the map to update. local type=$(_bpftool_map_guess_map_type) case $type in array_of_maps|hash_of_maps) _bpftool_get_map_ids return 0 ;; prog_array) _bpftool_get_prog_ids return 0 ;; *) return 0 ;; esac } _bpftool_map_update_get_name() { local command="$1" # Is it the map to update, or a map to insert into the map to update? # Search for "value" keyword. local idx value for (( idx=7; idx < ${#words[@]}-1; idx++ )); do if [[ ${words[idx]} == "value" ]]; then value=1 break fi done if [[ $value -eq 0 ]]; then case "$command" in push) _bpftool_get_map_names_for_type stack ;; enqueue) _bpftool_get_map_names_for_type queue ;; *) _bpftool_get_map_names ;; esac return 0 fi # Name to complete is for a value. It can be either prog name or map name. This # depends on the type of the map to update. local type=$(_bpftool_map_guess_map_type) case $type in array_of_maps|hash_of_maps) _bpftool_get_map_names return 0 ;; prog_array) _bpftool_get_prog_names return 0 ;; *) return 0 ;; esac } _bpftool() { local cur prev words cword comp_args local json=0 _init_completion -- "$@" || return # Deal with options if [[ ${words[cword]} == -* ]]; then local c='--version --json --pretty --bpffs --mapcompat --debug \ --use-loader --base-btf' COMPREPLY=( $( compgen -W "$c" -- "$cur" ) ) return 0 fi if _bpftool_search_list -j --json -p --pretty; then json=1 fi # Deal with simplest keywords case $prev in help|hex) return 0 ;; tag) _bpftool_get_prog_tags return 0 ;; dev|offload_dev|xdpmeta_dev) _sysfs_get_netdevs return 0 ;; file|pinned|-B|--base-btf) _filedir return 0 ;; batch) COMPREPLY=( $( compgen -W 'file' -- "$cur" ) ) return 0 ;; esac # Remove all options so completions don't have to deal with them. local i pprev for (( i=1; i < ${#words[@]}; )); do if [[ ${words[i]::1} == - ]] && [[ ${words[i]} != "-B" ]] && [[ ${words[i]} != "--base-btf" ]]; then words=( "${words[@]:0:i}" "${words[@]:i+1}" ) [[ $i -le $cword ]] && cword=$(( cword - 1 )) else i=$(( ++i )) fi done cur=${words[cword]} prev=${words[cword - 1]} pprev=${words[cword - 2]} local object=${words[1]} if [[ -z $object || $cword -eq 1 ]]; then case $cur in *) COMPREPLY=( $( compgen -W "$( bpftool help 2>&1 | \ command sed \ -e '/OBJECT := /!d' \ -e 's/.*{//' \ -e 's/}.*//' \ -e 's/|//g' )" -- "$cur" ) ) COMPREPLY+=( $( compgen -W 'batch help' -- "$cur" ) ) return 0 ;; esac fi local command=${words[2]} [[ $command == help ]] && return 0 local MAP_TYPE='id pinned name' local PROG_TYPE='id pinned tag name' # Completion depends on object and command in use case $object in prog) # Complete id and name, only for subcommands that use prog (but no # map) ids/names. case $command in show|list|dump|pin) case $prev in id) _bpftool_get_prog_ids return 0 ;; name) _bpftool_get_prog_names return 0 ;; esac ;; esac local METRIC_TYPE='cycles instructions l1d_loads llc_misses \ itlb_misses dtlb_misses' case $command in show|list) [[ $prev != "$command" ]] && return 0 COMPREPLY=( $( compgen -W "$PROG_TYPE" -- "$cur" ) ) return 0 ;; dump) case $prev in $command) COMPREPLY+=( $( compgen -W "xlated jited" -- \ "$cur" ) ) return 0 ;; xlated|jited) COMPREPLY=( $( compgen -W "$PROG_TYPE" -- \ "$cur" ) ) return 0 ;; *) # "file" is not compatible with other keywords here if _bpftool_search_list 'file'; then return 0 fi if ! _bpftool_search_list 'linum opcodes visual'; then _bpftool_once_attr 'file' fi _bpftool_once_attr 'linum opcodes' if _bpftool_search_list 'xlated' && [[ "$json" == 0 ]]; then _bpftool_once_attr 'visual' fi return 0 ;; esac ;; pin) if [[ $prev == "$command" ]]; then COMPREPLY=( $( compgen -W "$PROG_TYPE" -- "$cur" ) ) else _filedir fi return 0 ;; attach|detach) case $cword in 3) COMPREPLY=( $( compgen -W "$PROG_TYPE" -- "$cur" ) ) return 0 ;; 4) case $prev in id) _bpftool_get_prog_ids ;; name) _bpftool_get_prog_names ;; pinned) _filedir ;; esac return 0 ;; 5) local BPFTOOL_PROG_ATTACH_TYPES='sk_msg_verdict \ sk_skb_verdict sk_skb_stream_verdict sk_skb_stream_parser \ flow_dissector' COMPREPLY=( $( compgen -W "$BPFTOOL_PROG_ATTACH_TYPES" -- "$cur" ) ) return 0 ;; 6) COMPREPLY=( $( compgen -W "$MAP_TYPE" -- "$cur" ) ) return 0 ;; 7) case $prev in id) _bpftool_get_map_ids ;; name) _bpftool_get_map_names ;; pinned) _filedir ;; esac return 0 ;; esac ;; load|loadall) local obj # Propose "load/loadall" to complete "bpftool prog load", # or bash tries to complete "load" as a filename below. if [[ ${#words[@]} -eq 3 ]]; then COMPREPLY=( $( compgen -W "load loadall" -- "$cur" ) ) return 0 fi if [[ ${#words[@]} -lt 6 ]]; then _filedir return 0 fi obj=${words[3]} if [[ ${words[-4]} == "map" ]]; then COMPREPLY=( $( compgen -W "$MAP_TYPE" -- "$cur" ) ) return 0 fi if [[ ${words[-3]} == "map" ]]; then if [[ ${words[-2]} == "idx" ]]; then _bpftool_get_obj_map_idxs $obj elif [[ ${words[-2]} == "name" ]]; then _bpftool_get_obj_map_names $obj fi return 0 fi if [[ ${words[-2]} == "map" ]]; then COMPREPLY=( $( compgen -W "idx name" -- "$cur" ) ) return 0 fi case $prev in type) local BPFTOOL_PROG_LOAD_TYPES='socket kprobe \ kretprobe classifier flow_dissector \ action tracepoint raw_tracepoint \ xdp perf_event cgroup/skb cgroup/sock \ cgroup/dev lwt_in lwt_out lwt_xmit \ lwt_seg6local sockops sk_skb sk_msg lirc_mode2 \ cgroup/bind4 cgroup/bind6 \ cgroup/connect4 cgroup/connect6 cgroup/connect_unix \ cgroup/getpeername4 cgroup/getpeername6 cgroup/getpeername_unix \ cgroup/getsockname4 cgroup/getsockname6 cgroup/getsockname_unix \ cgroup/sendmsg4 cgroup/sendmsg6 cgroup/sendmsg_unix \ cgroup/recvmsg4 cgroup/recvmsg6 cgroup/recvmsg_unix \ cgroup/post_bind4 cgroup/post_bind6 \ cgroup/sysctl cgroup/getsockopt \ cgroup/setsockopt cgroup/sock_release struct_ops \ fentry fexit freplace sk_lookup' COMPREPLY=( $( compgen -W "$BPFTOOL_PROG_LOAD_TYPES" -- "$cur" ) ) return 0 ;; id) _bpftool_get_map_ids return 0 ;; name) _bpftool_get_map_names return 0 ;; pinned|pinmaps) _filedir return 0 ;; *) COMPREPLY=( $( compgen -W "map" -- "$cur" ) ) _bpftool_once_attr 'type pinmaps autoattach' _bpftool_one_of_list 'offload_dev xdpmeta_dev' return 0 ;; esac ;; tracelog) return 0 ;; profile) case $cword in 3) COMPREPLY=( $( compgen -W "$PROG_TYPE" -- "$cur" ) ) return 0 ;; 4) case $prev in id) _bpftool_get_prog_ids ;; name) _bpftool_get_prog_names ;; pinned) _filedir ;; esac return 0 ;; 5) COMPREPLY=( $( compgen -W "$METRIC_TYPE duration" -- "$cur" ) ) return 0 ;; *) [[ $prev == duration ]] && return 0 _bpftool_once_attr "$METRIC_TYPE" return 0 ;; esac ;; run) if [[ ${#words[@]} -eq 4 ]]; then COMPREPLY=( $( compgen -W "$PROG_TYPE" -- "$cur" ) ) return 0 fi case $prev in id) _bpftool_get_prog_ids return 0 ;; name) _bpftool_get_prog_names return 0 ;; data_in|data_out|ctx_in|ctx_out) _filedir return 0 ;; repeat|data_size_out|ctx_size_out) return 0 ;; *) _bpftool_once_attr 'data_in data_out data_size_out \ ctx_in ctx_out ctx_size_out repeat' return 0 ;; esac ;; *) [[ $prev == $object ]] && \ COMPREPLY=( $( compgen -W 'dump help pin attach detach \ load loadall show list tracelog run profile' -- "$cur" ) ) ;; esac ;; struct_ops) local STRUCT_OPS_TYPE='id name' case $command in show|list|dump|unregister) case $prev in $command) COMPREPLY=( $( compgen -W "$STRUCT_OPS_TYPE" -- "$cur" ) ) ;; id) _bpftool_get_map_ids_for_type struct_ops ;; name) _bpftool_get_map_names_for_type struct_ops ;; esac return 0 ;; register) [[ $prev == $command ]] && _filedir return 0 ;; *) [[ $prev == $object ]] && \ COMPREPLY=( $( compgen -W 'register unregister show list dump help' \ -- "$cur" ) ) ;; esac ;; iter) case $command in pin) case $prev in $command) _filedir ;; id) _bpftool_get_map_ids ;; name) _bpftool_get_map_names ;; pinned) _filedir ;; map) _bpftool_one_of_list $MAP_TYPE ;; *) _bpftool_once_attr 'map' ;; esac return 0 ;; *) [[ $prev == $object ]] && \ COMPREPLY=( $( compgen -W 'pin help' \ -- "$cur" ) ) ;; esac ;; map) case $command in show|list|dump|peek|pop|dequeue|freeze) case $prev in $command) COMPREPLY=( $( compgen -W "$MAP_TYPE" -- "$cur" ) ) return 0 ;; id) case "$command" in peek) _bpftool_get_map_ids_for_type stack _bpftool_get_map_ids_for_type queue ;; pop) _bpftool_get_map_ids_for_type stack ;; dequeue) _bpftool_get_map_ids_for_type queue ;; *) _bpftool_get_map_ids ;; esac return 0 ;; name) case "$command" in peek) _bpftool_get_map_names_for_type stack _bpftool_get_map_names_for_type queue ;; pop) _bpftool_get_map_names_for_type stack ;; dequeue) _bpftool_get_map_names_for_type queue ;; *) _bpftool_get_map_names ;; esac return 0 ;; *) return 0 ;; esac ;; create) case $prev in $command) _filedir return 0 ;; type) local BPFTOOL_MAP_CREATE_TYPES="$(bpftool feature list_builtins map_types 2>/dev/null | \ grep -v '^unspec$')" COMPREPLY=( $( compgen -W "$BPFTOOL_MAP_CREATE_TYPES" -- "$cur" ) ) return 0 ;; key|value|flags|entries) return 0 ;; inner_map) COMPREPLY=( $( compgen -W "$MAP_TYPE" -- "$cur" ) ) return 0 ;; id) _bpftool_get_map_ids ;; name) case $pprev in inner_map) _bpftool_get_map_names ;; *) return 0 ;; esac ;; *) _bpftool_once_attr 'type key value entries name flags offload_dev' if _bpftool_search_list 'array_of_maps' 'hash_of_maps'; then _bpftool_once_attr 'inner_map' fi return 0 ;; esac ;; lookup|getnext|delete) case $prev in $command) COMPREPLY=( $( compgen -W "$MAP_TYPE" -- "$cur" ) ) return 0 ;; id) _bpftool_get_map_ids return 0 ;; name) _bpftool_get_map_names return 0 ;; key) COMPREPLY+=( $( compgen -W 'hex' -- "$cur" ) ) ;; *) case $(_bpftool_map_guess_map_type) in queue|stack) return 0 ;; esac _bpftool_once_attr 'key' return 0 ;; esac ;; update|push|enqueue) case $prev in $command) COMPREPLY=( $( compgen -W "$MAP_TYPE" -- "$cur" ) ) return 0 ;; id) _bpftool_map_update_get_id $command return 0 ;; name) _bpftool_map_update_get_name $command return 0 ;; key) COMPREPLY+=( $( compgen -W 'hex' -- "$cur" ) ) ;; value) # We can have bytes, or references to a prog or a # map, depending on the type of the map to update. case "$(_bpftool_map_guess_map_type)" in array_of_maps|hash_of_maps) COMPREPLY+=( $( compgen -W "$MAP_TYPE" \ -- "$cur" ) ) return 0 ;; prog_array) COMPREPLY+=( $( compgen -W "$PROG_TYPE" \ -- "$cur" ) ) return 0 ;; *) COMPREPLY+=( $( compgen -W 'hex' \ -- "$cur" ) ) return 0 ;; esac return 0 ;; *) case $(_bpftool_map_guess_map_type) in queue|stack) _bpftool_once_attr 'value' return 0; ;; esac _bpftool_once_attr 'key' local UPDATE_FLAGS='any exist noexist' idx for (( idx=3; idx < ${#words[@]}-1; idx++ )); do if [[ ${words[idx]} == 'value' ]]; then # 'value' is present, but is not the last # word i.e. we can now have UPDATE_FLAGS. _bpftool_one_of_list "$UPDATE_FLAGS" return 0 fi done for (( idx=3; idx < ${#words[@]}-1; idx++ )); do if [[ ${words[idx]} == 'key' ]]; then # 'key' is present, but is not the last # word i.e. we can now have 'value'. _bpftool_once_attr 'value' return 0 fi done return 0 ;; esac ;; pin) case $prev in $command) COMPREPLY=( $( compgen -W "$MAP_TYPE" -- "$cur" ) ) ;; id) _bpftool_get_map_ids ;; name) _bpftool_get_map_names ;; esac return 0 ;; event_pipe) case $prev in $command) COMPREPLY=( $( compgen -W "$MAP_TYPE" -- "$cur" ) ) return 0 ;; id) _bpftool_get_map_ids_for_type perf_event_array return 0 ;; name) _bpftool_get_map_names_for_type perf_event_array return 0 ;; cpu) return 0 ;; index) return 0 ;; *) _bpftool_once_attr 'cpu index' return 0 ;; esac ;; *) [[ $prev == $object ]] && \ COMPREPLY=( $( compgen -W 'delete dump getnext help \ lookup pin event_pipe show list update create \ peek push enqueue pop dequeue freeze' -- \ "$cur" ) ) ;; esac ;; btf) local MAP_TYPE='id pinned name' case $command in dump) case $prev in $command) COMPREPLY+=( $( compgen -W "id map prog file" -- \ "$cur" ) ) return 0 ;; prog) COMPREPLY=( $( compgen -W "$PROG_TYPE" -- "$cur" ) ) return 0 ;; map) COMPREPLY=( $( compgen -W "$MAP_TYPE" -- "$cur" ) ) return 0 ;; id) case $pprev in prog) _bpftool_get_prog_ids ;; map) _bpftool_get_map_ids ;; $command) _bpftool_get_btf_ids ;; esac return 0 ;; name) case $pprev in prog) _bpftool_get_prog_names ;; map) _bpftool_get_map_names ;; esac return 0 ;; format) COMPREPLY=( $( compgen -W "c raw" -- "$cur" ) ) ;; c) COMPREPLY=( $( compgen -W "unsorted" -- "$cur" ) ) ;; *) # emit extra options case ${words[3]} in id|file) _bpftool_once_attr 'format' ;; map|prog) if [[ ${words[3]} == "map" ]] && [[ $cword == 6 ]]; then COMPREPLY+=( $( compgen -W "key value kv all" -- "$cur" ) ) fi _bpftool_once_attr 'format' ;; *) ;; esac return 0 ;; esac ;; show|list) case $prev in $command) COMPREPLY+=( $( compgen -W "id" -- "$cur" ) ) ;; id) _bpftool_get_btf_ids ;; esac return 0 ;; *) [[ $prev == $object ]] && \ COMPREPLY=( $( compgen -W 'dump help show list' \ -- "$cur" ) ) ;; esac ;; gen) case $command in object) _filedir return 0 ;; skeleton) case $prev in $command) _filedir return 0 ;; *) _bpftool_once_attr 'name' return 0 ;; esac ;; subskeleton) case $prev in $command) _filedir return 0 ;; *) _bpftool_once_attr 'name' return 0 ;; esac ;; min_core_btf) _filedir return 0 ;; *) [[ $prev == $object ]] && \ COMPREPLY=( $( compgen -W 'object skeleton subskeleton help min_core_btf' -- "$cur" ) ) ;; esac ;; cgroup) case $command in show|list|tree) case $cword in 3) _filedir ;; 4) COMPREPLY=( $( compgen -W 'effective' -- "$cur" ) ) ;; esac return 0 ;; attach|detach) local BPFTOOL_CGROUP_ATTACH_TYPES="$(bpftool feature list_builtins attach_types 2>/dev/null | \ grep '^cgroup_')" local ATTACH_FLAGS='multi override' # Check for $prev = $command first if [ $prev = $command ]; then _filedir return 0 # Then check for attach type. This is done outside of the # "case $prev in" to avoid writing the whole list of attach # types again as pattern to match (where we cannot reuse # our variable). elif [[ $BPFTOOL_CGROUP_ATTACH_TYPES =~ $prev ]]; then COMPREPLY=( $( compgen -W "$PROG_TYPE" -- \ "$cur" ) ) return 0 fi # case/esac for the other cases case $prev in id) _bpftool_get_prog_ids return 0 ;; *) if ! _bpftool_search_list "$BPFTOOL_CGROUP_ATTACH_TYPES"; then COMPREPLY=( $( compgen -W \ "$BPFTOOL_CGROUP_ATTACH_TYPES" -- "$cur" ) ) elif [[ "$command" == "attach" ]]; then # We have an attach type on the command line, # but it is not the previous word, or # "id|pinned|tag|name" (we already checked for # that). This should only leave the case when # we need attach flags for "attach" commamnd. _bpftool_one_of_list "$ATTACH_FLAGS" fi return 0 ;; esac ;; *) [[ $prev == $object ]] && \ COMPREPLY=( $( compgen -W 'help attach detach \ show list tree' -- "$cur" ) ) ;; esac ;; perf) case $command in *) [[ $prev == $object ]] && \ COMPREPLY=( $( compgen -W 'help \ show list' -- "$cur" ) ) ;; esac ;; net) local ATTACH_TYPES='xdp xdpgeneric xdpdrv xdpoffload' case $command in show|list) [[ $prev != "$command" ]] && return 0 COMPREPLY=( $( compgen -W 'dev' -- "$cur" ) ) return 0 ;; attach) case $cword in 3) COMPREPLY=( $( compgen -W "$ATTACH_TYPES" -- "$cur" ) ) return 0 ;; 4) COMPREPLY=( $( compgen -W "$PROG_TYPE" -- "$cur" ) ) return 0 ;; 5) case $prev in id) _bpftool_get_prog_ids ;; name) _bpftool_get_prog_names ;; pinned) _filedir ;; esac return 0 ;; 6) COMPREPLY=( $( compgen -W 'dev' -- "$cur" ) ) return 0 ;; 8) _bpftool_once_attr 'overwrite' return 0 ;; esac ;; detach) case $cword in 3) COMPREPLY=( $( compgen -W "$ATTACH_TYPES" -- "$cur" ) ) return 0 ;; 4) COMPREPLY=( $( compgen -W 'dev' -- "$cur" ) ) return 0 ;; esac ;; *) [[ $prev == $object ]] && \ COMPREPLY=( $( compgen -W 'help \ show list attach detach' -- "$cur" ) ) ;; esac ;; feature) case $command in probe) [[ $prev == "prefix" ]] && return 0 if _bpftool_search_list 'macros'; then _bpftool_once_attr 'prefix' else COMPREPLY+=( $( compgen -W 'macros' -- "$cur" ) ) fi _bpftool_one_of_list 'kernel dev' _bpftool_once_attr 'full unprivileged' return 0 ;; list_builtins) [[ $prev != "$command" ]] && return 0 COMPREPLY=( $( compgen -W 'prog_types map_types \ attach_types link_types helpers' -- "$cur" ) ) ;; *) [[ $prev == $object ]] && \ COMPREPLY=( $( compgen -W 'help list_builtins probe' -- "$cur" ) ) ;; esac ;; link) case $command in show|list|pin|detach) case $prev in id) _bpftool_get_link_ids return 0 ;; esac ;; esac local LINK_TYPE='id pinned' case $command in show|list) [[ $prev != "$command" ]] && return 0 COMPREPLY=( $( compgen -W "$LINK_TYPE" -- "$cur" ) ) return 0 ;; pin|detach) if [[ $prev == "$command" ]]; then COMPREPLY=( $( compgen -W "$LINK_TYPE" -- "$cur" ) ) elif [[ $pprev == "$command" ]]; then _filedir fi return 0 ;; *) [[ $prev == $object ]] && \ COMPREPLY=( $( compgen -W 'help pin detach show list' -- "$cur" ) ) ;; esac ;; esac } && complete -F _bpftool bpftool # ex: ts=4 sw=4 et filetype=sh PK �)�[&�3� � vdostatsnu �[��� PK �)�[P��Q Q � authselect-completion.shnu �[��� PK �)�[ٝ�lh h e tracernu �[��� PK �)�[��-w w redefine_filedirnu �[��� PK �)�[=�Cq q �'