selftests: add ring and coalesce selftests
Add scripts to test ring and coalesce settings of netdevsim. Signed-off-by: Antonio Cardace <acardace@redhat.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
9e48ee80ac
commit
fbb7a1f813
132
tools/testing/selftests/drivers/net/netdevsim/ethtool-coalesce.sh
Executable file
132
tools/testing/selftests/drivers/net/netdevsim/ethtool-coalesce.sh
Executable file
@ -0,0 +1,132 @@
|
||||
#!/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
|
85
tools/testing/selftests/drivers/net/netdevsim/ethtool-ring.sh
Executable file
85
tools/testing/selftests/drivers/net/netdevsim/ethtool-ring.sh
Executable file
@ -0,0 +1,85 @@
|
||||
#!/bin/bash
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
|
||||
source ethtool-common.sh
|
||||
|
||||
function get_value {
|
||||
local query="${SETTINGS_MAP[$1]}"
|
||||
|
||||
echo $(ethtool -g $NSIM_NETDEV | \
|
||||
tail -n +$CURR_SETT_LINE | \
|
||||
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 set-ring >/dev/null; then
|
||||
echo "SKIP: No --set-ring support in ethtool"
|
||||
exit 4
|
||||
fi
|
||||
|
||||
NSIM_NETDEV=$(make_netdev)
|
||||
|
||||
set -o pipefail
|
||||
|
||||
declare -A SETTINGS_MAP=(
|
||||
["rx"]="RX"
|
||||
["rx-mini"]="RX Mini"
|
||||
["rx-jumbo"]="RX Jumbo"
|
||||
["tx"]="TX"
|
||||
)
|
||||
|
||||
declare -A EXPECTED_SETTINGS=(
|
||||
["rx"]=""
|
||||
["rx-mini"]=""
|
||||
["rx-jumbo"]=""
|
||||
["tx"]=""
|
||||
)
|
||||
|
||||
declare -A CURRENT_SETTINGS=(
|
||||
["rx"]=""
|
||||
["rx-mini"]=""
|
||||
["rx-jumbo"]=""
|
||||
["tx"]=""
|
||||
)
|
||||
|
||||
MAX_VALUE=$((RANDOM % $((2**32-1))))
|
||||
RING_MAX_LIST=$(ls $NSIM_DEV_DFS/ethtool/ring/)
|
||||
|
||||
for ring_max_entry in $RING_MAX_LIST; do
|
||||
echo $MAX_VALUE > $NSIM_DEV_DFS/ethtool/ring/$ring_max_entry
|
||||
done
|
||||
|
||||
CURR_SETT_LINE=$(ethtool -g $NSIM_NETDEV | grep -i -m1 -n 'Current hardware settings' | cut -f1 -d:)
|
||||
|
||||
# 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 % $MAX_VALUE))
|
||||
|
||||
ethtool -G $NSIM_NETDEV "$key" "$value"
|
||||
|
||||
EXPECTED_SETTINGS[$key]="$value"
|
||||
expected=${EXPECTED_SETTINGS[@]}
|
||||
current=$(update_current_settings)
|
||||
|
||||
check $? "$current" "$expected"
|
||||
set +x
|
||||
done
|
||||
|
||||
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
|
Loading…
x
Reference in New Issue
Block a user