mirror of
https://github.com/torvalds/linux.git
synced 2026-04-24 09:35:52 -04:00
A number of mlxsw-specific QoS tests use manual QoS DCB management. As such, they need to make sure lldpad is not running, because it would override the configuration the test has applied using other tools. To that end, these selftests invoke the bail_on_lldpad() helper, which terminates the selftest if th lldpad is running. Some of these tests however first install the bash exit trap, which invokes a cleanup() at the test exit. If bail_on_lldpad() has terminated the script even before the setup part was run, the cleanup part will be very confused. Therefore make sure bail_on_lldpad() is invoked before the cleanup is registered. While there are still edge cases where the user terminates the script before the setup was fully done, this takes care of a common situation where the cleanup would be invoked in an inconsistent state. Signed-off-by: Petr Machata <petrm@nvidia.com> Signed-off-by: Ido Schimmel <idosch@nvidia.com> Signed-off-by: David S. Miller <davem@davemloft.net>
177 lines
3.0 KiB
Bash
Executable File
177 lines
3.0 KiB
Bash
Executable File
#!/bin/bash
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
|
|
ALL_TESTS="
|
|
ping_ipv4
|
|
ecn_test
|
|
ecn_test_perband
|
|
ecn_nodrop_test
|
|
red_test
|
|
mc_backlog_test
|
|
red_mirror_test
|
|
red_trap_test
|
|
ecn_mirror_test
|
|
"
|
|
: ${QDISC:=ets}
|
|
source sch_red_core.sh
|
|
|
|
# do_ecn_test first build 2/3 of the requested backlog and expects no marking,
|
|
# and then builds 3/2 of it and does expect marking. The values of $BACKLOG1 and
|
|
# $BACKLOG2 are far enough not to overlap, so that we can assume that if we do
|
|
# see (do not see) marking, it is actually due to the configuration of that one
|
|
# TC, and not due to configuration of the other TC leaking over.
|
|
BACKLOG1=200000
|
|
BACKLOG2=500000
|
|
|
|
install_root_qdisc()
|
|
{
|
|
tc qdisc add dev $swp3 root handle 10: $QDISC \
|
|
bands 8 priomap 7 6 5 4 3 2 1 0
|
|
}
|
|
|
|
install_qdisc_tc0()
|
|
{
|
|
local -a args=("$@")
|
|
|
|
tc qdisc add dev $swp3 parent 10:8 handle 108: red \
|
|
limit 1000000 min $BACKLOG1 max $((BACKLOG1 + 1)) \
|
|
probability 1.0 avpkt 8000 burst 38 "${args[@]}"
|
|
}
|
|
|
|
install_qdisc_tc1()
|
|
{
|
|
local -a args=("$@")
|
|
|
|
tc qdisc add dev $swp3 parent 10:7 handle 107: red \
|
|
limit 1000000 min $BACKLOG2 max $((BACKLOG2 + 1)) \
|
|
probability 1.0 avpkt 8000 burst 63 "${args[@]}"
|
|
}
|
|
|
|
install_qdisc()
|
|
{
|
|
install_root_qdisc
|
|
install_qdisc_tc0 "$@"
|
|
install_qdisc_tc1 "$@"
|
|
sleep 1
|
|
}
|
|
|
|
uninstall_qdisc_tc0()
|
|
{
|
|
tc qdisc del dev $swp3 parent 10:8
|
|
}
|
|
|
|
uninstall_qdisc_tc1()
|
|
{
|
|
tc qdisc del dev $swp3 parent 10:7
|
|
}
|
|
|
|
uninstall_root_qdisc()
|
|
{
|
|
tc qdisc del dev $swp3 root
|
|
}
|
|
|
|
uninstall_qdisc()
|
|
{
|
|
uninstall_qdisc_tc0
|
|
uninstall_qdisc_tc1
|
|
uninstall_root_qdisc
|
|
}
|
|
|
|
ecn_test()
|
|
{
|
|
install_qdisc ecn
|
|
|
|
do_ecn_test 10 $BACKLOG1
|
|
do_ecn_test 11 $BACKLOG2
|
|
|
|
uninstall_qdisc
|
|
}
|
|
|
|
ecn_test_perband()
|
|
{
|
|
install_qdisc ecn
|
|
|
|
do_ecn_test_perband 10 $BACKLOG1
|
|
do_ecn_test_perband 11 $BACKLOG2
|
|
|
|
uninstall_qdisc
|
|
}
|
|
|
|
ecn_nodrop_test()
|
|
{
|
|
install_qdisc ecn nodrop
|
|
|
|
do_ecn_nodrop_test 10 $BACKLOG1
|
|
do_ecn_nodrop_test 11 $BACKLOG2
|
|
|
|
uninstall_qdisc
|
|
}
|
|
|
|
red_test()
|
|
{
|
|
install_qdisc
|
|
|
|
# Make sure that we get the non-zero value if there is any.
|
|
local cur=$(busywait 1100 until_counter_is "> 0" \
|
|
qdisc_stats_get $swp3 10: .backlog)
|
|
(( cur == 0 ))
|
|
check_err $? "backlog of $cur observed on non-busy qdisc"
|
|
log_test "$QDISC backlog properly cleaned"
|
|
|
|
do_red_test 10 $BACKLOG1
|
|
do_red_test 11 $BACKLOG2
|
|
|
|
uninstall_qdisc
|
|
}
|
|
|
|
mc_backlog_test()
|
|
{
|
|
install_qdisc
|
|
|
|
# Note that the backlog numbers here do not correspond to RED
|
|
# configuration, but are arbitrary.
|
|
do_mc_backlog_test 10 $BACKLOG1
|
|
do_mc_backlog_test 11 $BACKLOG2
|
|
|
|
uninstall_qdisc
|
|
}
|
|
|
|
red_mirror_test()
|
|
{
|
|
install_qdisc qevent early_drop block 10
|
|
|
|
do_drop_mirror_test 10 $BACKLOG1 early_drop
|
|
do_drop_mirror_test 11 $BACKLOG2 early_drop
|
|
|
|
uninstall_qdisc
|
|
}
|
|
|
|
red_trap_test()
|
|
{
|
|
install_qdisc qevent early_drop block 10
|
|
|
|
do_drop_trap_test 10 $BACKLOG1 early_drop
|
|
do_drop_trap_test 11 $BACKLOG2 early_drop
|
|
|
|
uninstall_qdisc
|
|
}
|
|
|
|
ecn_mirror_test()
|
|
{
|
|
install_qdisc ecn qevent mark block 10
|
|
|
|
do_mark_mirror_test 10 $BACKLOG1
|
|
do_mark_mirror_test 11 $BACKLOG2
|
|
|
|
uninstall_qdisc
|
|
}
|
|
|
|
bail_on_lldpad
|
|
|
|
trap cleanup EXIT
|
|
setup_prepare
|
|
setup_wait
|
|
tests_run
|
|
|
|
exit $EXIT_STATUS
|