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