133 lines
3.2 KiB
Bash
133 lines
3.2 KiB
Bash
|
#!/bin/bash
|
||
|
# SPDX-License-Identifier: GPL-2.0-only
|
||
|
|
||
|
source ethtool-common.sh
|
||
|
|
||
|
function get_value {
|
||
|
local query="${SETTINGS_MAP[$1]}"
|
||
|
|
||
|
echo $(ethtool -c $NSIM_NETDEV | \
|
||
|
awk -F':' -v pattern="$query:" '$0 ~ pattern {gsub(/[ \t]/, "", $2); print $2}')
|
||
|
}
|
||
|
|
||
|
function update_current_settings {
|
||
|
for key in ${!SETTINGS_MAP[@]}; do
|
||
|
CURRENT_SETTINGS[$key]=$(get_value $key)
|
||
|
done
|
||
|
echo ${CURRENT_SETTINGS[@]}
|
||
|
}
|
||
|
|
||
|
if ! ethtool -h | grep -q coalesce; then
|
||
|
echo "SKIP: No --coalesce support in ethtool"
|
||
|
exit 4
|
||
|
fi
|
||
|
|
||
|
NSIM_NETDEV=$(make_netdev)
|
||
|
|
||
|
set -o pipefail
|
||
|
|
||
|
declare -A SETTINGS_MAP=(
|
||
|
["rx-frames-low"]="rx-frame-low"
|
||
|
["tx-frames-low"]="tx-frame-low"
|
||
|
["rx-frames-high"]="rx-frame-high"
|
||
|
["tx-frames-high"]="tx-frame-high"
|
||
|
["rx-usecs"]="rx-usecs"
|
||
|
["rx-frames"]="rx-frames"
|
||
|
["rx-usecs-irq"]="rx-usecs-irq"
|
||
|
["rx-frames-irq"]="rx-frames-irq"
|
||
|
["tx-usecs"]="tx-usecs"
|
||
|
["tx-frames"]="tx-frames"
|
||
|
["tx-usecs-irq"]="tx-usecs-irq"
|
||
|
["tx-frames-irq"]="tx-frames-irq"
|
||
|
["stats-block-usecs"]="stats-block-usecs"
|
||
|
["pkt-rate-low"]="pkt-rate-low"
|
||
|
["rx-usecs-low"]="rx-usecs-low"
|
||
|
["tx-usecs-low"]="tx-usecs-low"
|
||
|
["pkt-rate-high"]="pkt-rate-high"
|
||
|
["rx-usecs-high"]="rx-usecs-high"
|
||
|
["tx-usecs-high"]="tx-usecs-high"
|
||
|
["sample-interval"]="sample-interval"
|
||
|
)
|
||
|
|
||
|
declare -A CURRENT_SETTINGS=(
|
||
|
["rx-frames-low"]=""
|
||
|
["tx-frames-low"]=""
|
||
|
["rx-frames-high"]=""
|
||
|
["tx-frames-high"]=""
|
||
|
["rx-usecs"]=""
|
||
|
["rx-frames"]=""
|
||
|
["rx-usecs-irq"]=""
|
||
|
["rx-frames-irq"]=""
|
||
|
["tx-usecs"]=""
|
||
|
["tx-frames"]=""
|
||
|
["tx-usecs-irq"]=""
|
||
|
["tx-frames-irq"]=""
|
||
|
["stats-block-usecs"]=""
|
||
|
["pkt-rate-low"]=""
|
||
|
["rx-usecs-low"]=""
|
||
|
["tx-usecs-low"]=""
|
||
|
["pkt-rate-high"]=""
|
||
|
["rx-usecs-high"]=""
|
||
|
["tx-usecs-high"]=""
|
||
|
["sample-interval"]=""
|
||
|
)
|
||
|
|
||
|
declare -A EXPECTED_SETTINGS=(
|
||
|
["rx-frames-low"]=""
|
||
|
["tx-frames-low"]=""
|
||
|
["rx-frames-high"]=""
|
||
|
["tx-frames-high"]=""
|
||
|
["rx-usecs"]=""
|
||
|
["rx-frames"]=""
|
||
|
["rx-usecs-irq"]=""
|
||
|
["rx-frames-irq"]=""
|
||
|
["tx-usecs"]=""
|
||
|
["tx-frames"]=""
|
||
|
["tx-usecs-irq"]=""
|
||
|
["tx-frames-irq"]=""
|
||
|
["stats-block-usecs"]=""
|
||
|
["pkt-rate-low"]=""
|
||
|
["rx-usecs-low"]=""
|
||
|
["tx-usecs-low"]=""
|
||
|
["pkt-rate-high"]=""
|
||
|
["rx-usecs-high"]=""
|
||
|
["tx-usecs-high"]=""
|
||
|
["sample-interval"]=""
|
||
|
)
|
||
|
|
||
|
# populate the expected settings map
|
||
|
for key in ${!SETTINGS_MAP[@]}; do
|
||
|
EXPECTED_SETTINGS[$key]=$(get_value $key)
|
||
|
done
|
||
|
|
||
|
# test
|
||
|
for key in ${!SETTINGS_MAP[@]}; do
|
||
|
value=$((RANDOM % $((2**32-1))))
|
||
|
|
||
|
ethtool -C $NSIM_NETDEV "$key" "$value"
|
||
|
|
||
|
EXPECTED_SETTINGS[$key]="$value"
|
||
|
expected=${EXPECTED_SETTINGS[@]}
|
||
|
current=$(update_current_settings)
|
||
|
|
||
|
check $? "$current" "$expected"
|
||
|
set +x
|
||
|
done
|
||
|
|
||
|
# bool settings which ethtool displays on the same line
|
||
|
ethtool -C $NSIM_NETDEV adaptive-rx on
|
||
|
s=$(ethtool -c $NSIM_NETDEV | grep -q "Adaptive RX: on TX: off")
|
||
|
check $? "$s" ""
|
||
|
|
||
|
ethtool -C $NSIM_NETDEV adaptive-tx on
|
||
|
s=$(ethtool -c $NSIM_NETDEV | grep -q "Adaptive RX: on TX: on")
|
||
|
check $? "$s" ""
|
||
|
|
||
|
if [ $num_errors -eq 0 ]; then
|
||
|
echo "PASSED all $((num_passes)) checks"
|
||
|
exit 0
|
||
|
else
|
||
|
echo "FAILED $num_errors/$((num_errors+num_passes)) checks"
|
||
|
exit 1
|
||
|
fi
|