0001
0002
0003
0004 source ethtool-common.sh
0005
0006 set -o pipefail
0007
0008 n_children() {
0009 n=$(tc qdisc show dev $NDEV | grep '^qdisc' | wc -l)
0010 echo $((n - 1))
0011 }
0012
0013 tcq() {
0014 tc qdisc $1 dev $NDEV ${@:2}
0015 }
0016
0017 n_child_assert() {
0018 n=$(n_children)
0019 if [ $n -ne $1 ]; then
0020 echo "ERROR ($root): ${@:2}, expected $1 have $n"
0021 ((num_errors++))
0022 else
0023 ((num_passes++))
0024 fi
0025 }
0026
0027
0028 for root in mq mqprio; do
0029 NDEV=$(make_netdev 1 4)
0030
0031 opts=
0032 [ $root == "mqprio" ] && opts='hw 0 num_tc 1 map 0 0 0 0 queues 1@0'
0033
0034 tcq add root handle 100: $root $opts
0035 n_child_assert 4 'Init'
0036
0037
0038
0039 for n in 3 2 1 2 3 4 1 4; do
0040 ethtool -L $NDEV combined $n
0041 n_child_assert $n "Change queues to $n while down"
0042 done
0043
0044 ip link set dev $NDEV up
0045
0046 for n in 3 2 1 2 3 4 1 4; do
0047 ethtool -L $NDEV combined $n
0048 n_child_assert $n "Change queues to $n while up"
0049 done
0050
0051
0052 tcq replace parent 100:4 handle 204: pfifo_fast
0053 n_child_assert 4 "One real queue"
0054
0055 ethtool -L $NDEV combined 1
0056 n_child_assert 2 "One real queue, one default"
0057
0058 ethtool -L $NDEV combined 4
0059 n_child_assert 4 "One real queue, rest default"
0060
0061
0062 tcq replace parent 100:1 handle 204:
0063 n_child_assert 3 "Grafted"
0064
0065 ethtool -L $NDEV combined 1
0066 n_child_assert 1 "Grafted, one"
0067
0068 cleanup_nsim
0069 done
0070
0071 if [ $num_errors -eq 0 ]; then
0072 echo "PASSED all $((num_passes)) checks"
0073 exit 0
0074 else
0075 echo "FAILED $num_errors/$((num_errors+num_passes)) checks"
0076 exit 1
0077 fi