selftests: router_mpath_nh: Test 16-bit next hop weights
authorPetr Machata <petrm@nvidia.com>
Wed, 7 Aug 2024 14:13:49 +0000 (16:13 +0200)
committerJakub Kicinski <kuba@kernel.org>
Tue, 13 Aug 2024 00:50:34 +0000 (17:50 -0700)
Add tests that exercise full 16 bits of NH weight.

To test the 255:65535, it is necessary to run more packets than for the
other tests. On a debug kernel, the test can take up to a minute, therefore
avoid the test when KSFT_MACHINE_SLOW.

Signed-off-by: Petr Machata <petrm@nvidia.com>
Reviewed-by: Ido Schimmel <idosch@nvidia.com>
Reviewed-by: David Ahern <dsahern@kernel.org>
Link: https://patch.msgid.link/c0c257c00ad30b07afc3fa5e2afd135925405544.1723036486.git.petrm@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
tools/testing/selftests/net/forwarding/lib.sh
tools/testing/selftests/net/forwarding/router_mpath_nh.sh
tools/testing/selftests/net/forwarding/router_mpath_nh_lib.sh

index ff96bb7..cb0fcd6 100644 (file)
@@ -509,6 +509,13 @@ xfail_on_slow()
        fi
 }
 
+omit_on_slow()
+{
+       if [[ $KSFT_MACHINE_SLOW != yes ]]; then
+               "$@"
+       fi
+}
+
 xfail_on_veth()
 {
        local dev=$1; shift
index c5a30f8..a7d8399 100755 (executable)
@@ -40,6 +40,7 @@ ALL_TESTS="
        ping_ipv4
        ping_ipv6
        multipath_test
+       multipath16_test
        ping_ipv4_blackhole
        ping_ipv6_blackhole
        nh_stats_test_v4
@@ -226,9 +227,11 @@ routing_nh_obj()
 
 multipath4_test()
 {
-       local desc="$1"
-       local weight_rp12=$2
-       local weight_rp13=$3
+       local desc=$1; shift
+       local weight_rp12=$1; shift
+       local weight_rp13=$1; shift
+       local ports=${1-sp=1024,dp=0-32768}; shift
+
        local t0_rp12 t0_rp13 t1_rp12 t1_rp13
        local packets_rp12 packets_rp13
 
@@ -242,7 +245,7 @@ multipath4_test()
        t0_rp13=$(link_stats_tx_packets_get $rp13)
 
        ip vrf exec vrf-h1 $MZ $h1 -q -p 64 -A 192.0.2.2 -B 198.51.100.2 \
-               -d $MZ_DELAY -t udp "sp=1024,dp=0-32768"
+               -d $MZ_DELAY -t udp "$ports"
        sleep 1
 
        t1_rp12=$(link_stats_tx_packets_get $rp12)
@@ -259,9 +262,11 @@ multipath4_test()
 
 multipath6_test()
 {
-       local desc="$1"
-       local weight_rp12=$2
-       local weight_rp13=$3
+       local desc=$1; shift
+       local weight_rp12=$1; shift
+       local weight_rp13=$1; shift
+       local ports=${1-sp=1024,dp=0-32768}; shift
+
        local t0_rp12 t0_rp13 t1_rp12 t1_rp13
        local packets_rp12 packets_rp13
 
@@ -276,7 +281,7 @@ multipath6_test()
        t0_rp13=$(link_stats_tx_packets_get $rp13)
 
        $MZ $h1 -6 -q -p 64 -A 2001:db8:1::2 -B 2001:db8:2::2 \
-               -d $MZ_DELAY -t udp "sp=1024,dp=0-32768"
+               -d $MZ_DELAY -t udp "$ports"
        sleep 1
 
        t1_rp12=$(link_stats_tx_packets_get $rp12)
@@ -315,6 +320,23 @@ multipath_test()
        multipath6_test "Weighted MP 11:45" 11 45
 }
 
+multipath16_test()
+{
+       check_nhgw16 104 || return
+
+       log_info "Running 16-bit IPv4 multipath tests"
+       multipath4_test "65535:65535" 65535 65535
+       multipath4_test "128:512" 128 512
+       omit_on_slow \
+               multipath4_test "255:65535" 255 65535 sp=1024-1026,dp=0-65535
+
+       log_info "Running 16-bit IPv6 multipath tests"
+       multipath6_test "65535:65535" 65535 65535
+       multipath6_test "128:512" 128 512
+       omit_on_slow \
+               multipath6_test "255:65535" 255 65535 sp=1024-1026,dp=0-65535
+}
+
 ping_ipv4_blackhole()
 {
        RET=0
index 2903294..507b285 100644 (file)
@@ -117,3 +117,16 @@ __nh_stats_test_v6()
                               $MZ -6 $h1 -A 2001:db8:1::2 -B 2001:db8:2::2
        sysctl_restore net.ipv6.fib_multipath_hash_policy
 }
+
+check_nhgw16()
+{
+       local nhid=$1; shift
+
+       ip nexthop replace id 9999 group "$nhid,65535" &>/dev/null
+       if (( $? )); then
+               log_test_skip "16-bit multipath tests" \
+                             "iproute2 or the kernel do not support 16-bit next hop weights"
+               return 1
+       fi
+       ip nexthop del id 9999 ||:
+}