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"
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
fireturn "$RET"
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).
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
linux-kselftest-mirror@lists.linaro.org