#!/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