1#!/bin/bash 2# SPDX-License-Identifier: GPL-2.0-only 3 4source ethtool-common.sh 5 6function get_value { 7 local query="${SETTINGS_MAP[$1]}" 8 9 echo $(ethtool -c $NSIM_NETDEV | \ 10 awk -F':' -v pattern="$query:" '$0 ~ pattern {gsub(/[ \t]/, "", $2); print $2}') 11} 12 13function update_current_settings { 14 for key in ${!SETTINGS_MAP[@]}; do 15 CURRENT_SETTINGS[$key]=$(get_value $key) 16 done 17 echo ${CURRENT_SETTINGS[@]} 18} 19 20if ! ethtool -h | grep -q coalesce; then 21 echo "SKIP: No --coalesce support in ethtool" 22 exit 4 23fi 24 25NSIM_NETDEV=$(make_netdev) 26 27set -o pipefail 28 29declare -A SETTINGS_MAP=( 30 ["rx-frames-low"]="rx-frame-low" 31 ["tx-frames-low"]="tx-frame-low" 32 ["rx-frames-high"]="rx-frame-high" 33 ["tx-frames-high"]="tx-frame-high" 34 ["rx-usecs"]="rx-usecs" 35 ["rx-frames"]="rx-frames" 36 ["rx-usecs-irq"]="rx-usecs-irq" 37 ["rx-frames-irq"]="rx-frames-irq" 38 ["tx-usecs"]="tx-usecs" 39 ["tx-frames"]="tx-frames" 40 ["tx-usecs-irq"]="tx-usecs-irq" 41 ["tx-frames-irq"]="tx-frames-irq" 42 ["stats-block-usecs"]="stats-block-usecs" 43 ["pkt-rate-low"]="pkt-rate-low" 44 ["rx-usecs-low"]="rx-usecs-low" 45 ["tx-usecs-low"]="tx-usecs-low" 46 ["pkt-rate-high"]="pkt-rate-high" 47 ["rx-usecs-high"]="rx-usecs-high" 48 ["tx-usecs-high"]="tx-usecs-high" 49 ["sample-interval"]="sample-interval" 50) 51 52declare -A CURRENT_SETTINGS=( 53 ["rx-frames-low"]="" 54 ["tx-frames-low"]="" 55 ["rx-frames-high"]="" 56 ["tx-frames-high"]="" 57 ["rx-usecs"]="" 58 ["rx-frames"]="" 59 ["rx-usecs-irq"]="" 60 ["rx-frames-irq"]="" 61 ["tx-usecs"]="" 62 ["tx-frames"]="" 63 ["tx-usecs-irq"]="" 64 ["tx-frames-irq"]="" 65 ["stats-block-usecs"]="" 66 ["pkt-rate-low"]="" 67 ["rx-usecs-low"]="" 68 ["tx-usecs-low"]="" 69 ["pkt-rate-high"]="" 70 ["rx-usecs-high"]="" 71 ["tx-usecs-high"]="" 72 ["sample-interval"]="" 73) 74 75declare -A EXPECTED_SETTINGS=( 76 ["rx-frames-low"]="" 77 ["tx-frames-low"]="" 78 ["rx-frames-high"]="" 79 ["tx-frames-high"]="" 80 ["rx-usecs"]="" 81 ["rx-frames"]="" 82 ["rx-usecs-irq"]="" 83 ["rx-frames-irq"]="" 84 ["tx-usecs"]="" 85 ["tx-frames"]="" 86 ["tx-usecs-irq"]="" 87 ["tx-frames-irq"]="" 88 ["stats-block-usecs"]="" 89 ["pkt-rate-low"]="" 90 ["rx-usecs-low"]="" 91 ["tx-usecs-low"]="" 92 ["pkt-rate-high"]="" 93 ["rx-usecs-high"]="" 94 ["tx-usecs-high"]="" 95 ["sample-interval"]="" 96) 97 98# populate the expected settings map 99for key in ${!SETTINGS_MAP[@]}; do 100 EXPECTED_SETTINGS[$key]=$(get_value $key) 101done 102 103# test 104for key in ${!SETTINGS_MAP[@]}; do 105 value=$((RANDOM % $((2**32-1)))) 106 107 ethtool -C $NSIM_NETDEV "$key" "$value" 108 109 EXPECTED_SETTINGS[$key]="$value" 110 expected=${EXPECTED_SETTINGS[@]} 111 current=$(update_current_settings) 112 113 check $? "$current" "$expected" 114 set +x 115done 116 117# bool settings which ethtool displays on the same line 118ethtool -C $NSIM_NETDEV adaptive-rx on 119s=$(ethtool -c $NSIM_NETDEV | grep -q "Adaptive RX: on TX: off") 120check $? "$s" "" 121 122ethtool -C $NSIM_NETDEV adaptive-tx on 123s=$(ethtool -c $NSIM_NETDEV | grep -q "Adaptive RX: on TX: on") 124check $? "$s" "" 125 126if [ $num_errors -eq 0 ]; then 127 echo "PASSED all $((num_passes)) checks" 128 exit 0 129else 130 echo "FAILED $num_errors/$((num_errors+num_passes)) checks" 131 exit 1 132fi 133