Files
linux-stable-mirror/tools/testing/selftests/net/rtnetlink_notification.sh
T
Yuyang Huang e74058f561 selftest: Add selftest for multicast address notifications
This commit adds a new kernel selftest to verify RTNLGRP_IPV4_MCADDR
and RTNLGRP_IPV6_MCADDR notifications. The test works by adding and
removing a dummy interface and then confirming that the system
correctly receives join and removal notifications for the 224.0.0.1
and ff02::1 multicast addresses.

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

Cc: Maciej Żenczykowski <maze@google.com>
Cc: Lorenzo Colitti <lorenzo@google.com>
Signed-off-by: Yuyang Huang <yuyanghuang@google.com>
Link: https://patch.msgid.link/20250614053522.623820-1-yuyanghuang@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2025-06-17 17:58:51 -07:00

71 lines
1.5 KiB
Bash
Executable File
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0
#
# This test is for checking rtnetlink notification callpaths, and get as much
# coverage as possible.
#
# set -e
ALL_TESTS="
kci_test_mcast_addr_notification
"
source lib.sh
kci_test_mcast_addr_notification()
{
RET=0
local tmpfile
local monitor_pid
local match_result
local test_dev="test-dummy1"
tmpfile=$(mktemp)
defer rm "$tmpfile"
ip monitor maddr > $tmpfile &
monitor_pid=$!
defer kill_process "$monitor_pid"
sleep 1
if [ ! -e "/proc/$monitor_pid" ]; then
RET=$ksft_skip
log_test "mcast 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"
ip link del dev "$test_dev"
check_err $? "Failed to delete dummy interface"
sleep 1
# There should be 4 line matches as follows.
# 13: test-dummy1    inet6 mcast ff02::1 scope global 
# 13: test-dummy1    inet mcast 224.0.0.1 scope global 
# Deleted 13: test-dummy1    inet mcast 224.0.0.1 scope global 
# Deleted 13: test-dummy1    inet6 mcast ff02::1 scope global 
match_result=$(grep -cE "$test_dev.*(224.0.0.1|ff02::1)" "$tmpfile")
if [ "$match_result" -ne 4 ]; then
RET=$ksft_fail
fi
log_test "mcast addr notification: Expected 4 matches, got $match_result"
return $RET
}
#check for needed privileges
if [ "$(id -u)" -ne 0 ];then
RET=$ksft_skip
log_test "need root privileges"
exit $RET
fi
require_command ip
tests_run
exit $EXIT_STATUS