Commit 8fb6ac45 authored by Petr Machata's avatar Petr Machata Committed by David S. Miller
Browse files

selftests: mlxsw: RED: Test offload of trapping on RED qevents



Add a selftest for RED early_drop and mark qevents when a trap action is
attached at the associated block.

Signed-off-by: default avatarPetr Machata <petrm@mellanox.com>
Signed-off-by: default avatarIdo Schimmel <idosch@mellanox.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 54a92385
Loading
Loading
Loading
Loading
+29 −6
Original line number Diff line number Diff line
@@ -568,17 +568,12 @@ do_drop_test()
	busywait 1100 until_counter_is ">= $((base + 1))" $fetch_counter >/dev/null
	check_fail $? "Spurious packets observed without buffer pressure"

	qevent_rule_uninstall_$subtest

	# Push to the queue until it's at the limit. The configured limit is
	# rounded by the qdisc and then by the driver, so this is the best we
	# can do to get to the real limit of the system. Do this with the rules
	# uninstalled so that the inevitable drops don't get counted.
	# can do to get to the real limit of the system.
	build_backlog $vlan $((3 * limit / 2)) udp >/dev/null

	qevent_rule_install_$subtest
	base=$($fetch_counter)

	send_packets $vlan udp 11

	now=$(busywait 1100 until_counter_is ">= $((base + 10))" $fetch_counter)
@@ -631,3 +626,31 @@ do_drop_mirror_test()

	tc filter del dev $h2 ingress pref 1 handle 101 flower
}

qevent_rule_install_trap()
{
	tc filter add block 10 pref 1234 handle 102 matchall skip_sw \
	   action trap hw_stats disabled
}

qevent_rule_uninstall_trap()
{
	tc filter del block 10 pref 1234 handle 102 matchall
}

qevent_counter_fetch_trap()
{
	local trap_name=$1; shift

	devlink_trap_rx_packets_get "$trap_name"
}

do_drop_trap_test()
{
	local vlan=$1; shift
	local limit=$1; shift
	local trap_name=$1; shift

	do_drop_test "$vlan" "$limit" "$trap_name" trap \
		     "qevent_counter_fetch_trap $trap_name"
}
+11 −0
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@ ALL_TESTS="
	red_test
	mc_backlog_test
	red_mirror_test
	red_trap_test
"
: ${QDISC:=ets}
source sch_red_core.sh
@@ -94,6 +95,16 @@ red_mirror_test()
	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
}

trap cleanup EXIT

setup_prepare