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:
Petr Machata 2019-12-29 13:48:29 +02:00 committed by David S. Miller
parent 379a00dd21
commit c5341bcc33
2 changed files with 199 additions and 0 deletions

View 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

View file

@ -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