From: Hangbin Liu <liuhangbin@gmail.com>
To: netdev@vger.kernel.org
Cc: "David S. Miller" <davem@davemloft.net>,
David Ahern <dsahern@kernel.org>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Simon Horman <horms@kernel.org>, Shuah Khan <shuah@kernel.org>,
Sam Edwards <cfsworks@gmail.com>,
linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org,
Hangbin Liu <liuhangbin@gmail.com>
Subject: [PATCH net 2/2] selftests/rtnetlink.sh: add mngtempaddr test
Date: Wed, 13 Nov 2024 12:51:52 +0000 [thread overview]
Message-ID: <20241113125152.752778-3-liuhangbin@gmail.com> (raw)
In-Reply-To: <20241113125152.752778-1-liuhangbin@gmail.com>
Add a test to check the temporary address could be added/removed
correctly when mngtempaddr is set or removed/unmanaged.
Suggested-by: Sam Edwards <cfsworks@gmail.com>
Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
---
tools/testing/selftests/net/rtnetlink.sh | 89 ++++++++++++++++++++++++
1 file changed, 89 insertions(+)
diff --git a/tools/testing/selftests/net/rtnetlink.sh b/tools/testing/selftests/net/rtnetlink.sh
index bdf6f10d0558..f25a363d55bd 100755
--- a/tools/testing/selftests/net/rtnetlink.sh
+++ b/tools/testing/selftests/net/rtnetlink.sh
@@ -29,6 +29,7 @@ ALL_TESTS="
kci_test_bridge_parent_id
kci_test_address_proto
kci_test_enslave_bonding
+ kci_test_mngtmpaddr
"
devdummy="test-dummy0"
@@ -44,6 +45,7 @@ check_err()
if [ $ret -eq 0 ]; then
ret=$1
fi
+ [ -n "$2" ] && echo "$2"
}
# same but inverted -- used when command must fail for test to pass
@@ -1267,6 +1269,93 @@ kci_test_enslave_bonding()
ip netns del "$testns"
}
+# If the mngtmpaddr or tempaddr missing, return 0 and stop waiting
+check_tempaddr_exists()
+{
+ local start=${1-"1"}
+ addr_list=$(ip -j -n $testns addr show dev ${devdummy})
+ for i in $(seq $start 4); do
+ if ! echo ${addr_list} | \
+ jq -r '.[].addr_info[] | select(.mngtmpaddr == true) | .local' | \
+ grep -q "200${i}"; then
+ check_err $? "No mngtmpaddr 200${i}:db8::1"
+ return 0
+ fi
+
+ if ! echo ${addr_list} | \
+ jq -r '.[].addr_info[] | select(.temporary == true) | .local' | \
+ grep -q "200${i}"; then
+ check_err $? "No tempaddr for 200${i}:db8::1"
+ return 0
+ fi
+ done
+ return 1
+}
+
+kci_test_mngtmpaddr()
+{
+ local ret=0
+
+ setup_ns testns
+ if [ $? -ne 0 ]; then
+ end_test "SKIP mngtmpaddr tests: cannot add net namespace $testns"
+ return $ksft_skip
+ fi
+
+ # 1. Create a dummy Ethernet interface
+ run_cmd ip -n $testns link add ${devdummy} type dummy
+ run_cmd ip -n $testns link set ${devdummy} up
+ run_cmd ip netns exec $testns sysctl -w net.ipv6.conf.${devdummy}.use_tempaddr=1
+ # 2. Create several (3-4) mngtmpaddr addresses on that interface.
+ # with temp_*_lft configured to be pretty short (10 and 35 seconds
+ # for prefer/valid respectively)
+ for i in $(seq 1 4); do
+ run_cmd ip -n $testns addr add 200${i}:db8::1/64 dev ${devdummy} mngtmpaddr
+ tempaddr=$(ip -j -n $testns addr show dev ${devdummy} | \
+ jq -r '.[].addr_info[] | select(.temporary == true) | .local' | \
+ grep 200${i})
+ #3. Confirm that temporary addresses are created immediately.
+ if [ -z $tempaddr ]; then
+ check_err 1 "no tempaddr created for 200${i}:db8::1"
+ else
+ run_cmd ip -n $testns addr change $tempaddr dev ${devdummy} \
+ preferred_lft 10 valid_lft 35
+ fi
+ done
+
+ #4. Confirm that a preferred temporary address exists for each mngtmpaddr
+ # address at all times, polling once per second for at least 5 minutes.
+ slowwait 300 check_tempaddr_exists
+
+ #5. Delete each mngtmpaddr address, one at a time (alternating between
+ # deleting and merely un-mngtmpaddr-ing), and confirm that the other
+ # mngtmpaddr addresses still have preferred temporaries.
+ for i in $(seq 1 4); do
+ if (( $i % 2 == 1 )); then
+ run_cmd ip -n $testns addr del 200${i}:db8::1/64 dev ${devdummy}
+ else
+ run_cmd ip -n $testns addr change 200${i}:db8::1/64 dev ${devdummy}
+ fi
+ # the temp addr should be deleted
+ if ip -j -n $testns addr show dev ${devdummy} | \
+ jq -r '.[].addr_info[] | select(.temporary == true) | .local' | \
+ grep -q "200${i}"; then
+ check_err 1 "tempaddr not deleted for 200${i}:db8::1"
+ fi
+ # Check other addresses are still exist
+ check_tempaddr_exists $((i + 1))
+ done
+
+ if [ $ret -ne 0 ]; then
+ end_test "FAIL: mngtmpaddr add/remove incorrect"
+ ip netns del "$testns"
+ return 1
+ fi
+
+ end_test "PASS: mngtmpaddr add/remove correctly"
+ ip netns del "$testns"
+}
+
kci_test_rtnl()
{
local current_test
--
2.46.0
next prev parent reply other threads:[~2024-11-13 12:52 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-13 12:51 [PATCH net 0/2] ipv6: fix temporary address not removed correctly Hangbin Liu
2024-11-13 12:51 ` [PATCH net 1/2] net/ipv6: delete temporary address if mngtmpaddr is removed or un-mngtmpaddr Hangbin Liu
2024-11-13 21:03 ` Sam Edwards
2024-11-14 7:38 ` Hangbin Liu
2024-11-15 20:46 ` Sam Edwards
2024-11-15 22:51 ` David Ahern
2024-11-19 7:52 ` Hangbin Liu
2024-11-13 12:51 ` Hangbin Liu [this message]
2024-11-13 19:56 ` [PATCH net 2/2] selftests/rtnetlink.sh: add mngtempaddr test Jakub Kicinski
2024-11-14 2:00 ` Hangbin Liu
2024-11-14 2:43 ` Jakub Kicinski
2024-11-14 8:19 ` Hangbin Liu
2024-11-14 15:13 ` Jakub Kicinski
2024-11-18 1:19 ` Hangbin Liu
2024-11-13 20:43 ` Sam Edwards
2024-11-14 8:46 ` Hangbin Liu
2024-11-15 20:59 ` Sam Edwards
2024-11-19 8:23 ` 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=20241113125152.752778-3-liuhangbin@gmail.com \
--to=liuhangbin@gmail.com \
--cc=cfsworks@gmail.com \
--cc=davem@davemloft.net \
--cc=dsahern@kernel.org \
--cc=edumazet@google.com \
--cc=horms@kernel.org \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=shuah@kernel.org \
/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