| #!/bin/bash |
| # SPDX-License-Identifier: GPL-2.0-only |
| |
| source ethtool-common.sh |
| |
| set -o pipefail |
| |
| n_children() { |
| n=$(tc qdisc show dev $NDEV | grep '^qdisc' | wc -l) |
| echo $((n - 1)) |
| } |
| |
| tcq() { |
| tc qdisc $1 dev $NDEV ${@:2} |
| } |
| |
| n_child_assert() { |
| n=$(n_children) |
| if [ $n -ne $1 ]; then |
| echo "ERROR ($root): ${@:2}, expected $1 have $n" |
| ((num_errors++)) |
| else |
| ((num_passes++)) |
| fi |
| } |
| |
| |
| for root in mq mqprio; do |
| NDEV=$(make_netdev 1 4) |
| |
| opts= |
| [ $root == "mqprio" ] && opts='hw 0 num_tc 1 map 0 0 0 0 queues 1@0' |
| |
| tcq add root handle 100: $root $opts |
| n_child_assert 4 'Init' |
| |
| # All defaults |
| |
| for n in 3 2 1 2 3 4 1 4; do |
| ethtool -L $NDEV combined $n |
| n_child_assert $n "Change queues to $n while down" |
| done |
| |
| ip link set dev $NDEV up |
| |
| for n in 3 2 1 2 3 4 1 4; do |
| ethtool -L $NDEV combined $n |
| n_child_assert $n "Change queues to $n while up" |
| done |
| |
| # One real one |
| tcq replace parent 100:4 handle 204: pfifo_fast |
| n_child_assert 4 "One real queue" |
| |
| ethtool -L $NDEV combined 1 |
| n_child_assert 2 "One real queue, one default" |
| |
| ethtool -L $NDEV combined 4 |
| n_child_assert 4 "One real queue, rest default" |
| |
| # Graft some |
| tcq replace parent 100:1 handle 204: |
| n_child_assert 3 "Grafted" |
| |
| ethtool -L $NDEV combined 1 |
| n_child_assert 1 "Grafted, one" |
| |
| cleanup_nsim |
| done |
| |
| if [ $num_errors -eq 0 ]; then |
| echo "PASSED all $((num_passes)) checks" |
| exit 0 |
| else |
| echo "FAILED $num_errors/$((num_errors+num_passes)) checks" |
| exit 1 |
| fi |