ethtool-ring.sh 1.8 KB

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