1008cb2ecSDanielle Ratson#!/bin/bash 2008cb2ecSDanielle Ratson# SPDX-License-Identifier: GPL-2.0 3008cb2ecSDanielle Ratson 4008cb2ecSDanielle Ratsonlib_dir=$(dirname $0)/../../../net/forwarding 5008cb2ecSDanielle Ratson 6008cb2ecSDanielle RatsonALL_TESTS=" 7008cb2ecSDanielle Ratson create_8021ad_vlan_upper_on_top_front_panel_port 8008cb2ecSDanielle Ratson create_8021ad_vlan_upper_on_top_bridge_port 9008cb2ecSDanielle Ratson create_8021ad_vlan_upper_on_top_lag 10008cb2ecSDanielle Ratson create_8021ad_vlan_upper_on_top_bridge 11008cb2ecSDanielle Ratson create_8021ad_vlan_upper_on_top_8021ad_bridge 12008cb2ecSDanielle Ratson create_vlan_upper_on_top_8021ad_bridge 13008cb2ecSDanielle Ratson create_vlan_upper_on_top_front_panel_enslaved_to_8021ad_bridge 14008cb2ecSDanielle Ratson create_vlan_upper_on_top_lag_enslaved_to_8021ad_bridge 15008cb2ecSDanielle Ratson enslave_front_panel_with_vlan_upper_to_8021ad_bridge 16008cb2ecSDanielle Ratson enslave_lag_with_vlan_upper_to_8021ad_bridge 17008cb2ecSDanielle Ratson add_ip_address_to_8021ad_bridge 18008cb2ecSDanielle Ratson switch_bridge_protocol_from_8021q_to_8021ad 19008cb2ecSDanielle Ratson" 20008cb2ecSDanielle RatsonNUM_NETIFS=2 21008cb2ecSDanielle Ratsonsource $lib_dir/lib.sh 22008cb2ecSDanielle Ratson 23008cb2ecSDanielle Ratsonsetup_prepare() 24008cb2ecSDanielle Ratson{ 25008cb2ecSDanielle Ratson swp1=${NETIFS[p1]} 26008cb2ecSDanielle Ratson swp2=${NETIFS[p2]} 27008cb2ecSDanielle Ratson 28008cb2ecSDanielle Ratson ip link set dev $swp1 up 29008cb2ecSDanielle Ratson ip link set dev $swp2 up 30008cb2ecSDanielle Ratson 31008cb2ecSDanielle Ratson sleep 10 32008cb2ecSDanielle Ratson} 33008cb2ecSDanielle Ratson 34008cb2ecSDanielle Ratsoncleanup() 35008cb2ecSDanielle Ratson{ 36008cb2ecSDanielle Ratson pre_cleanup 37008cb2ecSDanielle Ratson 38008cb2ecSDanielle Ratson ip link set dev $swp2 down 39008cb2ecSDanielle Ratson ip link set dev $swp1 down 40008cb2ecSDanielle Ratson} 41008cb2ecSDanielle Ratson 42008cb2ecSDanielle Ratsoncreate_vlan_upper_on_top_of_bridge() 43008cb2ecSDanielle Ratson{ 44008cb2ecSDanielle Ratson RET=0 45008cb2ecSDanielle Ratson 46008cb2ecSDanielle Ratson local bridge_proto=$1; shift 47008cb2ecSDanielle Ratson local netdev_proto=$1; shift 48008cb2ecSDanielle Ratson 49008cb2ecSDanielle Ratson ip link add dev br0 type bridge vlan_filtering 1 \ 50008cb2ecSDanielle Ratson vlan_protocol $bridge_proto vlan_default_pvid 0 mcast_snooping 0 51*8cfdd300SPetr Machata ip link set dev br0 addrgenmode none 52008cb2ecSDanielle Ratson 53008cb2ecSDanielle Ratson ip link set dev br0 up 54008cb2ecSDanielle Ratson ip link set dev $swp1 master br0 55008cb2ecSDanielle Ratson 56008cb2ecSDanielle Ratson ip link add name br0.100 link br0 type vlan \ 57008cb2ecSDanielle Ratson protocol $netdev_proto id 100 2>/dev/null 58008cb2ecSDanielle Ratson check_fail $? "$netdev_proto vlan upper creation on top of an $bridge_proto bridge not rejected" 59008cb2ecSDanielle Ratson 60008cb2ecSDanielle Ratson ip link add name br0.100 link br0 type vlan \ 61008cb2ecSDanielle Ratson protocol $netdev_proto id 100 2>&1 >/dev/null \ 62008cb2ecSDanielle Ratson | grep -q mlxsw_spectrum 63008cb2ecSDanielle Ratson check_err $? "$netdev_proto vlan upper creation on top of an $bridge_proto bridge rejected without extack" 64008cb2ecSDanielle Ratson 65008cb2ecSDanielle Ratson log_test "create $netdev_proto vlan upper on top $bridge_proto bridge" 66008cb2ecSDanielle Ratson 67008cb2ecSDanielle Ratson ip link del dev br0 68008cb2ecSDanielle Ratson} 69008cb2ecSDanielle Ratson 70008cb2ecSDanielle Ratsoncreate_8021ad_vlan_upper_on_top_front_panel_port() 71008cb2ecSDanielle Ratson{ 72008cb2ecSDanielle Ratson RET=0 73008cb2ecSDanielle Ratson 74008cb2ecSDanielle Ratson ip link add name $swp1.100 link $swp1 type vlan \ 75008cb2ecSDanielle Ratson protocol 802.1ad id 100 2>/dev/null 76008cb2ecSDanielle Ratson check_fail $? "802.1ad vlan upper creation on top of a front panel not rejected" 77008cb2ecSDanielle Ratson 78008cb2ecSDanielle Ratson ip link add name $swp1.100 link $swp1 type vlan \ 79008cb2ecSDanielle Ratson protocol 802.1ad id 100 2>&1 >/dev/null \ 80008cb2ecSDanielle Ratson | grep -q mlxsw_spectrum 81008cb2ecSDanielle Ratson check_err $? "802.1ad vlan upper creation on top of a front panel rejected without extack" 82008cb2ecSDanielle Ratson 83008cb2ecSDanielle Ratson log_test "create 802.1ad vlan upper on top of a front panel" 84008cb2ecSDanielle Ratson} 85008cb2ecSDanielle Ratson 86008cb2ecSDanielle Ratsoncreate_8021ad_vlan_upper_on_top_bridge_port() 87008cb2ecSDanielle Ratson{ 88008cb2ecSDanielle Ratson RET=0 89008cb2ecSDanielle Ratson 90008cb2ecSDanielle Ratson ip link add dev br0 type bridge vlan_filtering 1 \ 91008cb2ecSDanielle Ratson vlan_default_pvid 0 mcast_snooping 0 92*8cfdd300SPetr Machata ip link set dev br0 addrgenmode none 93008cb2ecSDanielle Ratson 94008cb2ecSDanielle Ratson ip link set dev $swp1 master br0 95008cb2ecSDanielle Ratson ip link set dev br0 up 96008cb2ecSDanielle Ratson 97008cb2ecSDanielle Ratson ip link add name $swp1.100 link $swp1 type vlan \ 98008cb2ecSDanielle Ratson protocol 802.1ad id 100 2>/dev/null 99008cb2ecSDanielle Ratson check_fail $? "802.1ad vlan upper creation on top of a bridge port not rejected" 100008cb2ecSDanielle Ratson 101008cb2ecSDanielle Ratson ip link add name $swp1.100 link $swp1 type vlan \ 102008cb2ecSDanielle Ratson protocol 802.1ad id 100 2>&1 >/dev/null \ 103008cb2ecSDanielle Ratson | grep -q mlxsw_spectrum 104008cb2ecSDanielle Ratson check_err $? "802.1ad vlan upper creation on top of a bridge port rejected without extack" 105008cb2ecSDanielle Ratson 106008cb2ecSDanielle Ratson log_test "create 802.1ad vlan upper on top of a bridge port" 107008cb2ecSDanielle Ratson 108008cb2ecSDanielle Ratson ip link del dev br0 109008cb2ecSDanielle Ratson} 110008cb2ecSDanielle Ratson 111008cb2ecSDanielle Ratsoncreate_8021ad_vlan_upper_on_top_lag() 112008cb2ecSDanielle Ratson{ 113008cb2ecSDanielle Ratson RET=0 114008cb2ecSDanielle Ratson 115008cb2ecSDanielle Ratson ip link add name bond1 type bond mode 802.3ad 116008cb2ecSDanielle Ratson ip link set dev $swp1 down 117008cb2ecSDanielle Ratson ip link set dev $swp1 master bond1 118008cb2ecSDanielle Ratson 119008cb2ecSDanielle Ratson ip link add name bond1.100 link bond1 type vlan \ 120008cb2ecSDanielle Ratson protocol 802.1ad id 100 2>/dev/null 121008cb2ecSDanielle Ratson check_fail $? "802.1ad vlan upper creation on top of a lag not rejected" 122008cb2ecSDanielle Ratson 123008cb2ecSDanielle Ratson ip link add name bond1.100 link bond1 type vlan \ 124008cb2ecSDanielle Ratson protocol 802.1ad id 100 2>&1 >/dev/null \ 125008cb2ecSDanielle Ratson | grep -q mlxsw_spectrum 126008cb2ecSDanielle Ratson check_err $? "802.1ad vlan upper creation on top of a lag rejected without extack" 127008cb2ecSDanielle Ratson 128008cb2ecSDanielle Ratson log_test "create 802.1ad vlan upper on top of a lag" 129008cb2ecSDanielle Ratson 130008cb2ecSDanielle Ratson ip link del dev bond1 131008cb2ecSDanielle Ratson} 132008cb2ecSDanielle Ratson 133008cb2ecSDanielle Ratsoncreate_8021ad_vlan_upper_on_top_bridge() 134008cb2ecSDanielle Ratson{ 135008cb2ecSDanielle Ratson RET=0 136008cb2ecSDanielle Ratson 137008cb2ecSDanielle Ratson create_vlan_upper_on_top_of_bridge "802.1q" "802.1ad" 138008cb2ecSDanielle Ratson} 139008cb2ecSDanielle Ratson 140008cb2ecSDanielle Ratsoncreate_8021ad_vlan_upper_on_top_8021ad_bridge() 141008cb2ecSDanielle Ratson{ 142008cb2ecSDanielle Ratson RET=0 143008cb2ecSDanielle Ratson 144008cb2ecSDanielle Ratson create_vlan_upper_on_top_of_bridge "802.1ad" "802.1ad" 145008cb2ecSDanielle Ratson} 146008cb2ecSDanielle Ratson 147008cb2ecSDanielle Ratsoncreate_vlan_upper_on_top_8021ad_bridge() 148008cb2ecSDanielle Ratson{ 149008cb2ecSDanielle Ratson RET=0 150008cb2ecSDanielle Ratson 151008cb2ecSDanielle Ratson create_vlan_upper_on_top_of_bridge "802.1ad" "802.1q" 152008cb2ecSDanielle Ratson} 153008cb2ecSDanielle Ratson 154008cb2ecSDanielle Ratsoncreate_vlan_upper_on_top_front_panel_enslaved_to_8021ad_bridge() 155008cb2ecSDanielle Ratson{ 156008cb2ecSDanielle Ratson RET=0 157008cb2ecSDanielle Ratson 158008cb2ecSDanielle Ratson ip link add dev br0 type bridge vlan_filtering 1 \ 159008cb2ecSDanielle Ratson vlan_protocol 802.1ad vlan_default_pvid 0 mcast_snooping 0 160*8cfdd300SPetr Machata ip link set dev br0 addrgenmode none 161008cb2ecSDanielle Ratson ip link set dev br0 up 162008cb2ecSDanielle Ratson 163008cb2ecSDanielle Ratson ip link set dev $swp1 master br0 164008cb2ecSDanielle Ratson 165008cb2ecSDanielle Ratson ip link add name $swp1.100 link $swp1 type vlan id 100 2>/dev/null 166008cb2ecSDanielle Ratson check_fail $? "vlan upper creation on top of front panel enslaved to 802.1ad bridge not rejected" 167008cb2ecSDanielle Ratson 168008cb2ecSDanielle Ratson ip link add name $swp1.100 link $swp1 type vlan id 100 2>&1 >/dev/null \ 169008cb2ecSDanielle Ratson | grep -q mlxsw_spectrum 170008cb2ecSDanielle Ratson check_err $? "vlan upper creation on top of front panel enslaved to 802.1ad bridge rejected without extack" 171008cb2ecSDanielle Ratson 172008cb2ecSDanielle Ratson log_test "create vlan upper on top of front panel enslaved to 802.1ad bridge" 173008cb2ecSDanielle Ratson 174008cb2ecSDanielle Ratson ip link del dev br0 175008cb2ecSDanielle Ratson} 176008cb2ecSDanielle Ratson 177008cb2ecSDanielle Ratsoncreate_vlan_upper_on_top_lag_enslaved_to_8021ad_bridge() 178008cb2ecSDanielle Ratson{ 179008cb2ecSDanielle Ratson RET=0 180008cb2ecSDanielle Ratson 181008cb2ecSDanielle Ratson ip link add dev br0 type bridge vlan_filtering 1 \ 182008cb2ecSDanielle Ratson vlan_protocol 802.1ad vlan_default_pvid 0 mcast_snooping 0 183*8cfdd300SPetr Machata ip link set dev br0 addrgenmode none 184008cb2ecSDanielle Ratson ip link set dev br0 up 185008cb2ecSDanielle Ratson 186008cb2ecSDanielle Ratson ip link add name bond1 type bond mode 802.3ad 187008cb2ecSDanielle Ratson ip link set dev $swp1 down 188008cb2ecSDanielle Ratson ip link set dev $swp1 master bond1 189008cb2ecSDanielle Ratson ip link set dev bond1 master br0 190008cb2ecSDanielle Ratson 191008cb2ecSDanielle Ratson ip link add name bond1.100 link bond1 type vlan id 100 2>/dev/null 192008cb2ecSDanielle Ratson check_fail $? "vlan upper creation on top of lag enslaved to 802.1ad bridge not rejected" 193008cb2ecSDanielle Ratson 194008cb2ecSDanielle Ratson ip link add name bond1.100 link bond1 type vlan id 100 2>&1 >/dev/null \ 195008cb2ecSDanielle Ratson | grep -q mlxsw_spectrum 196008cb2ecSDanielle Ratson check_err $? "vlan upper creation on top of lag enslaved to 802.1ad bridge rejected without extack" 197008cb2ecSDanielle Ratson 198008cb2ecSDanielle Ratson log_test "create vlan upper on top of lag enslaved to 802.1ad bridge" 199008cb2ecSDanielle Ratson 200008cb2ecSDanielle Ratson ip link del dev bond1 201008cb2ecSDanielle Ratson ip link del dev br0 202008cb2ecSDanielle Ratson} 203008cb2ecSDanielle Ratson 204008cb2ecSDanielle Ratsonenslave_front_panel_with_vlan_upper_to_8021ad_bridge() 205008cb2ecSDanielle Ratson{ 206008cb2ecSDanielle Ratson RET=0 207008cb2ecSDanielle Ratson 208008cb2ecSDanielle Ratson ip link add dev br0 type bridge vlan_filtering 1 \ 209008cb2ecSDanielle Ratson vlan_protocol 802.1ad vlan_default_pvid 0 mcast_snooping 0 210*8cfdd300SPetr Machata ip link set dev br0 addrgenmode none 211008cb2ecSDanielle Ratson ip link set dev br0 up 212008cb2ecSDanielle Ratson 213008cb2ecSDanielle Ratson ip link add name $swp1.100 link $swp1 type vlan id 100 214008cb2ecSDanielle Ratson 215008cb2ecSDanielle Ratson ip link set dev $swp1 master br0 2>/dev/null 216008cb2ecSDanielle Ratson check_fail $? "front panel with vlan upper enslavemnt to 802.1ad bridge not rejected" 217008cb2ecSDanielle Ratson 218008cb2ecSDanielle Ratson ip link set dev $swp1 master br0 2>&1 >/dev/null | grep -q mlxsw_spectrum 219008cb2ecSDanielle Ratson check_err $? "front panel with vlan upper enslavemnt to 802.1ad bridge rejected without extack" 220008cb2ecSDanielle Ratson 221008cb2ecSDanielle Ratson log_test "enslave front panel with vlan upper to 802.1ad bridge" 222008cb2ecSDanielle Ratson 223008cb2ecSDanielle Ratson ip link del dev $swp1.100 224008cb2ecSDanielle Ratson ip link del dev br0 225008cb2ecSDanielle Ratson} 226008cb2ecSDanielle Ratson 227008cb2ecSDanielle Ratsonenslave_lag_with_vlan_upper_to_8021ad_bridge() 228008cb2ecSDanielle Ratson{ 229008cb2ecSDanielle Ratson RET=0 230008cb2ecSDanielle Ratson 231008cb2ecSDanielle Ratson ip link add dev br0 type bridge vlan_filtering 1 \ 232008cb2ecSDanielle Ratson vlan_protocol 802.1ad vlan_default_pvid 0 mcast_snooping 0 233*8cfdd300SPetr Machata ip link set dev br0 addrgenmode none 234008cb2ecSDanielle Ratson ip link set dev br0 up 235008cb2ecSDanielle Ratson 236008cb2ecSDanielle Ratson ip link add name bond1 type bond mode 802.3ad 237008cb2ecSDanielle Ratson ip link set dev $swp1 down 238008cb2ecSDanielle Ratson ip link set dev $swp1 master bond1 239008cb2ecSDanielle Ratson ip link add name bond1.100 link bond1 type vlan id 100 240008cb2ecSDanielle Ratson 241008cb2ecSDanielle Ratson ip link set dev bond1 master br0 2>/dev/null 242008cb2ecSDanielle Ratson check_fail $? "lag with vlan upper enslavemnt to 802.1ad bridge not rejected" 243008cb2ecSDanielle Ratson 244008cb2ecSDanielle Ratson ip link set dev bond1 master br0 2>&1 >/dev/null \ 245008cb2ecSDanielle Ratson | grep -q mlxsw_spectrum 246008cb2ecSDanielle Ratson check_err $? "lag with vlan upper enslavemnt to 802.1ad bridge rejected without extack" 247008cb2ecSDanielle Ratson 248008cb2ecSDanielle Ratson log_test "enslave lag with vlan upper to 802.1ad bridge" 249008cb2ecSDanielle Ratson 250008cb2ecSDanielle Ratson ip link del dev bond1 251008cb2ecSDanielle Ratson ip link del dev br0 252008cb2ecSDanielle Ratson} 253008cb2ecSDanielle Ratson 254008cb2ecSDanielle Ratson 255008cb2ecSDanielle Ratsonadd_ip_address_to_8021ad_bridge() 256008cb2ecSDanielle Ratson{ 257008cb2ecSDanielle Ratson RET=0 258008cb2ecSDanielle Ratson 259008cb2ecSDanielle Ratson ip link add dev br0 type bridge vlan_filtering 1 \ 260008cb2ecSDanielle Ratson vlan_protocol 802.1ad vlan_default_pvid 0 mcast_snooping 0 261*8cfdd300SPetr Machata ip link set dev br0 addrgenmode none 262008cb2ecSDanielle Ratson 263008cb2ecSDanielle Ratson ip link set dev br0 up 264008cb2ecSDanielle Ratson ip link set dev $swp1 master br0 265008cb2ecSDanielle Ratson 266008cb2ecSDanielle Ratson ip addr add dev br0 192.0.2.17/28 2>/dev/null 267008cb2ecSDanielle Ratson check_fail $? "IP address addition to 802.1ad bridge not rejected" 268008cb2ecSDanielle Ratson 269008cb2ecSDanielle Ratson ip addr add dev br0 192.0.2.17/28 2>&1 >/dev/null | grep -q mlxsw_spectrum 270008cb2ecSDanielle Ratson check_err $? "IP address addition to 802.1ad bridge rejected without extack" 271008cb2ecSDanielle Ratson 272008cb2ecSDanielle Ratson log_test "IP address addition to 802.1ad bridge" 273008cb2ecSDanielle Ratson 274008cb2ecSDanielle Ratson ip link del dev br0 275008cb2ecSDanielle Ratson} 276008cb2ecSDanielle Ratson 277008cb2ecSDanielle Ratsonswitch_bridge_protocol_from_8021q_to_8021ad() 278008cb2ecSDanielle Ratson{ 279008cb2ecSDanielle Ratson RET=0 280008cb2ecSDanielle Ratson 281008cb2ecSDanielle Ratson ip link add dev br0 type bridge vlan_filtering 1 \ 282008cb2ecSDanielle Ratson vlan_protocol 802.1ad vlan_default_pvid 0 mcast_snooping 0 283*8cfdd300SPetr Machata ip link set dev br0 addrgenmode none 284008cb2ecSDanielle Ratson 285008cb2ecSDanielle Ratson ip link set dev br0 up 286008cb2ecSDanielle Ratson ip link set dev $swp1 master br0 287008cb2ecSDanielle Ratson 288008cb2ecSDanielle Ratson ip link set dev br0 type bridge vlan_protocol 802.1q 2>/dev/null 289008cb2ecSDanielle Ratson check_fail $? "switching bridge protocol from 802.1q to 802.1ad not rejected" 290008cb2ecSDanielle Ratson 291008cb2ecSDanielle Ratson log_test "switch bridge protocol" 292008cb2ecSDanielle Ratson 293008cb2ecSDanielle Ratson ip link del dev br0 294008cb2ecSDanielle Ratson} 295008cb2ecSDanielle Ratson 296008cb2ecSDanielle Ratson 297008cb2ecSDanielle Ratsontrap cleanup EXIT 298008cb2ecSDanielle Ratson 299008cb2ecSDanielle Ratsonsetup_prepare 300008cb2ecSDanielle Ratsonsetup_wait 301008cb2ecSDanielle Ratson 302008cb2ecSDanielle Ratsontests_run 303008cb2ecSDanielle Ratson 304008cb2ecSDanielle Ratsonexit $EXIT_STATUS 305