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