.../selftests/net/rtnetlink_notification.sh | 52 +++++++++++++++++-- 1 file changed, 47 insertions(+), 5 deletions(-)
This commit adds a new kernel selftest to verify RTNLGRP_IPV6_ACADDR
notifications. The test works by adding/removing a dummy interface,
enabling packet forwarding, and then confirming that user space can
correctly receive anycast notifications.
The test relies on the iproute2 version to be 6.13+.
Tested by the following command:
$ vng -v --user root --cpus 16 -- \
make -C tools/testing/selftests TARGETS=net
TEST_PROGS=rtnetlink_notification.sh \
TEST_GEN_PROGS="" run_tests
Signed-off-by: Yuyang Huang <yuyanghuang@google.com>
---
.../selftests/net/rtnetlink_notification.sh | 52 +++++++++++++++++--
1 file changed, 47 insertions(+), 5 deletions(-)
diff --git a/tools/testing/selftests/net/rtnetlink_notification.sh b/tools/testing/selftests/net/rtnetlink_notification.sh
index 39c1b815bbe4..2d938861197c 100755
--- a/tools/testing/selftests/net/rtnetlink_notification.sh
+++ b/tools/testing/selftests/net/rtnetlink_notification.sh
@@ -8,9 +8,11 @@
ALL_TESTS="
kci_test_mcast_addr_notification
+ kci_test_anycast_addr_notification
"
source lib.sh
+test_dev="test-dummy1"
kci_test_mcast_addr_notification()
{
@@ -18,12 +20,11 @@ kci_test_mcast_addr_notification()
local tmpfile
local monitor_pid
local match_result
- local test_dev="test-dummy1"
tmpfile=$(mktemp)
defer rm "$tmpfile"
- ip monitor maddr > $tmpfile &
+ ip monitor maddr > "$tmpfile" &
monitor_pid=$!
defer kill_process "$monitor_pid"
@@ -32,7 +33,7 @@ kci_test_mcast_addr_notification()
if [ ! -e "/proc/$monitor_pid" ]; then
RET=$ksft_skip
log_test "mcast addr notification: iproute2 too old"
- return $RET
+ return "$RET"
fi
ip link add name "$test_dev" type dummy
@@ -53,7 +54,48 @@ kci_test_mcast_addr_notification()
RET=$ksft_fail
fi
log_test "mcast addr notification: Expected 4 matches, got $match_result"
- return $RET
+ return "$RET"
+}
+
+kci_test_anycast_addr_notification()
+{
+ RET=0
+ local tmpfile
+ local monitor_pid
+ local match_result
+
+ tmpfile=$(mktemp)
+ defer rm "$tmpfile"
+
+ ip monitor acaddress > "$tmpfile" &
+ monitor_pid=$!
+ defer kill_process "$monitor_pid"
+ sleep 1
+
+ if [ ! -e "/proc/$monitor_pid" ]; then
+ RET=$ksft_skip
+ log_test "anycast addr notification: iproute2 too old"
+ return "$RET"
+ fi
+
+ ip link add name "$test_dev" type dummy
+ check_err $? "failed to add dummy interface"
+ ip link set "$test_dev" up
+ check_err $? "failed to set dummy interface up"
+ sysctl -qw net.ipv6.conf."$test_dev".forwarding=1
+ ip link del dev "$test_dev"
+ check_err $? "Failed to delete dummy interface"
+ sleep 1
+
+ # There should be 2 line matches as follows.
+ # 9: dummy2 inet6 any fe80:: scope global
+ # Deleted 9: dummy2 inet6 any fe80:: scope global
+ match_result=$(grep -cE "$test_dev.*(fe80::)" "$tmpfile")
+ if [ "$match_result" -ne 2 ]; then
+ RET=$ksft_fail
+ fi
+ log_test "anycast addr notification: Expected 2 matches, got $match_result"
+ return "$RET"
}
#check for needed privileges
@@ -67,4 +109,4 @@ require_command ip
tests_run
-exit $EXIT_STATUS
+exit "$EXIT_STATUS"
--
2.50.0.rc2.761.g2dc52ea45b-goog
On Wed, Jun 18, 2025 at 07:40:25PM +0900, Yuyang Huang wrote: > This commit adds a new kernel selftest to verify RTNLGRP_IPV6_ACADDR > notifications. The test works by adding/removing a dummy interface, > enabling packet forwarding, and then confirming that user space can > correctly receive anycast notifications. > > The test relies on the iproute2 version to be 6.13+. > > Tested by the following command: > $ vng -v --user root --cpus 16 -- \ > make -C tools/testing/selftests TARGETS=net > TEST_PROGS=rtnetlink_notification.sh \ > TEST_GEN_PROGS="" run_tests > > Signed-off-by: Yuyang Huang <yuyanghuang@google.com> > --- > .../selftests/net/rtnetlink_notification.sh | 52 +++++++++++++++++-- > 1 file changed, 47 insertions(+), 5 deletions(-) > > diff --git a/tools/testing/selftests/net/rtnetlink_notification.sh b/tools/testing/selftests/net/rtnetlink_notification.sh ... > @@ -18,12 +20,11 @@ kci_test_mcast_addr_notification() > local tmpfile > local monitor_pid > local match_result > - local test_dev="test-dummy1" > > tmpfile=$(mktemp) > defer rm "$tmpfile" > > - ip monitor maddr > $tmpfile & > + ip monitor maddr > "$tmpfile" & > monitor_pid=$! > defer kill_process "$monitor_pid" > > @@ -32,7 +33,7 @@ kci_test_mcast_addr_notification() > if [ ! -e "/proc/$monitor_pid" ]; then > RET=$ksft_skip > log_test "mcast addr notification: iproute2 too old" > - return $RET > + return "$RET" > fi > > ip link add name "$test_dev" type dummy > @@ -53,7 +54,48 @@ kci_test_mcast_addr_notification() > RET=$ksft_fail > fi > log_test "mcast addr notification: Expected 4 matches, got $match_result" > - return $RET > + return "$RET" > +} ... > @@ -67,4 +109,4 @@ require_command ip > > tests_run > > -exit $EXIT_STATUS > +exit "$EXIT_STATUS" Hi, While I like the changes above (that I haven't trimmed-out) these seem to be clean-ups that aren't strictly related to the subject of this patch. IOW, they don't belong in this patch (but could be a separate patch). -- pw-bot: changes-requested
Thanks for the review feedback, I will move the clean up to a seaparte patch. On Thu, Jun 19, 2025 at 3:20 AM Simon Horman <horms@kernel.org> wrote: > > On Wed, Jun 18, 2025 at 07:40:25PM +0900, Yuyang Huang wrote: > > This commit adds a new kernel selftest to verify RTNLGRP_IPV6_ACADDR > > notifications. The test works by adding/removing a dummy interface, > > enabling packet forwarding, and then confirming that user space can > > correctly receive anycast notifications. > > > > The test relies on the iproute2 version to be 6.13+. > > > > Tested by the following command: > > $ vng -v --user root --cpus 16 -- \ > > make -C tools/testing/selftests TARGETS=net > > TEST_PROGS=rtnetlink_notification.sh \ > > TEST_GEN_PROGS="" run_tests > > > > Signed-off-by: Yuyang Huang <yuyanghuang@google.com> > > --- > > .../selftests/net/rtnetlink_notification.sh | 52 +++++++++++++++++-- > > 1 file changed, 47 insertions(+), 5 deletions(-) > > > > diff --git a/tools/testing/selftests/net/rtnetlink_notification.sh b/tools/testing/selftests/net/rtnetlink_notification.sh > > ... > > > @@ -18,12 +20,11 @@ kci_test_mcast_addr_notification() > > local tmpfile > > local monitor_pid > > local match_result > > - local test_dev="test-dummy1" > > > > tmpfile=$(mktemp) > > defer rm "$tmpfile" > > > > - ip monitor maddr > $tmpfile & > > + ip monitor maddr > "$tmpfile" & > > monitor_pid=$! > > defer kill_process "$monitor_pid" > > > > @@ -32,7 +33,7 @@ kci_test_mcast_addr_notification() > > if [ ! -e "/proc/$monitor_pid" ]; then > > RET=$ksft_skip > > log_test "mcast addr notification: iproute2 too old" > > - return $RET > > + return "$RET" > > fi > > > > ip link add name "$test_dev" type dummy > > > @@ -53,7 +54,48 @@ kci_test_mcast_addr_notification() > > RET=$ksft_fail > > fi > > log_test "mcast addr notification: Expected 4 matches, got $match_result" > > - return $RET > > + return "$RET" > > +} > > ... > > > @@ -67,4 +109,4 @@ require_command ip > > > > tests_run > > > > -exit $EXIT_STATUS > > +exit "$EXIT_STATUS" > > Hi, > > While I like the changes above (that I haven't trimmed-out) > these seem to be clean-ups that aren't strictly related > to the subject of this patch. IOW, they don't belong in this patch > (but could be a separate patch). > > -- > pw-bot: changes-requested
© 2016 - 2025 Red Hat, Inc.