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 -g $NSIM_NETDEV | \ 10 tail -n +$CURR_SETT_LINE | \ 11 awk -F':' -v pattern="$query:" '$0 ~ pattern {gsub(/[\t ]/, "", $2); print $2}') 12} 13 14function update_current_settings { 15 for key in ${!SETTINGS_MAP[@]}; do 16 CURRENT_SETTINGS[$key]=$(get_value $key) 17 done 18 echo ${CURRENT_SETTINGS[@]} 19} 20 21if ! ethtool -h | grep -q set-ring >/dev/null; then 22 echo "SKIP: No --set-ring support in ethtool" 23 exit 4 24fi 25 26NSIM_NETDEV=$(make_netdev) 27 28set -o pipefail 29 30declare -A SETTINGS_MAP=( 31 ["rx"]="RX" 32 ["rx-mini"]="RX Mini" 33 ["rx-jumbo"]="RX Jumbo" 34 ["tx"]="TX" 35) 36 37declare -A EXPECTED_SETTINGS=( 38 ["rx"]="" 39 ["rx-mini"]="" 40 ["rx-jumbo"]="" 41 ["tx"]="" 42) 43 44declare -A CURRENT_SETTINGS=( 45 ["rx"]="" 46 ["rx-mini"]="" 47 ["rx-jumbo"]="" 48 ["tx"]="" 49) 50 51MAX_VALUE=$((RANDOM % $((2**32-1)))) 52RING_MAX_LIST=$(ls $NSIM_DEV_DFS/ethtool/ring/) 53 54for ring_max_entry in $RING_MAX_LIST; do 55 echo $MAX_VALUE > $NSIM_DEV_DFS/ethtool/ring/$ring_max_entry 56done 57 58CURR_SETT_LINE=$(ethtool -g $NSIM_NETDEV | grep -i -m1 -n 'Current hardware settings' | cut -f1 -d:) 59 60# populate the expected settings map 61for key in ${!SETTINGS_MAP[@]}; do 62 EXPECTED_SETTINGS[$key]=$(get_value $key) 63done 64 65# test 66for key in ${!SETTINGS_MAP[@]}; do 67 value=$((RANDOM % $MAX_VALUE)) 68 69 ethtool -G $NSIM_NETDEV "$key" "$value" 70 71 EXPECTED_SETTINGS[$key]="$value" 72 expected=${EXPECTED_SETTINGS[@]} 73 current=$(update_current_settings) 74 75 check $? "$current" "$expected" 76 set +x 77done 78 79if [ $num_errors -eq 0 ]; then 80 echo "PASSED all $((num_passes)) checks" 81 exit 0 82else 83 echo "FAILED $num_errors/$((num_errors+num_passes)) checks" 84 exit 1 85fi 86