1#!/bin/bash 2# SPDX-License-Identifier: GPL-2.0 3# 4# Test various interface configuration scenarios. Observe that configurations 5# deemed valid by mlxsw succeed, invalid configurations fail and that no traces 6# are produced. To prevent the test from passing in case traces are produced, 7# the user can set the 'kernel.panic_on_warn' and 'kernel.panic_on_oops' 8# sysctls in its environment. 9 10lib_dir=$(dirname $0)/../../../net/forwarding 11 12ALL_TESTS=" 13 rif_set_addr_test 14 rif_inherit_bridge_addr_test 15 rif_non_inherit_bridge_addr_test 16" 17NUM_NETIFS=2 18source $lib_dir/lib.sh 19 20setup_prepare() 21{ 22 swp1=${NETIFS[p1]} 23 swp2=${NETIFS[p2]} 24 25 ip link set dev $swp1 up 26 ip link set dev $swp2 up 27} 28 29cleanup() 30{ 31 pre_cleanup 32 33 ip link set dev $swp2 down 34 ip link set dev $swp1 down 35} 36 37rif_set_addr_test() 38{ 39 local swp1_mac=$(mac_get $swp1) 40 local swp2_mac=$(mac_get $swp2) 41 42 RET=0 43 44 # $swp1 and $swp2 likely got their IPv6 local addresses already, but 45 # here we need to test the transition to RIF. 46 ip addr flush dev $swp1 47 ip addr flush dev $swp2 48 sleep .1 49 50 ip addr add dev $swp1 192.0.2.1/28 51 check_err $? 52 53 ip link set dev $swp1 addr 00:11:22:33:44:55 54 check_err $? 55 56 # IP address enablement should be rejected if the MAC address prefix 57 # doesn't match other RIFs. 58 ip addr add dev $swp2 192.0.2.2/28 &>/dev/null 59 check_fail $? "IP address addition passed for a device with a wrong MAC" 60 ip addr add dev $swp2 192.0.2.2/28 2>&1 >/dev/null \ 61 | grep -q mlxsw_spectrum 62 check_err $? "no extack for IP address addition" 63 64 ip link set dev $swp2 addr 00:11:22:33:44:66 65 check_err $? 66 ip addr add dev $swp2 192.0.2.2/28 &>/dev/null 67 check_err $? 68 69 # Change of MAC address of a RIF should be forbidden if the new MAC 70 # doesn't share the prefix with other MAC addresses. 71 ip link set dev $swp2 addr 00:11:22:33:00:66 &>/dev/null 72 check_fail $? "change of MAC address passed for a wrong MAC" 73 ip link set dev $swp2 addr 00:11:22:33:00:66 2>&1 >/dev/null \ 74 | grep -q mlxsw_spectrum 75 check_err $? "no extack for MAC address change" 76 77 log_test "RIF - bad MAC change" 78 79 ip addr del dev $swp2 192.0.2.2/28 80 ip addr del dev $swp1 192.0.2.1/28 81 82 ip link set dev $swp2 addr $swp2_mac 83 ip link set dev $swp1 addr $swp1_mac 84} 85 86rif_inherit_bridge_addr_test() 87{ 88 RET=0 89 90 # Create first RIF 91 ip addr add dev $swp1 192.0.2.1/28 92 check_err $? 93 94 # Create a FID RIF 95 ip link add name br1 up type bridge vlan_filtering 0 96 ip link set dev $swp2 master br1 97 ip addr add dev br1 192.0.2.17/28 98 check_err $? 99 100 # Prepare a device with a low MAC address 101 ip link add name d up type dummy 102 ip link set dev d addr 00:11:22:33:44:55 103 104 # Attach the device to br1. That prompts bridge address change, which 105 # should be vetoed, thus preventing the attachment. 106 ip link set dev d master br1 &>/dev/null 107 check_fail $? "Device with low MAC was permitted to attach a bridge with RIF" 108 ip link set dev d master br1 2>&1 >/dev/null \ 109 | grep -q mlxsw_spectrum 110 check_err $? "no extack for bridge attach rejection" 111 112 ip link set dev $swp2 addr 00:11:22:33:44:55 &>/dev/null 113 check_fail $? "Changing swp2's MAC address permitted" 114 ip link set dev $swp2 addr 00:11:22:33:44:55 2>&1 >/dev/null \ 115 | grep -q mlxsw_spectrum 116 check_err $? "no extack for bridge port MAC address change rejection" 117 118 log_test "RIF - attach port with bad MAC to bridge" 119 120 ip link del dev d 121 ip link del dev br1 122 ip addr del dev $swp1 192.0.2.1/28 123} 124 125rif_non_inherit_bridge_addr_test() 126{ 127 local swp2_mac=$(mac_get $swp2) 128 129 RET=0 130 131 # Create first RIF 132 ip addr add dev $swp1 192.0.2.1/28 133 check_err $? 134 135 # Create a FID RIF 136 ip link add name br1 up type bridge vlan_filtering 0 137 ip link set dev br1 addr $swp2_mac 138 ip link set dev $swp2 master br1 139 ip addr add dev br1 192.0.2.17/28 140 check_err $? 141 142 # Prepare a device with a low MAC address 143 ip link add name d up type dummy 144 ip link set dev d addr 00:11:22:33:44:55 145 146 # Attach the device to br1. Since the bridge address was set, it should 147 # work. 148 ip link set dev d master br1 &>/dev/null 149 check_err $? "Could not attach a device with low MAC to a bridge with RIF" 150 151 # Port MAC address change should be allowed for a bridge with set MAC. 152 ip link set dev $swp2 addr 00:11:22:33:44:55 153 check_err $? "Changing swp2's MAC address not permitted" 154 155 log_test "RIF - attach port with bad MAC to bridge with set MAC" 156 157 ip link set dev $swp2 addr $swp2_mac 158 ip link del dev d 159 ip link del dev br1 160 ip addr del dev $swp1 192.0.2.1/28 161} 162 163trap cleanup EXIT 164 165setup_prepare 166setup_wait 167 168tests_run 169 170exit $EXIT_STATUS 171