0001
0002
0003
0004 source ethtool-common.sh
0005
0006 function get_value {
0007 local query="${SETTINGS_MAP[$1]}"
0008
0009 echo $(ethtool -g $NSIM_NETDEV | \
0010 tail -n +$CURR_SETT_LINE | \
0011 awk -F':' -v pattern="$query:" '$0 ~ pattern {gsub(/[\t ]/, "", $2); print $2}')
0012 }
0013
0014 function update_current_settings {
0015 for key in ${!SETTINGS_MAP[@]}; do
0016 CURRENT_SETTINGS[$key]=$(get_value $key)
0017 done
0018 echo ${CURRENT_SETTINGS[@]}
0019 }
0020
0021 if ! ethtool -h | grep -q set-ring >/dev/null; then
0022 echo "SKIP: No --set-ring support in ethtool"
0023 exit 4
0024 fi
0025
0026 NSIM_NETDEV=$(make_netdev)
0027
0028 set -o pipefail
0029
0030 declare -A SETTINGS_MAP=(
0031 ["rx"]="RX"
0032 ["rx-mini"]="RX Mini"
0033 ["rx-jumbo"]="RX Jumbo"
0034 ["tx"]="TX"
0035 )
0036
0037 declare -A EXPECTED_SETTINGS=(
0038 ["rx"]=""
0039 ["rx-mini"]=""
0040 ["rx-jumbo"]=""
0041 ["tx"]=""
0042 )
0043
0044 declare -A CURRENT_SETTINGS=(
0045 ["rx"]=""
0046 ["rx-mini"]=""
0047 ["rx-jumbo"]=""
0048 ["tx"]=""
0049 )
0050
0051 MAX_VALUE=$((RANDOM % $((2**32-1))))
0052 RING_MAX_LIST=$(ls $NSIM_DEV_DFS/ethtool/ring/)
0053
0054 for ring_max_entry in $RING_MAX_LIST; do
0055 echo $MAX_VALUE > $NSIM_DEV_DFS/ethtool/ring/$ring_max_entry
0056 done
0057
0058 CURR_SETT_LINE=$(ethtool -g $NSIM_NETDEV | grep -i -m1 -n 'Current hardware settings' | cut -f1 -d:)
0059
0060
0061 for key in ${!SETTINGS_MAP[@]}; do
0062 EXPECTED_SETTINGS[$key]=$(get_value $key)
0063 done
0064
0065
0066 for key in ${!SETTINGS_MAP[@]}; do
0067 value=$((RANDOM % $MAX_VALUE))
0068
0069 ethtool -G $NSIM_NETDEV "$key" "$value"
0070
0071 EXPECTED_SETTINGS[$key]="$value"
0072 expected=${EXPECTED_SETTINGS[@]}
0073 current=$(update_current_settings)
0074
0075 check $? "$current" "$expected"
0076 set +x
0077 done
0078
0079 if [ $num_errors -eq 0 ]; then
0080 echo "PASSED all $((num_passes)) checks"
0081 exit 0
0082 else
0083 echo "FAILED $num_errors/$((num_errors+num_passes)) checks"
0084 exit 1
0085 fi