All of lore.kernel.org
 help / color / mirror / Atom feed
From: thinker.li@gmail.com
To: netdev@vger.kernel.org, martin.lau@linux.dev,
	kernel-team@meta.com, davem@davemloft.net, kuba@kernel.org,
	pabeni@redhat.com, dsahern@kernel.org, edumazet@google.com
Cc: sinquersw@gmail.com, kuifeng@meta.com,
	Kui-Feng Lee <thinker.li@gmail.com>,
	Hangbin Liu <liuhangbin@gmail.com>
Subject: [PATCH net-next v3 2/2] selftests: fib_tests: Add tests for toggling between w/ and w/o expires.
Date: Wed, 13 Dec 2023 13:37:35 -0800	[thread overview]
Message-ID: <20231213213735.434249-3-thinker.li@gmail.com> (raw)
In-Reply-To: <20231213213735.434249-1-thinker.li@gmail.com>

From: Kui-Feng Lee <thinker.li@gmail.com>

Make sure that toggling routes between w/ expires and w/o expires works
properly with GC list.

When a route with expires is replaced by a permanent route, the entry
should be removed from the gc list. When a permanent routes is replaced by
a temporary route, the new entry should be added to the gc list. The new
tests check if these basic operators work properly.

Signed-off-by: Kui-Feng Lee <thinker.li@gmail.com>
Cc: Hangbin Liu <liuhangbin@gmail.com>
---
 tools/testing/selftests/net/fib_tests.sh | 82 +++++++++++++++++++++++-
 1 file changed, 80 insertions(+), 2 deletions(-)

diff --git a/tools/testing/selftests/net/fib_tests.sh b/tools/testing/selftests/net/fib_tests.sh
index 66d0db7a2614..337d0febd796 100755
--- a/tools/testing/selftests/net/fib_tests.sh
+++ b/tools/testing/selftests/net/fib_tests.sh
@@ -785,6 +785,8 @@ fib6_gc_test()
 	    ret=0
 	fi
 
+	log_test $ret 0 "ipv6 route garbage collection"
+
 	# Permanent routes
 	for i in $(seq 1 5000); do
 	    $IP -6 route add 2001:30::$i \
@@ -806,9 +808,85 @@ fib6_gc_test()
 	    ret=0
 	fi
 
-	set +e
+	log_test $ret 0 "ipv6 route garbage collection (with permanent routes)"
 
-	log_test $ret 0 "ipv6 route garbage collection"
+	# Delete permanent routes
+	for i in $(seq 1 5000); do
+	    $IP -6 route del 2001:30::$i \
+		via 2001:10::2 dev dummy_10
+	done
+
+	# Permanent routes
+	for i in $(seq 1 100); do
+	    # Expire route after $EXPIRE seconds
+	    $IP -6 route add 2001:20::$i \
+		via 2001:10::2 dev dummy_10
+	done
+	# Replace with temporary routes
+	for i in $(seq 1 100); do
+	    # Expire route after $EXPIRE seconds
+	    $IP -6 route replace 2001:20::$i \
+		via 2001:10::2 dev dummy_10 expires $EXPIRE
+	done
+	N_EXP_SLEEP=$($IP -6 route list |grep expires|wc -l)
+	if [ $N_EXP_SLEEP -ne 100 ]; then
+	    echo "FAIL: expected 100 routes with expires, got $N_EXP_SLEEP"
+	    ret=1
+	else
+	    ret=0
+	fi
+
+	if [ $ret -eq 0 ]; then
+	    sleep $(($EXPIRE * 2 + 1))
+	    N_EXP_SLEEP=$($IP -6 route list |grep expires|wc -l)
+	    if [ $N_EXP_SLEEP -ne 0 ]; then
+		echo "FAIL: expected 0 routes with expires," \
+		     "got $N_EXP_SLEEP"
+		ret=1
+	    else
+		ret=0
+	    fi
+	fi
+
+	if [ $ret -eq 0 ]; then
+	    PERM_BASE=$($IP -6 route list |grep -v expires|wc -l)
+	    # Temporary routes
+	    for i in $(seq 1 100); do
+		# Expire route after $EXPIRE seconds
+		$IP -6 route add 2001:20::$i \
+		    via 2001:10::2 dev dummy_10 expires $EXPIRE
+	    done
+	    # Replace with permanent routes
+	    for i in $(seq 1 100); do
+		# Expire route after $EXPIRE seconds
+		$IP -6 route replace 2001:20::$i \
+		    via 2001:10::2 dev dummy_10
+	    done
+	    N_EXP_SLEEP=$($IP -6 route list |grep expires|wc -l)
+	    if [ $N_EXP_SLEEP -ne 0 ]; then
+		echo "FAIL: expected 0 routes with expires," \
+		 "got $N_EXP_SLEEP"
+		ret=1
+	    else
+		ret=0
+	    fi
+	fi
+	if [ $ret -eq 0 ]; then
+	    sleep $(($EXPIRE * 2 + 1))
+	    N_EXP_PERM=$($IP -6 route list |grep -v expires|wc -l)
+	    N_EXP_PERM=$(($N_EXP_PERM - $PERM_BASE))
+	    if [ $N_EXP_PERM -ne 100 ]; then
+		echo "FAIL: expected 100 permanent routes," \
+		     "got $N_EXP_PERM"
+		ret=1
+	    else
+		ret=0
+	    fi
+	fi
+
+	log_test $ret 0 "ipv6 route garbage collection (replace with permanent)"
+
+	set +e
 
 	cleanup &> /dev/null
 }
-- 
2.34.1


  parent reply	other threads:[~2023-12-13 21:37 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-12-13 21:37 [PATCH net-next v3 0/2] Fix dangling pointer at f6i->gc_link thinker.li
2023-12-13 21:37 ` [PATCH net-next v3 1/2] net/ipv6: insert a f6i to a GC list only if the f6i is in a fib6_table tree thinker.li
2023-12-14  6:11   ` David Ahern
2023-12-14 23:43     ` Kui-Feng Lee
2023-12-15 19:12     ` Kui-Feng Lee
2023-12-16 18:36       ` David Ahern
2023-12-18  1:05         ` Kui-Feng Lee
2023-12-18  1:16       ` Kui-Feng Lee
2023-12-13 21:37 ` thinker.li [this message]
2023-12-14  3:32   ` [PATCH net-next v3 2/2] selftests: fib_tests: Add tests for toggling between w/ and w/o expires Hangbin Liu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20231213213735.434249-3-thinker.li@gmail.com \
    --to=thinker.li@gmail.com \
    --cc=davem@davemloft.net \
    --cc=dsahern@kernel.org \
    --cc=edumazet@google.com \
    --cc=kernel-team@meta.com \
    --cc=kuba@kernel.org \
    --cc=kuifeng@meta.com \
    --cc=liuhangbin@gmail.com \
    --cc=martin.lau@linux.dev \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=sinquersw@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.