]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
selftests: mlxsw: sharedbuffer: Ensure no extra packets are counted
authorDanielle Ratson <danieller@nvidia.com>
Thu, 5 Dec 2024 16:36:01 +0000 (17:36 +0100)
committerJakub Kicinski <kuba@kernel.org>
Sat, 7 Dec 2024 01:37:37 +0000 (17:37 -0800)
The test assumes that the packet it is sending is the only packet being
passed to the device.

However, it is not the case and so other packets are filling the buffers
as well. Therefore, the test sometimes fails because it is reading a
maximum occupancy that is larger than expected.

Add egress filters on $h1 and $h2 that will guarantee the above.

Fixes: a865ad999603 ("selftests: mlxsw: Add shared buffer traffic test")
Signed-off-by: Danielle Ratson <danieller@nvidia.com>
Reviewed-by: Ido Schimmel <idosch@nvidia.com>
Signed-off-by: Ido Schimmel <idosch@nvidia.com>
Signed-off-by: Petr Machata <petrm@nvidia.com>
Link: https://patch.msgid.link/64c28bc9b1cc1d78c4a73feda7cedbe9526ccf8b.1733414773.git.petrm@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
tools/testing/selftests/drivers/net/mlxsw/sharedbuffer.sh

index 21bebc5726f6fcbfb7053e87b3816ce879024d0a..c068e6c2a580eaae5e6071fe2c1552e84e85dbdf 100755 (executable)
@@ -22,20 +22,34 @@ SB_ITC=0
 h1_create()
 {
        simple_if_init $h1 192.0.1.1/24
+       tc qdisc add dev $h1 clsact
+
+       # Add egress filter on $h1 that will guarantee that the packet sent,
+       # will be the only packet being passed to the device.
+       tc filter add dev $h1 egress pref 2 handle 102 matchall action drop
 }
 
 h1_destroy()
 {
+       tc filter del dev $h1 egress pref 2 handle 102 matchall action drop
+       tc qdisc del dev $h1 clsact
        simple_if_fini $h1 192.0.1.1/24
 }
 
 h2_create()
 {
        simple_if_init $h2 192.0.1.2/24
+       tc qdisc add dev $h2 clsact
+
+       # Add egress filter on $h2 that will guarantee that the packet sent,
+       # will be the only packet being passed to the device.
+       tc filter add dev $h2 egress pref 1 handle 101 matchall action drop
 }
 
 h2_destroy()
 {
+       tc filter del dev $h2 egress pref 1 handle 101 matchall action drop
+       tc qdisc del dev $h2 clsact
        simple_if_fini $h2 192.0.1.2/24
 }
 
@@ -101,6 +115,11 @@ port_pool_test()
        local exp_max_occ=$(devlink_cell_size_get)
        local max_occ
 
+       tc filter add dev $h1 egress protocol ip pref 1 handle 101 flower \
+               src_mac $h1mac dst_mac $h2mac \
+               src_ip 192.0.1.1 dst_ip 192.0.1.2 \
+               action pass
+
        devlink sb occupancy clearmax $DEVLINK_DEV
 
        $MZ $h1 -c 1 -p 10 -a $h1mac -b $h2mac -A 192.0.1.1 -B 192.0.1.2 \
@@ -117,6 +136,11 @@ port_pool_test()
        max_occ=$(sb_occ_pool_check $cpu_dl_port $SB_POOL_EGR_CPU $exp_max_occ)
        check_err $? "Expected ePool($SB_POOL_EGR_CPU) max occupancy to be $exp_max_occ, but got $max_occ"
        log_test "CPU port's egress pool"
+
+       tc filter del dev $h1 egress protocol ip pref 1 handle 101 flower \
+               src_mac $h1mac dst_mac $h2mac \
+               src_ip 192.0.1.1 dst_ip 192.0.1.2 \
+               action pass
 }
 
 port_tc_ip_test()
@@ -124,6 +148,11 @@ port_tc_ip_test()
        local exp_max_occ=$(devlink_cell_size_get)
        local max_occ
 
+       tc filter add dev $h1 egress protocol ip pref 1 handle 101 flower \
+               src_mac $h1mac dst_mac $h2mac \
+               src_ip 192.0.1.1 dst_ip 192.0.1.2 \
+               action pass
+
        devlink sb occupancy clearmax $DEVLINK_DEV
 
        $MZ $h1 -c 1 -p 10 -a $h1mac -b $h2mac -A 192.0.1.1 -B 192.0.1.2 \
@@ -140,6 +169,11 @@ port_tc_ip_test()
        max_occ=$(sb_occ_etc_check $cpu_dl_port $SB_ITC_CPU_IP $exp_max_occ)
        check_err $? "Expected egress TC($SB_ITC_CPU_IP) max occupancy to be $exp_max_occ, but got $max_occ"
        log_test "CPU port's egress TC - IP packet"
+
+       tc filter del dev $h1 egress protocol ip pref 1 handle 101 flower \
+               src_mac $h1mac dst_mac $h2mac \
+               src_ip 192.0.1.1 dst_ip 192.0.1.2 \
+               action pass
 }
 
 port_tc_arp_test()
@@ -147,6 +181,9 @@ port_tc_arp_test()
        local exp_max_occ=$(devlink_cell_size_get)
        local max_occ
 
+       tc filter add dev $h1 egress protocol arp pref 1 handle 101 flower \
+               src_mac $h1mac action pass
+
        devlink sb occupancy clearmax $DEVLINK_DEV
 
        $MZ $h1 -c 1 -p 10 -a $h1mac -A 192.0.1.1 -t arp -q
@@ -162,6 +199,9 @@ port_tc_arp_test()
        max_occ=$(sb_occ_etc_check $cpu_dl_port $SB_ITC_CPU_ARP $exp_max_occ)
        check_err $? "Expected egress TC($SB_ITC_IP2ME) max occupancy to be $exp_max_occ, but got $max_occ"
        log_test "CPU port's egress TC - ARP packet"
+
+       tc filter del dev $h1 egress protocol arp pref 1 handle 101 flower \
+               src_mac $h1mac action pass
 }
 
 setup_prepare()