]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
selftests: Add torture tests to nexthop tests
authorDavid Ahern <dsahern@kernel.org>
Thu, 28 May 2020 00:03:44 +0000 (18:03 -0600)
committerDavid S. Miller <davem@davemloft.net>
Thu, 28 May 2020 18:00:31 +0000 (11:00 -0700)
Add Nik's torture tests as a new set to stress the replace and cleanup
paths.

Torture test created by Nikolay Aleksandrov and then I adapted to
selftest and added IPv6 version.

Signed-off-by: David Ahern <dsahern@kernel.org>
Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
tools/testing/selftests/net/fib_nexthops.sh

index 1e2f61262e4ee66808c71a19acbd1a869125b2b2..dee567f7576abdff8bc83112ec5131452fff6727 100755 (executable)
@@ -19,8 +19,8 @@ ret=0
 ksft_skip=4
 
 # all tests in this script. Can be overridden with -t option
-IPV4_TESTS="ipv4_fcnal ipv4_grp_fcnal ipv4_withv6_fcnal ipv4_fcnal_runtime ipv4_large_grp ipv4_compat_mode ipv4_fdb_grp_fcnal"
-IPV6_TESTS="ipv6_fcnal ipv6_grp_fcnal ipv6_fcnal_runtime ipv6_large_grp ipv6_compat_mode ipv6_fdb_grp_fcnal"
+IPV4_TESTS="ipv4_fcnal ipv4_grp_fcnal ipv4_withv6_fcnal ipv4_fcnal_runtime ipv4_large_grp ipv4_compat_mode ipv4_fdb_grp_fcnal ipv4_torture"
+IPV6_TESTS="ipv6_fcnal ipv6_grp_fcnal ipv6_fcnal_runtime ipv6_large_grp ipv6_compat_mode ipv6_fdb_grp_fcnal ipv6_torture"
 
 ALL_TESTS="basic ${IPV4_TESTS} ${IPV6_TESTS}"
 TESTS="${ALL_TESTS}"
@@ -767,6 +767,62 @@ ipv6_large_grp()
        $IP nexthop flush >/dev/null 2>&1
 }
 
+ipv6_del_add_loop1()
+{
+       while :; do
+               $IP nexthop del id 100
+               $IP nexthop add id 100 via 2001:db8:91::2 dev veth1
+       done >/dev/null 2>&1
+}
+
+ipv6_grp_replace_loop()
+{
+       while :; do
+               $IP nexthop replace id 102 group 100/101
+       done >/dev/null 2>&1
+}
+
+ipv6_torture()
+{
+       local pid1
+       local pid2
+       local pid3
+       local pid4
+       local pid5
+
+       echo
+       echo "IPv6 runtime torture"
+       echo "--------------------"
+       if [ ! -x "$(command -v mausezahn)" ]; then
+               echo "SKIP: Could not run test; need mausezahn tool"
+               return
+       fi
+
+       run_cmd "$IP nexthop add id 100 via 2001:db8:91::2 dev veth1"
+       run_cmd "$IP nexthop add id 101 via 2001:db8:92::2 dev veth3"
+       run_cmd "$IP nexthop add id 102 group 100/101"
+       run_cmd "$IP route add 2001:db8:101::1 nhid 102"
+       run_cmd "$IP route add 2001:db8:101::2 nhid 102"
+
+       ipv6_del_add_loop1 &
+       pid1=$!
+       ipv6_grp_replace_loop &
+       pid2=$!
+       ip netns exec me ping -f 2001:db8:101::1 >/dev/null 2>&1 &
+       pid3=$!
+       ip netns exec me ping -f 2001:db8:101::2 >/dev/null 2>&1 &
+       pid4=$!
+       ip netns exec me mausezahn veth1 -B 2001:db8:101::2 -A 2001:db8:91::1 -c 0 -t tcp "dp=1-1023, flags=syn" >/dev/null 2>&1 &
+       pid5=$!
+
+       sleep 300
+       kill -9 $pid1 $pid2 $pid3 $pid4 $pid5
+
+       # if we did not crash, success
+       log_test 0 0 "IPv6 torture test"
+}
+
+
 ipv4_fcnal()
 {
        local rc
@@ -1313,6 +1369,61 @@ ipv4_compat_mode()
        sysctl_nexthop_compat_mode_set 1 "IPv4"
 }
 
+ipv4_del_add_loop1()
+{
+       while :; do
+               $IP nexthop del id 100
+               $IP nexthop add id 100 via 172.16.1.2 dev veth1
+       done >/dev/null 2>&1
+}
+
+ipv4_grp_replace_loop()
+{
+       while :; do
+               $IP nexthop replace id 102 group 100/101
+       done >/dev/null 2>&1
+}
+
+ipv4_torture()
+{
+       local pid1
+       local pid2
+       local pid3
+       local pid4
+       local pid5
+
+       echo
+       echo "IPv4 runtime torture"
+       echo "--------------------"
+       if [ ! -x "$(command -v mausezahn)" ]; then
+               echo "SKIP: Could not run test; need mausezahn tool"
+               return
+       fi
+
+       run_cmd "$IP nexthop add id 100 via 172.16.1.2 dev veth1"
+       run_cmd "$IP nexthop add id 101 via 172.16.2.2 dev veth3"
+       run_cmd "$IP nexthop add id 102 group 100/101"
+       run_cmd "$IP route add 172.16.101.1 nhid 102"
+       run_cmd "$IP route add 172.16.101.2 nhid 102"
+
+       ipv4_del_add_loop1 &
+       pid1=$!
+       ipv4_grp_replace_loop &
+       pid2=$!
+       ip netns exec me ping -f 172.16.101.1 >/dev/null 2>&1 &
+       pid3=$!
+       ip netns exec me ping -f 172.16.101.2 >/dev/null 2>&1 &
+       pid4=$!
+       ip netns exec me mausezahn veth1 -B 172.16.101.2 -A 172.16.1.1 -c 0 -t tcp "dp=1-1023, flags=syn" >/dev/null 2>&1 &
+       pid5=$!
+
+       sleep 300
+       kill -9 $pid1 $pid2 $pid3 $pid4 $pid5
+
+       # if we did not crash, success
+       log_test 0 0 "IPv4 torture test"
+}
+
 basic()
 {
        echo