Back to home page

OSCL-LXR

 
 

    


0001 #!/bin/bash
0002 # SPDX-License-Identifier: GPL-2.0-only
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 # populate the expected settings map
0061 for key in ${!SETTINGS_MAP[@]}; do
0062     EXPECTED_SETTINGS[$key]=$(get_value $key)
0063 done
0064 
0065 # test
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