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