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