tc-mq-visibility.sh 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #!/bin/bash
  2. # SPDX-License-Identifier: GPL-2.0-only
  3. source ethtool-common.sh
  4. set -o pipefail
  5. n_children() {
  6. n=$(tc qdisc show dev $NDEV | grep '^qdisc' | wc -l)
  7. echo $((n - 1))
  8. }
  9. tcq() {
  10. tc qdisc $1 dev $NDEV ${@:2}
  11. }
  12. n_child_assert() {
  13. n=$(n_children)
  14. if [ $n -ne $1 ]; then
  15. echo "ERROR ($root): ${@:2}, expected $1 have $n"
  16. ((num_errors++))
  17. else
  18. ((num_passes++))
  19. fi
  20. }
  21. for root in mq mqprio; do
  22. NDEV=$(make_netdev 1 4)
  23. opts=
  24. [ $root == "mqprio" ] && opts='hw 0 num_tc 1 map 0 0 0 0 queues 1@0'
  25. tcq add root handle 100: $root $opts
  26. n_child_assert 4 'Init'
  27. # All defaults
  28. for n in 3 2 1 2 3 4 1 4; do
  29. ethtool -L $NDEV combined $n
  30. n_child_assert $n "Change queues to $n while down"
  31. done
  32. ip link set dev $NDEV up
  33. for n in 3 2 1 2 3 4 1 4; do
  34. ethtool -L $NDEV combined $n
  35. n_child_assert $n "Change queues to $n while up"
  36. done
  37. # One real one
  38. tcq replace parent 100:4 handle 204: pfifo_fast
  39. n_child_assert 4 "One real queue"
  40. ethtool -L $NDEV combined 1
  41. n_child_assert 2 "One real queue, one default"
  42. ethtool -L $NDEV combined 4
  43. n_child_assert 4 "One real queue, rest default"
  44. # Graft some
  45. tcq replace parent 100:1 handle 204:
  46. n_child_assert 3 "Grafted"
  47. ethtool -L $NDEV combined 1
  48. n_child_assert 1 "Grafted, one"
  49. cleanup_nsim
  50. done
  51. if [ $num_errors -eq 0 ]; then
  52. echo "PASSED all $((num_passes)) checks"
  53. exit 0
  54. else
  55. echo "FAILED $num_errors/$((num_errors+num_passes)) checks"
  56. exit 1
  57. fi