xref: /linux/tools/testing/selftests/net/rtnetlink_notification.sh (revision e74058f5619f17a4ee2ffa2b426d989a9b9c6293)
1*e74058f5SYuyang Huang#!/bin/bash
2*e74058f5SYuyang Huang# SPDX-License-Identifier: GPL-2.0
3*e74058f5SYuyang Huang#
4*e74058f5SYuyang Huang# This test is for checking rtnetlink notification callpaths, and get as much
5*e74058f5SYuyang Huang# coverage as possible.
6*e74058f5SYuyang Huang#
7*e74058f5SYuyang Huang# set -e
8*e74058f5SYuyang Huang
9*e74058f5SYuyang HuangALL_TESTS="
10*e74058f5SYuyang Huang	kci_test_mcast_addr_notification
11*e74058f5SYuyang Huang"
12*e74058f5SYuyang Huang
13*e74058f5SYuyang Huangsource lib.sh
14*e74058f5SYuyang Huang
15*e74058f5SYuyang Huangkci_test_mcast_addr_notification()
16*e74058f5SYuyang Huang{
17*e74058f5SYuyang Huang	RET=0
18*e74058f5SYuyang Huang	local tmpfile
19*e74058f5SYuyang Huang	local monitor_pid
20*e74058f5SYuyang Huang	local match_result
21*e74058f5SYuyang Huang	local test_dev="test-dummy1"
22*e74058f5SYuyang Huang
23*e74058f5SYuyang Huang	tmpfile=$(mktemp)
24*e74058f5SYuyang Huang	defer rm "$tmpfile"
25*e74058f5SYuyang Huang
26*e74058f5SYuyang Huang	ip monitor maddr > $tmpfile &
27*e74058f5SYuyang Huang	monitor_pid=$!
28*e74058f5SYuyang Huang	defer kill_process "$monitor_pid"
29*e74058f5SYuyang Huang
30*e74058f5SYuyang Huang	sleep 1
31*e74058f5SYuyang Huang
32*e74058f5SYuyang Huang	if [ ! -e "/proc/$monitor_pid" ]; then
33*e74058f5SYuyang Huang		RET=$ksft_skip
34*e74058f5SYuyang Huang		log_test "mcast addr notification: iproute2 too old"
35*e74058f5SYuyang Huang		return $RET
36*e74058f5SYuyang Huang	fi
37*e74058f5SYuyang Huang
38*e74058f5SYuyang Huang	ip link add name "$test_dev" type dummy
39*e74058f5SYuyang Huang	check_err $? "failed to add dummy interface"
40*e74058f5SYuyang Huang	ip link set "$test_dev" up
41*e74058f5SYuyang Huang	check_err $? "failed to set dummy interface up"
42*e74058f5SYuyang Huang	ip link del dev "$test_dev"
43*e74058f5SYuyang Huang	check_err $? "Failed to delete dummy interface"
44*e74058f5SYuyang Huang	sleep 1
45*e74058f5SYuyang Huang
46*e74058f5SYuyang Huang	# There should be 4 line matches as follows.
47*e74058f5SYuyang Huang	# 13: test-dummy1    inet6 mcast ff02::1 scope global 
48*e74058f5SYuyang Huang	# 13: test-dummy1    inet mcast 224.0.0.1 scope global 
49*e74058f5SYuyang Huang	# Deleted 13: test-dummy1    inet mcast 224.0.0.1 scope global 
50*e74058f5SYuyang Huang	# Deleted 13: test-dummy1    inet6 mcast ff02::1 scope global 
51*e74058f5SYuyang Huang	match_result=$(grep -cE "$test_dev.*(224.0.0.1|ff02::1)" "$tmpfile")
52*e74058f5SYuyang Huang	if [ "$match_result" -ne 4 ]; then
53*e74058f5SYuyang Huang		RET=$ksft_fail
54*e74058f5SYuyang Huang	fi
55*e74058f5SYuyang Huang	log_test "mcast addr notification: Expected 4 matches, got $match_result"
56*e74058f5SYuyang Huang	return $RET
57*e74058f5SYuyang Huang}
58*e74058f5SYuyang Huang
59*e74058f5SYuyang Huang#check for needed privileges
60*e74058f5SYuyang Huangif [ "$(id -u)" -ne 0 ];then
61*e74058f5SYuyang Huang	RET=$ksft_skip
62*e74058f5SYuyang Huang	log_test "need root privileges"
63*e74058f5SYuyang Huang	exit $RET
64*e74058f5SYuyang Huangfi
65*e74058f5SYuyang Huang
66*e74058f5SYuyang Huangrequire_command ip
67*e74058f5SYuyang Huang
68*e74058f5SYuyang Huangtests_run
69*e74058f5SYuyang Huang
70*e74058f5SYuyang Huangexit $EXIT_STATUS
71