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