| #!/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 |