mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-04 18:09:57 +00:00
selftests: mlxsw: Add a self-test for port-default priority
Send non-IP traffic to a port and observe that it gets prioritized according to the lldptool app=$prio,1,0 rules. Signed-off-by: Petr Machata <petrm@mellanox.com> Reviewed-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: Ido Schimmel <idosch@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
379a00dd21
commit
c5341bcc33
2 changed files with 199 additions and 0 deletions
176
tools/testing/selftests/drivers/net/mlxsw/qos_defprio.sh
Executable file
176
tools/testing/selftests/drivers/net/mlxsw/qos_defprio.sh
Executable file
|
@ -0,0 +1,176 @@
|
|||
#!/bin/bash
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
# Test for port-default priority. Non-IP packets ingress $swp1 and are
|
||||
# prioritized according to the default priority specified at the port.
|
||||
# rx_octets_prio_* counters are used to verify the prioritization.
|
||||
#
|
||||
# +-----------------------+
|
||||
# | H1 |
|
||||
# | + $h1 |
|
||||
# | | 192.0.2.1/28 |
|
||||
# +----|------------------+
|
||||
# |
|
||||
# +----|------------------+
|
||||
# | SW | |
|
||||
# | + $swp1 |
|
||||
# | 192.0.2.2/28 |
|
||||
# | APP=<prio>,1,0 |
|
||||
# +-----------------------+
|
||||
|
||||
ALL_TESTS="
|
||||
ping_ipv4
|
||||
test_defprio
|
||||
"
|
||||
|
||||
lib_dir=$(dirname $0)/../../../net/forwarding
|
||||
|
||||
NUM_NETIFS=2
|
||||
: ${HIT_TIMEOUT:=1000} # ms
|
||||
source $lib_dir/lib.sh
|
||||
|
||||
declare -a APP
|
||||
|
||||
defprio_install()
|
||||
{
|
||||
local dev=$1; shift
|
||||
local prio=$1; shift
|
||||
local app="app=$prio,1,0"
|
||||
|
||||
lldptool -T -i $dev -V APP $app >/dev/null
|
||||
lldpad_app_wait_set $dev
|
||||
APP[$prio]=$app
|
||||
}
|
||||
|
||||
defprio_uninstall()
|
||||
{
|
||||
local dev=$1; shift
|
||||
local prio=$1; shift
|
||||
local app=${APP[$prio]}
|
||||
|
||||
lldptool -T -i $dev -V APP -d $app >/dev/null
|
||||
lldpad_app_wait_del
|
||||
unset APP[$prio]
|
||||
}
|
||||
|
||||
defprio_flush()
|
||||
{
|
||||
local dev=$1; shift
|
||||
local prio
|
||||
|
||||
if ((${#APP[@]})); then
|
||||
lldptool -T -i $dev -V APP -d ${APP[@]} >/dev/null
|
||||
fi
|
||||
lldpad_app_wait_del
|
||||
APP=()
|
||||
}
|
||||
|
||||
h1_create()
|
||||
{
|
||||
simple_if_init $h1 192.0.2.1/28
|
||||
}
|
||||
|
||||
h1_destroy()
|
||||
{
|
||||
simple_if_fini $h1 192.0.2.1/28
|
||||
}
|
||||
|
||||
switch_create()
|
||||
{
|
||||
ip link set dev $swp1 up
|
||||
ip addr add dev $swp1 192.0.2.2/28
|
||||
}
|
||||
|
||||
switch_destroy()
|
||||
{
|
||||
defprio_flush $swp1
|
||||
ip addr del dev $swp1 192.0.2.2/28
|
||||
ip link set dev $swp1 down
|
||||
}
|
||||
|
||||
setup_prepare()
|
||||
{
|
||||
h1=${NETIFS[p1]}
|
||||
swp1=${NETIFS[p2]}
|
||||
|
||||
vrf_prepare
|
||||
|
||||
h1_create
|
||||
switch_create
|
||||
}
|
||||
|
||||
cleanup()
|
||||
{
|
||||
pre_cleanup
|
||||
|
||||
switch_destroy
|
||||
h1_destroy
|
||||
|
||||
vrf_cleanup
|
||||
}
|
||||
|
||||
ping_ipv4()
|
||||
{
|
||||
ping_test $h1 192.0.2.2
|
||||
}
|
||||
|
||||
wait_for_packets()
|
||||
{
|
||||
local t0=$1; shift
|
||||
local prio_observe=$1; shift
|
||||
|
||||
local t1=$(ethtool_stats_get $swp1 rx_frames_prio_$prio_observe)
|
||||
local delta=$((t1 - t0))
|
||||
echo $delta
|
||||
((delta >= 10))
|
||||
}
|
||||
|
||||
__test_defprio()
|
||||
{
|
||||
local prio_install=$1; shift
|
||||
local prio_observe=$1; shift
|
||||
local delta
|
||||
local key
|
||||
local i
|
||||
|
||||
RET=0
|
||||
|
||||
defprio_install $swp1 $prio_install
|
||||
|
||||
local t0=$(ethtool_stats_get $swp1 rx_frames_prio_$prio_observe)
|
||||
mausezahn -q $h1 -d 100m -c 10 -t arp reply
|
||||
delta=$(busywait "$HIT_TIMEOUT" wait_for_packets $t0 $prio_observe)
|
||||
|
||||
check_err $? "Default priority $prio_install/$prio_observe: Expected to capture 10 packets, got $delta."
|
||||
log_test "Default priority $prio_install/$prio_observe"
|
||||
|
||||
defprio_uninstall $swp1 $prio_install
|
||||
}
|
||||
|
||||
test_defprio()
|
||||
{
|
||||
local prio
|
||||
|
||||
for prio in {0..7}; do
|
||||
__test_defprio $prio $prio
|
||||
done
|
||||
|
||||
defprio_install $swp1 3
|
||||
__test_defprio 0 3
|
||||
__test_defprio 1 3
|
||||
__test_defprio 2 3
|
||||
__test_defprio 4 4
|
||||
__test_defprio 5 5
|
||||
__test_defprio 6 6
|
||||
__test_defprio 7 7
|
||||
defprio_uninstall $swp1 3
|
||||
}
|
||||
|
||||
trap cleanup EXIT
|
||||
|
||||
setup_prepare
|
||||
setup_wait
|
||||
|
||||
tests_run
|
||||
|
||||
exit $EXIT_STATUS
|
|
@ -225,6 +225,29 @@ log_info()
|
|||
echo "INFO: $msg"
|
||||
}
|
||||
|
||||
busywait()
|
||||
{
|
||||
local timeout=$1; shift
|
||||
|
||||
local start_time="$(date -u +%s%3N)"
|
||||
while true
|
||||
do
|
||||
local out
|
||||
out=$("$@")
|
||||
local ret=$?
|
||||
if ((!ret)); then
|
||||
echo -n "$out"
|
||||
return 0
|
||||
fi
|
||||
|
||||
local current_time="$(date -u +%s%3N)"
|
||||
if ((current_time - start_time > timeout)); then
|
||||
echo -n "$out"
|
||||
return 1
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
setup_wait_dev()
|
||||
{
|
||||
local dev=$1; shift
|
||||
|
|
Loading…
Reference in a new issue