From: thinker.li@gmail.com
To: netdev@vger.kernel.org, ast@kernel.org, martin.lau@linux.dev,
kernel-team@meta.com, davem@davemloft.net, dsahern@kernel.org,
edumazet@google.com, kuba@kernel.org, pabeni@redhat.com,
liuhangbin@gmail.com
Cc: sinquersw@gmail.com, kuifeng@meta.com,
Kui-Feng Lee <thinker.li@gmail.com>
Subject: [PATCH net-next v2 5/5] selftests/net: Adding test cases of replacing routes and route advertisements.
Date: Thu, 1 Feb 2024 00:20:24 -0800 [thread overview]
Message-ID: <20240201082024.1018011-6-thinker.li@gmail.com> (raw)
In-Reply-To: <20240201082024.1018011-1-thinker.li@gmail.com>
From: Kui-Feng Lee <thinker.li@gmail.com>
Add tests of changing permanent routes to temporary routes and the reversed
case to make sure GC working correctly in these cases. Add tests for the
temporary routes from RA.
The existing device will be deleted between tests to remove all routes
associated with it, so that the earlier tests don't mess up the later ones.
Signed-off-by: Kui-Feng Lee <thinker.li@gmail.com>
---
tools/testing/selftests/net/fib_tests.sh | 161 ++++++++++++++++++++---
1 file changed, 146 insertions(+), 15 deletions(-)
diff --git a/tools/testing/selftests/net/fib_tests.sh b/tools/testing/selftests/net/fib_tests.sh
index b3ecccbbfcd2..38e786aad678 100755
--- a/tools/testing/selftests/net/fib_tests.sh
+++ b/tools/testing/selftests/net/fib_tests.sh
@@ -743,6 +743,16 @@ fib_notify_test()
cleanup &> /dev/null
}
+# Create a new dummy_10 to remove all associated routes.
+reset_dummy_10()
+{
+ $IP link del dev dummy_10
+
+ $IP link add dummy_10 type dummy
+ $IP link set dev dummy_10 up
+ $IP -6 address add 2001:10::1/64 dev dummy_10
+}
+
fib6_gc_test()
{
setup
@@ -751,7 +761,7 @@ fib6_gc_test()
echo "Fib6 garbage collection test"
set -e
- EXPIRE=3
+ EXPIRE=5
# Check expiration of routes every $EXPIRE seconds (GC)
$NS_EXEC sysctl -wq net.ipv6.route.gc_interval=$EXPIRE
@@ -763,44 +773,165 @@ fib6_gc_test()
$NS_EXEC sysctl -wq net.ipv6.route.flush=1
# Temporary routes
- for i in $(seq 1 1000); do
+ for i in $(seq 1 5); do
# Expire route after $EXPIRE seconds
$IP -6 route add 2001:20::$i \
via 2001:10::2 dev dummy_10 expires $EXPIRE
done
- sleep $(($EXPIRE * 2))
- 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"
+ sleep $(($EXPIRE * 2 + 1))
+ N_EXP=$($IP -6 route list |grep expires|wc -l)
+ if [ $N_EXP -ne 0 ]; then
+ echo "FAIL: expected 0 routes with expires, got $N_EXP"
ret=1
else
ret=0
fi
+ log_test $ret 0 "ipv6 route garbage collection"
+
+ reset_dummy_10
+
# Permanent routes
- for i in $(seq 1 5000); do
+ for i in $(seq 1 5); do
$IP -6 route add 2001:30::$i \
via 2001:10::2 dev dummy_10
done
# Temporary routes
- for i in $(seq 1 1000); do
+ for i in $(seq 1 5); do
# Expire route after $EXPIRE seconds
$IP -6 route add 2001:20::$i \
via 2001:10::2 dev dummy_10 expires $EXPIRE
done
- sleep $(($EXPIRE * 2))
- 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 (5000 permanent routes)"
+ sleep $(($EXPIRE * 2 + 1))
+ N_EXP=$($IP -6 route list |grep expires|wc -l)
+ if [ $N_EXP -ne 0 ]; then
+ echo "FAIL: expected 0 routes with expires, got $N_EXP"
ret=1
else
ret=0
fi
- set +e
+ log_test $ret 0 "ipv6 route garbage collection (with permanent routes)"
- log_test $ret 0 "ipv6 route garbage collection"
+ reset_dummy_10
+
+ # Permanent routes
+ for i in $(seq 1 5); do
+ $IP -6 route add 2001:20::$i \
+ via 2001:10::2 dev dummy_10
+ done
+ # Replace with temporary routes
+ for i in $(seq 1 5); 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=$($IP -6 route list |grep expires|wc -l)
+ if [ $N_EXP -ne 5 ]; then
+ log_test 1 0 "expected 5 routes with expires, got $N_EXP"
+ set +e
+ cleanup &> /dev/null
+ return
+ fi
+ # Wait for GC
+ sleep $(($EXPIRE * 2 + 1))
+ N_EXP=$($IP -6 route list |grep expires|wc -l)
+ if [ $N_EXP -ne 0 ]; then
+ echo "FAIL: expected 0 routes with expires, got $N_EXP"
+ ret=1
+ else
+ ret=0
+ fi
+
+ log_test $ret 0 "ipv6 route garbage collection (replace with expires)"
+
+ reset_dummy_10
+
+ # Temporary routes
+ for i in $(seq 1 5); 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 5); do
+ $IP -6 route replace 2001:20::$i \
+ via 2001:10::2 dev dummy_10
+ done
+ N_EXP=$($IP -6 route list |grep expires|wc -l)
+ if [ $N_EXP -ne 0 ]; then
+ log_test 1 0 "expected 0 routes with expires, got $N_EXP"
+ set +e
+ cleanup &> /dev/null
+ return
+ fi
+
+ # Wait for GC
+ sleep $(($EXPIRE * 2 + 1))
+
+ N_PERM=$($IP -6 route list |grep -v expires|grep 2001:20::|wc -l)
+ if [ $N_PERM -ne 5 ]; then
+ echo "FAIL: expected 5 permanent routes, got $N_PERM"
+ ret=1
+ else
+ ret=0
+ fi
+
+ log_test $ret 0 "ipv6 route garbage collection (replace with permanent)"
+
+ # ra6 is required for the next test. (ipv6toolkit)
+ if [ ! -x "$(command -v ra6)" ]; then
+ echo "SKIP: ra6 not found."
+ set +e
+ cleanup &> /dev/null
+ return
+ fi
+
+ # Delete dummy_10 and remove all routes
+ $IP link del dev dummy_10
+
+ # Create a pair of veth devices to send a RA message from one
+ # device to another.
+ $IP link add veth1 type veth peer name veth2
+ $IP link set dev veth1 up
+ $IP link set dev veth2 up
+ $IP -6 address add 2001:10::1/64 dev veth1 nodad
+ $IP -6 address add 2001:10::2/64 dev veth2 nodad
+
+ # Make veth1 ready to receive RA messages.
+ $NS_EXEC sysctl -wq net.ipv6.conf.veth1.accept_ra=2
+
+ # Send a RA message with a route from veth2 to veth1.
+ $NS_EXEC ra6 -i veth2 -d 2001:10::1 -t $EXPIRE
+
+ # Wait for the RA message.
+ sleep 1
+
+ N_EXP=$($IP -6 route list|grep expires|wc -l)
+ if [ $N_EXP -ne 1 ]; then
+ # systemd may mess up the test. Make sure that
+ # systemd-networkd.service and systemd-networkd.socket are
+ # stopped.
+ log_test 1 0 "expected 1 routes with expires, got $N_EXP"
+ set +e
+ cleanup &> /dev/null
+ return
+ fi
+
+ # Wait for GC
+ sleep $(($EXPIRE * 2 + 1))
+
+ N_EXP=$($IP -6 route list |grep expires|wc -l)
+ if [ $N_EXP -ne 0 ]; then
+ echo "FAIL: expected 0 routes with expires, got $N_EXP"
+ ret=1
+ else
+ ret=0
+ fi
+
+ log_test $ret 0 "ipv6 route garbage collection (RA message)"
+
+ set +e
cleanup &> /dev/null
}
--
2.34.1
prev parent reply other threads:[~2024-02-01 8:20 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-01 8:20 [PATCH net-next v2 0/5] Remove expired routes with a separated list of routes thinker.li
2024-02-01 8:20 ` [PATCH net-next v2 1/5] net/ipv6: set expires in rt6_add_dflt_router() thinker.li
2024-02-01 8:20 ` [PATCH net-next v2 2/5] net/ipv6: Remove unnecessary clean thinker.li
2024-02-01 8:20 ` [PATCH net-next v2 3/5] net/ipv6: Remove expired routes with a separated list of routes thinker.li
2024-02-01 8:20 ` [PATCH net-next v2 4/5] net/ipv6: set expires in modify_prefix_route() if RTF_EXPIRES is set thinker.li
2024-02-01 8:20 ` thinker.li [this message]
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=20240201082024.1018011-6-thinker.li@gmail.com \
--to=thinker.li@gmail.com \
--cc=ast@kernel.org \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).