selftests: mlxsw: RED: Test offload of trapping on RED qevents
authorPetr Machata <petrm@mellanox.com>
Mon, 3 Aug 2020 16:11:41 +0000 (19:11 +0300)
committerDavid S. Miller <davem@davemloft.net>
Tue, 4 Aug 2020 01:06:46 +0000 (18:06 -0700)
Add a selftest for RED early_drop and mark qevents when a trap action is
attached at the associated block.

Signed-off-by: Petr Machata <petrm@mellanox.com>
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
tools/testing/selftests/drivers/net/mlxsw/sch_red_core.sh
tools/testing/selftests/drivers/net/mlxsw/sch_red_ets.sh

index 45042105ead7654ad6aae68b7316f47afadda663..517297a14ecfec2794e545a41d71f9f9cda9f8c7 100644 (file)
@@ -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"
+}
index c8968b041beafd0481164e8cf61e293b2c3d6a63..3f007c5f8361cea814b88b79094316d16bf70e2b 100755 (executable)
@@ -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