tools/testing/selftests/drivers/net/hw/ethtool_rmon.sh

Source file repositories/reference/linux-study-clean/tools/testing/selftests/drivers/net/hw/ethtool_rmon.sh

File Facts

System
Linux kernel
Corpus path
tools/testing/selftests/drivers/net/hw/ethtool_rmon.sh
Extension
.sh
Size
3576 bytes
Lines
160
Domain
Support Tooling And Documentation
Bucket
tools
Inferred role
Support Tooling And Documentation: tools
Status
atlas-only

Why This File Exists

Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.

Dependency Surface

Detected Declarations

Annotated Snippet

#!/bin/bash
# SPDX-License-Identifier: GPL-2.0
#shellcheck disable=SC2034 # SC does not see the global variables
#shellcheck disable=SC2317,SC2329 # unused functions

ALL_TESTS="
	rmon_rx_histogram
	rmon_tx_histogram
"

: "${DRIVER_TEST_CONFORMANT:=yes}"
NUM_NETIFS=2
lib_dir=$(dirname "$0")
source "$lib_dir"/../../../net/forwarding/lib.sh
source "$lib_dir"/../../../kselftest/ktap_helpers.sh

UINT32_MAX=$((2**32 - 1))
ETH_FCS_LEN=4
ETH_HLEN=$((6+6+2))
TEST_NAME=$(basename "$0" .sh)

declare -A netif_mtu

ensure_mtu()
{
	local iface=$1; shift
	local len=$1; shift
	local required=$((len - ETH_HLEN - ETH_FCS_LEN))
	local current

	current=$(run_on "$iface" \
		ip -j link show dev "$iface" | jq -r '.[0].mtu')
	if [ "$current" -lt "$required" ]; then
		run_on "$iface" ip link set dev "$iface" mtu "$required" \
			|| return 1
	fi
}

bucket_test()
{
	local iface=$1; shift
	local neigh=$1; shift
	local set=$1; shift
	local bucket=$1; shift
	local len=$1; shift
	local num_rx=10000
	local num_tx=20000
	local expected=
	local before=
	local after=
	local delta=

	# Mausezahn does not include FCS bytes in its length - but the
	# histogram counters do
	len=$((len - ETH_FCS_LEN))
	len=$((len > 0 ? len : 0))

	before=$(run_on "$iface" ethtool --json -S "$iface" --groups rmon | \
		jq -r ".[0].rmon[\"${set}-pktsNtoM\"][$bucket].val")

	# Send 10k one way and 20k in the other, to detect counters
	# mapped to the wrong direction
	run_on "$neigh" \
		"$MZ" "$neigh" -q -c "$num_rx" -p "$len" -a own -b bcast -d 10us
	run_on "$iface" \
		"$MZ" "$iface" -q -c "$num_tx" -p "$len" -a own -b bcast -d 10us

	after=$(run_on "$iface" ethtool --json -S "$iface" --groups rmon | \
		jq -r ".[0].rmon[\"${set}-pktsNtoM\"][$bucket].val")

Annotation

Implementation Notes