1#!/bin/bash 2# SPDX-License-Identifier: GPL-2.0 3 4lib_dir=$(dirname $0)/../../../net/forwarding 5 6ALL_TESTS=" 7 create_8021ad_vlan_upper_on_top_front_panel_port 8 create_8021ad_vlan_upper_on_top_bridge_port 9 create_8021ad_vlan_upper_on_top_lag 10 create_8021ad_vlan_upper_on_top_bridge 11 create_8021ad_vlan_upper_on_top_8021ad_bridge 12 create_vlan_upper_on_top_8021ad_bridge 13 create_vlan_upper_on_top_front_panel_enslaved_to_8021ad_bridge 14 create_vlan_upper_on_top_lag_enslaved_to_8021ad_bridge 15 enslave_front_panel_with_vlan_upper_to_8021ad_bridge 16 enslave_lag_with_vlan_upper_to_8021ad_bridge 17 add_ip_address_to_8021ad_bridge 18 switch_bridge_protocol_from_8021q_to_8021ad 19" 20NUM_NETIFS=2 21source $lib_dir/lib.sh 22 23setup_prepare() 24{ 25 swp1=${NETIFS[p1]} 26 swp2=${NETIFS[p2]} 27 28 ip link set dev $swp1 up 29 ip link set dev $swp2 up 30 31 sleep 10 32} 33 34cleanup() 35{ 36 pre_cleanup 37 38 ip link set dev $swp2 down 39 ip link set dev $swp1 down 40} 41 42create_vlan_upper_on_top_of_bridge() 43{ 44 RET=0 45 46 local bridge_proto=$1; shift 47 local netdev_proto=$1; shift 48 49 ip link add dev br0 type bridge vlan_filtering 1 \ 50 vlan_protocol $bridge_proto vlan_default_pvid 0 mcast_snooping 0 51 ip link set dev br0 addrgenmode none 52 53 ip link set dev br0 up 54 ip link set dev $swp1 master br0 55 56 ip link add name br0.100 link br0 type vlan \ 57 protocol $netdev_proto id 100 2>/dev/null 58 check_fail $? "$netdev_proto vlan upper creation on top of an $bridge_proto bridge not rejected" 59 60 ip link add name br0.100 link br0 type vlan \ 61 protocol $netdev_proto id 100 2>&1 >/dev/null \ 62 | grep -q mlxsw_spectrum 63 check_err $? "$netdev_proto vlan upper creation on top of an $bridge_proto bridge rejected without extack" 64 65 log_test "create $netdev_proto vlan upper on top $bridge_proto bridge" 66 67 ip link del dev br0 68} 69 70create_8021ad_vlan_upper_on_top_front_panel_port() 71{ 72 RET=0 73 74 ip link add name $swp1.100 link $swp1 type vlan \ 75 protocol 802.1ad id 100 2>/dev/null 76 check_fail $? "802.1ad vlan upper creation on top of a front panel not rejected" 77 78 ip link add name $swp1.100 link $swp1 type vlan \ 79 protocol 802.1ad id 100 2>&1 >/dev/null \ 80 | grep -q mlxsw_spectrum 81 check_err $? "802.1ad vlan upper creation on top of a front panel rejected without extack" 82 83 log_test "create 802.1ad vlan upper on top of a front panel" 84} 85 86create_8021ad_vlan_upper_on_top_bridge_port() 87{ 88 RET=0 89 90 ip link add dev br0 type bridge vlan_filtering 1 \ 91 vlan_default_pvid 0 mcast_snooping 0 92 ip link set dev br0 addrgenmode none 93 94 ip link set dev $swp1 master br0 95 ip link set dev br0 up 96 97 ip link add name $swp1.100 link $swp1 type vlan \ 98 protocol 802.1ad id 100 2>/dev/null 99 check_fail $? "802.1ad vlan upper creation on top of a bridge port not rejected" 100 101 ip link add name $swp1.100 link $swp1 type vlan \ 102 protocol 802.1ad id 100 2>&1 >/dev/null \ 103 | grep -q mlxsw_spectrum 104 check_err $? "802.1ad vlan upper creation on top of a bridge port rejected without extack" 105 106 log_test "create 802.1ad vlan upper on top of a bridge port" 107 108 ip link del dev br0 109} 110 111create_8021ad_vlan_upper_on_top_lag() 112{ 113 RET=0 114 115 ip link add name bond1 type bond mode 802.3ad 116 ip link set dev $swp1 down 117 ip link set dev $swp1 master bond1 118 119 ip link add name bond1.100 link bond1 type vlan \ 120 protocol 802.1ad id 100 2>/dev/null 121 check_fail $? "802.1ad vlan upper creation on top of a lag not rejected" 122 123 ip link add name bond1.100 link bond1 type vlan \ 124 protocol 802.1ad id 100 2>&1 >/dev/null \ 125 | grep -q mlxsw_spectrum 126 check_err $? "802.1ad vlan upper creation on top of a lag rejected without extack" 127 128 log_test "create 802.1ad vlan upper on top of a lag" 129 130 ip link del dev bond1 131} 132 133create_8021ad_vlan_upper_on_top_bridge() 134{ 135 RET=0 136 137 create_vlan_upper_on_top_of_bridge "802.1q" "802.1ad" 138} 139 140create_8021ad_vlan_upper_on_top_8021ad_bridge() 141{ 142 RET=0 143 144 create_vlan_upper_on_top_of_bridge "802.1ad" "802.1ad" 145} 146 147create_vlan_upper_on_top_8021ad_bridge() 148{ 149 RET=0 150 151 create_vlan_upper_on_top_of_bridge "802.1ad" "802.1q" 152} 153 154create_vlan_upper_on_top_front_panel_enslaved_to_8021ad_bridge() 155{ 156 RET=0 157 158 ip link add dev br0 type bridge vlan_filtering 1 \ 159 vlan_protocol 802.1ad vlan_default_pvid 0 mcast_snooping 0 160 ip link set dev br0 addrgenmode none 161 ip link set dev br0 up 162 163 ip link set dev $swp1 master br0 164 165 ip link add name $swp1.100 link $swp1 type vlan id 100 2>/dev/null 166 check_fail $? "vlan upper creation on top of front panel enslaved to 802.1ad bridge not rejected" 167 168 ip link add name $swp1.100 link $swp1 type vlan id 100 2>&1 >/dev/null \ 169 | grep -q mlxsw_spectrum 170 check_err $? "vlan upper creation on top of front panel enslaved to 802.1ad bridge rejected without extack" 171 172 log_test "create vlan upper on top of front panel enslaved to 802.1ad bridge" 173 174 ip link del dev br0 175} 176 177create_vlan_upper_on_top_lag_enslaved_to_8021ad_bridge() 178{ 179 RET=0 180 181 ip link add dev br0 type bridge vlan_filtering 1 \ 182 vlan_protocol 802.1ad vlan_default_pvid 0 mcast_snooping 0 183 ip link set dev br0 addrgenmode none 184 ip link set dev br0 up 185 186 ip link add name bond1 type bond mode 802.3ad 187 ip link set dev $swp1 down 188 ip link set dev $swp1 master bond1 189 ip link set dev bond1 master br0 190 191 ip link add name bond1.100 link bond1 type vlan id 100 2>/dev/null 192 check_fail $? "vlan upper creation on top of lag enslaved to 802.1ad bridge not rejected" 193 194 ip link add name bond1.100 link bond1 type vlan id 100 2>&1 >/dev/null \ 195 | grep -q mlxsw_spectrum 196 check_err $? "vlan upper creation on top of lag enslaved to 802.1ad bridge rejected without extack" 197 198 log_test "create vlan upper on top of lag enslaved to 802.1ad bridge" 199 200 ip link del dev bond1 201 ip link del dev br0 202} 203 204enslave_front_panel_with_vlan_upper_to_8021ad_bridge() 205{ 206 RET=0 207 208 ip link add dev br0 type bridge vlan_filtering 1 \ 209 vlan_protocol 802.1ad vlan_default_pvid 0 mcast_snooping 0 210 ip link set dev br0 addrgenmode none 211 ip link set dev br0 up 212 213 ip link add name $swp1.100 link $swp1 type vlan id 100 214 215 ip link set dev $swp1 master br0 2>/dev/null 216 check_fail $? "front panel with vlan upper enslavemnt to 802.1ad bridge not rejected" 217 218 ip link set dev $swp1 master br0 2>&1 >/dev/null | grep -q mlxsw_spectrum 219 check_err $? "front panel with vlan upper enslavemnt to 802.1ad bridge rejected without extack" 220 221 log_test "enslave front panel with vlan upper to 802.1ad bridge" 222 223 ip link del dev $swp1.100 224 ip link del dev br0 225} 226 227enslave_lag_with_vlan_upper_to_8021ad_bridge() 228{ 229 RET=0 230 231 ip link add dev br0 type bridge vlan_filtering 1 \ 232 vlan_protocol 802.1ad vlan_default_pvid 0 mcast_snooping 0 233 ip link set dev br0 addrgenmode none 234 ip link set dev br0 up 235 236 ip link add name bond1 type bond mode 802.3ad 237 ip link set dev $swp1 down 238 ip link set dev $swp1 master bond1 239 ip link add name bond1.100 link bond1 type vlan id 100 240 241 ip link set dev bond1 master br0 2>/dev/null 242 check_fail $? "lag with vlan upper enslavemnt to 802.1ad bridge not rejected" 243 244 ip link set dev bond1 master br0 2>&1 >/dev/null \ 245 | grep -q mlxsw_spectrum 246 check_err $? "lag with vlan upper enslavemnt to 802.1ad bridge rejected without extack" 247 248 log_test "enslave lag with vlan upper to 802.1ad bridge" 249 250 ip link del dev bond1 251 ip link del dev br0 252} 253 254 255add_ip_address_to_8021ad_bridge() 256{ 257 RET=0 258 259 ip link add dev br0 type bridge vlan_filtering 1 \ 260 vlan_protocol 802.1ad vlan_default_pvid 0 mcast_snooping 0 261 ip link set dev br0 addrgenmode none 262 263 ip link set dev br0 up 264 ip link set dev $swp1 master br0 265 266 ip addr add dev br0 192.0.2.17/28 2>/dev/null 267 check_fail $? "IP address addition to 802.1ad bridge not rejected" 268 269 ip addr add dev br0 192.0.2.17/28 2>&1 >/dev/null | grep -q mlxsw_spectrum 270 check_err $? "IP address addition to 802.1ad bridge rejected without extack" 271 272 log_test "IP address addition to 802.1ad bridge" 273 274 ip link del dev br0 275} 276 277switch_bridge_protocol_from_8021q_to_8021ad() 278{ 279 RET=0 280 281 ip link add dev br0 type bridge vlan_filtering 1 \ 282 vlan_protocol 802.1ad vlan_default_pvid 0 mcast_snooping 0 283 ip link set dev br0 addrgenmode none 284 285 ip link set dev br0 up 286 ip link set dev $swp1 master br0 287 288 ip link set dev br0 type bridge vlan_protocol 802.1q 2>/dev/null 289 check_fail $? "switching bridge protocol from 802.1q to 802.1ad not rejected" 290 291 log_test "switch bridge protocol" 292 293 ip link del dev br0 294} 295 296 297trap cleanup EXIT 298 299setup_prepare 300setup_wait 301 302tests_run 303 304exit $EXIT_STATUS 305