ethtool-fec.sh 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. #!/bin/bash
  2. # SPDX-License-Identifier: GPL-2.0-only
  3. source ethtool-common.sh
  4. NSIM_NETDEV=$(make_netdev)
  5. [ a$ETHTOOL == a ] && ETHTOOL=ethtool
  6. set -o pipefail
  7. # Since commit 2b3ddcb35357 ("ethtool: fec: Change the prompt ...")
  8. # in ethtool CLI the Configured lines start with Supported/Configured.
  9. configured=$($ETHTOOL --show-fec $NSIM_NETDEV | tail -2 | head -1 | cut -d' ' -f1)
  10. # netdevsim starts out with None/None
  11. s=$($ETHTOOL --show-fec $NSIM_NETDEV | tail -2)
  12. check $? "$s" "$configured FEC encodings: None
  13. Active FEC encoding: None"
  14. # Test Auto
  15. $ETHTOOL --set-fec $NSIM_NETDEV encoding auto
  16. check $?
  17. s=$($ETHTOOL --show-fec $NSIM_NETDEV | tail -2)
  18. check $? "$s" "$configured FEC encodings: Auto
  19. Active FEC encoding: Off"
  20. # Test case in-sensitivity
  21. for o in off Off OFF; do
  22. $ETHTOOL --set-fec $NSIM_NETDEV encoding $o
  23. check $?
  24. s=$($ETHTOOL --show-fec $NSIM_NETDEV | tail -2)
  25. check $? "$s" "$configured FEC encodings: Off
  26. Active FEC encoding: Off"
  27. done
  28. for o in BaseR baser BAser; do
  29. $ETHTOOL --set-fec $NSIM_NETDEV encoding $o
  30. check $?
  31. s=$($ETHTOOL --show-fec $NSIM_NETDEV | tail -2)
  32. check $? "$s" "$configured FEC encodings: BaseR
  33. Active FEC encoding: BaseR"
  34. done
  35. for o in llrs rs; do
  36. $ETHTOOL --set-fec $NSIM_NETDEV encoding $o
  37. check $?
  38. s=$($ETHTOOL --show-fec $NSIM_NETDEV | tail -2)
  39. check $? "$s" "$configured FEC encodings: ${o^^}
  40. Active FEC encoding: ${o^^}"
  41. done
  42. # Test multiple bits
  43. $ETHTOOL --set-fec $NSIM_NETDEV encoding rs llrs
  44. check $?
  45. s=$($ETHTOOL --show-fec $NSIM_NETDEV | tail -2)
  46. check $? "$s" "$configured FEC encodings: RS LLRS
  47. Active FEC encoding: LLRS"
  48. $ETHTOOL --set-fec $NSIM_NETDEV encoding rs off auto
  49. check $?
  50. s=$($ETHTOOL --show-fec $NSIM_NETDEV | tail -2)
  51. check $? "$s" "$configured FEC encodings: Auto Off RS
  52. Active FEC encoding: RS"
  53. # Make sure other link modes are rejected
  54. $ETHTOOL --set-fec $NSIM_NETDEV encoding FIBRE 2>/dev/null
  55. check $? '' '' 1
  56. $ETHTOOL --set-fec $NSIM_NETDEV encoding bla-bla-bla 2>/dev/null
  57. check $? '' '' 1
  58. # Try JSON
  59. $ETHTOOL --json --show-fec $NSIM_NETDEV | jq empty >>/dev/null 2>&1
  60. if [ $? -eq 0 ]; then
  61. $ETHTOOL --set-fec $NSIM_NETDEV encoding auto
  62. check $?
  63. s=$($ETHTOOL --json --show-fec $NSIM_NETDEV | jq '.[].config[]')
  64. check $? "$s" '"Auto"'
  65. s=$($ETHTOOL --json --show-fec $NSIM_NETDEV | jq '.[].active[]')
  66. check $? "$s" '"Off"'
  67. $ETHTOOL --set-fec $NSIM_NETDEV encoding auto RS
  68. check $?
  69. s=$($ETHTOOL --json --show-fec $NSIM_NETDEV | jq '.[].config[]')
  70. check $? "$s" '"Auto"
  71. "RS"'
  72. s=$($ETHTOOL --json --show-fec $NSIM_NETDEV | jq '.[].active[]')
  73. check $? "$s" '"RS"'
  74. fi
  75. # Test error injection
  76. echo 11 > $NSIM_DEV_DFS/ethtool/get_err
  77. $ETHTOOL --show-fec $NSIM_NETDEV >>/dev/null 2>&1
  78. check $? '' '' 1
  79. echo 0 > $NSIM_DEV_DFS/ethtool/get_err
  80. echo 11 > $NSIM_DEV_DFS/ethtool/set_err
  81. $ETHTOOL --show-fec $NSIM_NETDEV >>/dev/null 2>&1
  82. check $?
  83. $ETHTOOL --set-fec $NSIM_NETDEV encoding RS 2>/dev/null
  84. check $? '' '' 1
  85. if [ $num_errors -eq 0 ]; then
  86. echo "PASSED all $((num_passes)) checks"
  87. exit 0
  88. else
  89. echo "FAILED $num_errors/$((num_errors+num_passes)) checks"
  90. exit 1
  91. fi