xref: /OK3568_Linux_fs/kernel/tools/testing/selftests/drivers/net/mlxsw/vxlan.sh (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun#!/bin/bash
2*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0
3*4882a593Smuzhiyun#
4*4882a593Smuzhiyun# Test various aspects of VxLAN offloading which are specific to mlxsw, such
5*4882a593Smuzhiyun# as sanitization of invalid configurations and offload indication.
6*4882a593Smuzhiyun
7*4882a593Smuzhiyunlib_dir=$(dirname $0)/../../../net/forwarding
8*4882a593Smuzhiyun
9*4882a593SmuzhiyunALL_TESTS="sanitization_test offload_indication_test \
10*4882a593Smuzhiyun	sanitization_vlan_aware_test offload_indication_vlan_aware_test"
11*4882a593SmuzhiyunNUM_NETIFS=2
12*4882a593Smuzhiyun: ${TIMEOUT:=20000} # ms
13*4882a593Smuzhiyunsource $lib_dir/lib.sh
14*4882a593Smuzhiyun
15*4882a593Smuzhiyunsetup_prepare()
16*4882a593Smuzhiyun{
17*4882a593Smuzhiyun	swp1=${NETIFS[p1]}
18*4882a593Smuzhiyun	swp2=${NETIFS[p2]}
19*4882a593Smuzhiyun
20*4882a593Smuzhiyun	ip link set dev $swp1 up
21*4882a593Smuzhiyun	ip link set dev $swp2 up
22*4882a593Smuzhiyun}
23*4882a593Smuzhiyun
24*4882a593Smuzhiyuncleanup()
25*4882a593Smuzhiyun{
26*4882a593Smuzhiyun	pre_cleanup
27*4882a593Smuzhiyun
28*4882a593Smuzhiyun	ip link set dev $swp2 down
29*4882a593Smuzhiyun	ip link set dev $swp1 down
30*4882a593Smuzhiyun}
31*4882a593Smuzhiyun
32*4882a593Smuzhiyunsanitization_single_dev_test_pass()
33*4882a593Smuzhiyun{
34*4882a593Smuzhiyun	ip link set dev $swp1 master br0
35*4882a593Smuzhiyun	check_err $?
36*4882a593Smuzhiyun	ip link set dev vxlan0 master br0
37*4882a593Smuzhiyun	check_err $?
38*4882a593Smuzhiyun
39*4882a593Smuzhiyun	ip link set dev $swp1 nomaster
40*4882a593Smuzhiyun
41*4882a593Smuzhiyun	ip link set dev $swp1 master br0
42*4882a593Smuzhiyun	check_err $?
43*4882a593Smuzhiyun}
44*4882a593Smuzhiyun
45*4882a593Smuzhiyunsanitization_single_dev_test_fail()
46*4882a593Smuzhiyun{
47*4882a593Smuzhiyun	ip link set dev $swp1 master br0
48*4882a593Smuzhiyun	check_err $?
49*4882a593Smuzhiyun	ip link set dev vxlan0 master br0 &> /dev/null
50*4882a593Smuzhiyun	check_fail $?
51*4882a593Smuzhiyun
52*4882a593Smuzhiyun	ip link set dev $swp1 nomaster
53*4882a593Smuzhiyun
54*4882a593Smuzhiyun	ip link set dev vxlan0 master br0
55*4882a593Smuzhiyun	check_err $?
56*4882a593Smuzhiyun	ip link set dev $swp1 master br0 &> /dev/null
57*4882a593Smuzhiyun	check_fail $?
58*4882a593Smuzhiyun}
59*4882a593Smuzhiyun
60*4882a593Smuzhiyunsanitization_single_dev_valid_test()
61*4882a593Smuzhiyun{
62*4882a593Smuzhiyun	RET=0
63*4882a593Smuzhiyun
64*4882a593Smuzhiyun	ip link add dev br0 type bridge mcast_snooping 0
65*4882a593Smuzhiyun
66*4882a593Smuzhiyun	ip link add name vxlan0 up type vxlan id 10 nolearning noudpcsum \
67*4882a593Smuzhiyun		ttl 20 tos inherit local 198.51.100.1 dstport 4789
68*4882a593Smuzhiyun
69*4882a593Smuzhiyun	sanitization_single_dev_test_pass
70*4882a593Smuzhiyun
71*4882a593Smuzhiyun	ip link del dev vxlan0
72*4882a593Smuzhiyun	ip link del dev br0
73*4882a593Smuzhiyun
74*4882a593Smuzhiyun	log_test "vxlan device - valid configuration"
75*4882a593Smuzhiyun}
76*4882a593Smuzhiyun
77*4882a593Smuzhiyunsanitization_single_dev_vlan_aware_test()
78*4882a593Smuzhiyun{
79*4882a593Smuzhiyun	RET=0
80*4882a593Smuzhiyun
81*4882a593Smuzhiyun	ip link add dev br0 type bridge mcast_snooping 0 vlan_filtering 1
82*4882a593Smuzhiyun
83*4882a593Smuzhiyun	ip link add name vxlan0 up type vxlan id 10 nolearning noudpcsum \
84*4882a593Smuzhiyun		ttl 20 tos inherit local 198.51.100.1 dstport 4789
85*4882a593Smuzhiyun
86*4882a593Smuzhiyun	sanitization_single_dev_test_pass
87*4882a593Smuzhiyun
88*4882a593Smuzhiyun	ip link del dev vxlan0
89*4882a593Smuzhiyun	ip link del dev br0
90*4882a593Smuzhiyun
91*4882a593Smuzhiyun	log_test "vxlan device with a vlan-aware bridge"
92*4882a593Smuzhiyun}
93*4882a593Smuzhiyun
94*4882a593Smuzhiyunsanitization_single_dev_mcast_enabled_test()
95*4882a593Smuzhiyun{
96*4882a593Smuzhiyun	RET=0
97*4882a593Smuzhiyun
98*4882a593Smuzhiyun	ip link add dev br0 type bridge
99*4882a593Smuzhiyun
100*4882a593Smuzhiyun	ip link add name vxlan0 up type vxlan id 10 nolearning noudpcsum \
101*4882a593Smuzhiyun		ttl 20 tos inherit local 198.51.100.1 dstport 4789
102*4882a593Smuzhiyun
103*4882a593Smuzhiyun	sanitization_single_dev_test_fail
104*4882a593Smuzhiyun
105*4882a593Smuzhiyun	ip link del dev vxlan0
106*4882a593Smuzhiyun	ip link del dev br0
107*4882a593Smuzhiyun
108*4882a593Smuzhiyun	log_test "vxlan device with a multicast enabled bridge"
109*4882a593Smuzhiyun}
110*4882a593Smuzhiyun
111*4882a593Smuzhiyunsanitization_single_dev_mcast_group_test()
112*4882a593Smuzhiyun{
113*4882a593Smuzhiyun	RET=0
114*4882a593Smuzhiyun
115*4882a593Smuzhiyun	ip link add dev br0 type bridge mcast_snooping 0
116*4882a593Smuzhiyun	ip link add name dummy1 up type dummy
117*4882a593Smuzhiyun
118*4882a593Smuzhiyun	ip link add name vxlan0 up type vxlan id 10 nolearning noudpcsum \
119*4882a593Smuzhiyun		ttl 20 tos inherit local 198.51.100.1 dstport 4789 \
120*4882a593Smuzhiyun		dev dummy1 group 239.0.0.1
121*4882a593Smuzhiyun
122*4882a593Smuzhiyun	sanitization_single_dev_test_fail
123*4882a593Smuzhiyun
124*4882a593Smuzhiyun	ip link del dev vxlan0
125*4882a593Smuzhiyun	ip link del dev dummy1
126*4882a593Smuzhiyun	ip link del dev br0
127*4882a593Smuzhiyun
128*4882a593Smuzhiyun	log_test "vxlan device with a multicast group"
129*4882a593Smuzhiyun}
130*4882a593Smuzhiyun
131*4882a593Smuzhiyunsanitization_single_dev_no_local_ip_test()
132*4882a593Smuzhiyun{
133*4882a593Smuzhiyun	RET=0
134*4882a593Smuzhiyun
135*4882a593Smuzhiyun	ip link add dev br0 type bridge mcast_snooping 0
136*4882a593Smuzhiyun
137*4882a593Smuzhiyun	ip link add name vxlan0 up type vxlan id 10 nolearning noudpcsum \
138*4882a593Smuzhiyun		ttl 20 tos inherit dstport 4789
139*4882a593Smuzhiyun
140*4882a593Smuzhiyun	sanitization_single_dev_test_fail
141*4882a593Smuzhiyun
142*4882a593Smuzhiyun	ip link del dev vxlan0
143*4882a593Smuzhiyun	ip link del dev br0
144*4882a593Smuzhiyun
145*4882a593Smuzhiyun	log_test "vxlan device with no local ip"
146*4882a593Smuzhiyun}
147*4882a593Smuzhiyun
148*4882a593Smuzhiyunsanitization_single_dev_local_ipv6_test()
149*4882a593Smuzhiyun{
150*4882a593Smuzhiyun	RET=0
151*4882a593Smuzhiyun
152*4882a593Smuzhiyun	ip link add dev br0 type bridge mcast_snooping 0
153*4882a593Smuzhiyun
154*4882a593Smuzhiyun	ip link add name vxlan0 up type vxlan id 10 nolearning noudpcsum \
155*4882a593Smuzhiyun		ttl 20 tos inherit local 2001:db8::1 dstport 4789
156*4882a593Smuzhiyun
157*4882a593Smuzhiyun	sanitization_single_dev_test_fail
158*4882a593Smuzhiyun
159*4882a593Smuzhiyun	ip link del dev vxlan0
160*4882a593Smuzhiyun	ip link del dev br0
161*4882a593Smuzhiyun
162*4882a593Smuzhiyun	log_test "vxlan device with local ipv6 address"
163*4882a593Smuzhiyun}
164*4882a593Smuzhiyun
165*4882a593Smuzhiyunsanitization_single_dev_learning_enabled_test()
166*4882a593Smuzhiyun{
167*4882a593Smuzhiyun	RET=0
168*4882a593Smuzhiyun
169*4882a593Smuzhiyun	ip link add dev br0 type bridge mcast_snooping 0
170*4882a593Smuzhiyun
171*4882a593Smuzhiyun	ip link add name vxlan0 up type vxlan id 10 learning noudpcsum \
172*4882a593Smuzhiyun		ttl 20 tos inherit local 198.51.100.1 dstport 4789
173*4882a593Smuzhiyun
174*4882a593Smuzhiyun	sanitization_single_dev_test_pass
175*4882a593Smuzhiyun
176*4882a593Smuzhiyun	ip link del dev vxlan0
177*4882a593Smuzhiyun	ip link del dev br0
178*4882a593Smuzhiyun
179*4882a593Smuzhiyun	log_test "vxlan device with learning enabled"
180*4882a593Smuzhiyun}
181*4882a593Smuzhiyun
182*4882a593Smuzhiyunsanitization_single_dev_local_interface_test()
183*4882a593Smuzhiyun{
184*4882a593Smuzhiyun	RET=0
185*4882a593Smuzhiyun
186*4882a593Smuzhiyun	ip link add dev br0 type bridge mcast_snooping 0
187*4882a593Smuzhiyun	ip link add name dummy1 up type dummy
188*4882a593Smuzhiyun
189*4882a593Smuzhiyun	ip link add name vxlan0 up type vxlan id 10 nolearning noudpcsum \
190*4882a593Smuzhiyun		ttl 20 tos inherit local 198.51.100.1 dstport 4789 dev dummy1
191*4882a593Smuzhiyun
192*4882a593Smuzhiyun	sanitization_single_dev_test_fail
193*4882a593Smuzhiyun
194*4882a593Smuzhiyun	ip link del dev vxlan0
195*4882a593Smuzhiyun	ip link del dev dummy1
196*4882a593Smuzhiyun	ip link del dev br0
197*4882a593Smuzhiyun
198*4882a593Smuzhiyun	log_test "vxlan device with local interface"
199*4882a593Smuzhiyun}
200*4882a593Smuzhiyun
201*4882a593Smuzhiyunsanitization_single_dev_port_range_test()
202*4882a593Smuzhiyun{
203*4882a593Smuzhiyun	RET=0
204*4882a593Smuzhiyun
205*4882a593Smuzhiyun	ip link add dev br0 type bridge mcast_snooping 0
206*4882a593Smuzhiyun
207*4882a593Smuzhiyun	ip link add name vxlan0 up type vxlan id 10 nolearning noudpcsum \
208*4882a593Smuzhiyun		ttl 20 tos inherit local 198.51.100.1 dstport 4789 \
209*4882a593Smuzhiyun		srcport 4000 5000
210*4882a593Smuzhiyun
211*4882a593Smuzhiyun	sanitization_single_dev_test_fail
212*4882a593Smuzhiyun
213*4882a593Smuzhiyun	ip link del dev vxlan0
214*4882a593Smuzhiyun	ip link del dev br0
215*4882a593Smuzhiyun
216*4882a593Smuzhiyun	log_test "vxlan device with udp source port range"
217*4882a593Smuzhiyun}
218*4882a593Smuzhiyun
219*4882a593Smuzhiyunsanitization_single_dev_tos_static_test()
220*4882a593Smuzhiyun{
221*4882a593Smuzhiyun	RET=0
222*4882a593Smuzhiyun
223*4882a593Smuzhiyun	ip link add dev br0 type bridge mcast_snooping 0
224*4882a593Smuzhiyun
225*4882a593Smuzhiyun	ip link add name vxlan0 up type vxlan id 10 nolearning noudpcsum \
226*4882a593Smuzhiyun		ttl 20 tos 20 local 198.51.100.1 dstport 4789
227*4882a593Smuzhiyun
228*4882a593Smuzhiyun	sanitization_single_dev_test_fail
229*4882a593Smuzhiyun
230*4882a593Smuzhiyun	ip link del dev vxlan0
231*4882a593Smuzhiyun	ip link del dev br0
232*4882a593Smuzhiyun
233*4882a593Smuzhiyun	log_test "vxlan device with static tos"
234*4882a593Smuzhiyun}
235*4882a593Smuzhiyun
236*4882a593Smuzhiyunsanitization_single_dev_ttl_inherit_test()
237*4882a593Smuzhiyun{
238*4882a593Smuzhiyun	RET=0
239*4882a593Smuzhiyun
240*4882a593Smuzhiyun	ip link add dev br0 type bridge mcast_snooping 0
241*4882a593Smuzhiyun
242*4882a593Smuzhiyun	ip link add name vxlan0 up type vxlan id 10 nolearning noudpcsum \
243*4882a593Smuzhiyun		ttl inherit tos inherit local 198.51.100.1 dstport 4789
244*4882a593Smuzhiyun
245*4882a593Smuzhiyun	sanitization_single_dev_test_fail
246*4882a593Smuzhiyun
247*4882a593Smuzhiyun	ip link del dev vxlan0
248*4882a593Smuzhiyun	ip link del dev br0
249*4882a593Smuzhiyun
250*4882a593Smuzhiyun	log_test "vxlan device with inherit ttl"
251*4882a593Smuzhiyun}
252*4882a593Smuzhiyun
253*4882a593Smuzhiyunsanitization_single_dev_udp_checksum_test()
254*4882a593Smuzhiyun{
255*4882a593Smuzhiyun	RET=0
256*4882a593Smuzhiyun
257*4882a593Smuzhiyun	ip link add dev br0 type bridge mcast_snooping 0
258*4882a593Smuzhiyun
259*4882a593Smuzhiyun	ip link add name vxlan0 up type vxlan id 10 nolearning udpcsum \
260*4882a593Smuzhiyun		ttl 20 tos inherit local 198.51.100.1 dstport 4789
261*4882a593Smuzhiyun
262*4882a593Smuzhiyun	sanitization_single_dev_test_fail
263*4882a593Smuzhiyun
264*4882a593Smuzhiyun	ip link del dev vxlan0
265*4882a593Smuzhiyun	ip link del dev br0
266*4882a593Smuzhiyun
267*4882a593Smuzhiyun	log_test "vxlan device with udp checksum"
268*4882a593Smuzhiyun}
269*4882a593Smuzhiyun
270*4882a593Smuzhiyunsanitization_single_dev_test()
271*4882a593Smuzhiyun{
272*4882a593Smuzhiyun	# These tests make sure that we correctly sanitize VxLAN device
273*4882a593Smuzhiyun	# configurations we do not support
274*4882a593Smuzhiyun	sanitization_single_dev_valid_test
275*4882a593Smuzhiyun	sanitization_single_dev_vlan_aware_test
276*4882a593Smuzhiyun	sanitization_single_dev_mcast_enabled_test
277*4882a593Smuzhiyun	sanitization_single_dev_mcast_group_test
278*4882a593Smuzhiyun	sanitization_single_dev_no_local_ip_test
279*4882a593Smuzhiyun	sanitization_single_dev_local_ipv6_test
280*4882a593Smuzhiyun	sanitization_single_dev_learning_enabled_test
281*4882a593Smuzhiyun	sanitization_single_dev_local_interface_test
282*4882a593Smuzhiyun	sanitization_single_dev_port_range_test
283*4882a593Smuzhiyun	sanitization_single_dev_tos_static_test
284*4882a593Smuzhiyun	sanitization_single_dev_ttl_inherit_test
285*4882a593Smuzhiyun	sanitization_single_dev_udp_checksum_test
286*4882a593Smuzhiyun}
287*4882a593Smuzhiyun
288*4882a593Smuzhiyunsanitization_multi_devs_test_pass()
289*4882a593Smuzhiyun{
290*4882a593Smuzhiyun	ip link set dev $swp1 master br0
291*4882a593Smuzhiyun	check_err $?
292*4882a593Smuzhiyun	ip link set dev vxlan0 master br0
293*4882a593Smuzhiyun	check_err $?
294*4882a593Smuzhiyun	ip link set dev $swp2 master br1
295*4882a593Smuzhiyun	check_err $?
296*4882a593Smuzhiyun	ip link set dev vxlan1 master br1
297*4882a593Smuzhiyun	check_err $?
298*4882a593Smuzhiyun
299*4882a593Smuzhiyun	ip link set dev $swp2 nomaster
300*4882a593Smuzhiyun	ip link set dev $swp1 nomaster
301*4882a593Smuzhiyun
302*4882a593Smuzhiyun	ip link set dev $swp1 master br0
303*4882a593Smuzhiyun	check_err $?
304*4882a593Smuzhiyun	ip link set dev $swp2 master br1
305*4882a593Smuzhiyun	check_err $?
306*4882a593Smuzhiyun}
307*4882a593Smuzhiyun
308*4882a593Smuzhiyunsanitization_multi_devs_test_fail()
309*4882a593Smuzhiyun{
310*4882a593Smuzhiyun	ip link set dev $swp1 master br0
311*4882a593Smuzhiyun	check_err $?
312*4882a593Smuzhiyun	ip link set dev vxlan0 master br0
313*4882a593Smuzhiyun	check_err $?
314*4882a593Smuzhiyun	ip link set dev $swp2 master br1
315*4882a593Smuzhiyun	check_err $?
316*4882a593Smuzhiyun	ip link set dev vxlan1 master br1 &> /dev/null
317*4882a593Smuzhiyun	check_fail $?
318*4882a593Smuzhiyun
319*4882a593Smuzhiyun	ip link set dev $swp2 nomaster
320*4882a593Smuzhiyun	ip link set dev $swp1 nomaster
321*4882a593Smuzhiyun
322*4882a593Smuzhiyun	ip link set dev vxlan1 master br1
323*4882a593Smuzhiyun	check_err $?
324*4882a593Smuzhiyun	ip link set dev $swp1 master br0
325*4882a593Smuzhiyun	check_err $?
326*4882a593Smuzhiyun	ip link set dev $swp2 master br1 &> /dev/null
327*4882a593Smuzhiyun	check_fail $?
328*4882a593Smuzhiyun}
329*4882a593Smuzhiyun
330*4882a593Smuzhiyunsanitization_multi_devs_valid_test()
331*4882a593Smuzhiyun{
332*4882a593Smuzhiyun	RET=0
333*4882a593Smuzhiyun
334*4882a593Smuzhiyun	ip link add dev br0 type bridge mcast_snooping 0
335*4882a593Smuzhiyun	ip link add dev br1 type bridge mcast_snooping 0
336*4882a593Smuzhiyun
337*4882a593Smuzhiyun	ip link add name vxlan0 up type vxlan id 10 nolearning noudpcsum \
338*4882a593Smuzhiyun		ttl 20 tos inherit local 198.51.100.1 dstport 4789
339*4882a593Smuzhiyun	ip link add name vxlan1 up type vxlan id 20 nolearning noudpcsum \
340*4882a593Smuzhiyun		ttl 20 tos inherit local 198.51.100.1 dstport 4789
341*4882a593Smuzhiyun
342*4882a593Smuzhiyun	sanitization_multi_devs_test_pass
343*4882a593Smuzhiyun
344*4882a593Smuzhiyun	ip link del dev vxlan1
345*4882a593Smuzhiyun	ip link del dev vxlan0
346*4882a593Smuzhiyun	ip link del dev br1
347*4882a593Smuzhiyun	ip link del dev br0
348*4882a593Smuzhiyun
349*4882a593Smuzhiyun	log_test "multiple vxlan devices - valid configuration"
350*4882a593Smuzhiyun}
351*4882a593Smuzhiyun
352*4882a593Smuzhiyunsanitization_multi_devs_ttl_test()
353*4882a593Smuzhiyun{
354*4882a593Smuzhiyun	RET=0
355*4882a593Smuzhiyun
356*4882a593Smuzhiyun	ip link add dev br0 type bridge mcast_snooping 0
357*4882a593Smuzhiyun	ip link add dev br1 type bridge mcast_snooping 0
358*4882a593Smuzhiyun
359*4882a593Smuzhiyun	ip link add name vxlan0 up type vxlan id 10 nolearning noudpcsum \
360*4882a593Smuzhiyun		ttl 20 tos inherit local 198.51.100.1 dstport 4789
361*4882a593Smuzhiyun	ip link add name vxlan1 up type vxlan id 20 nolearning noudpcsum \
362*4882a593Smuzhiyun		ttl 40 tos inherit local 198.51.100.1 dstport 4789
363*4882a593Smuzhiyun
364*4882a593Smuzhiyun	sanitization_multi_devs_test_fail
365*4882a593Smuzhiyun
366*4882a593Smuzhiyun	ip link del dev vxlan1
367*4882a593Smuzhiyun	ip link del dev vxlan0
368*4882a593Smuzhiyun	ip link del dev br1
369*4882a593Smuzhiyun	ip link del dev br0
370*4882a593Smuzhiyun
371*4882a593Smuzhiyun	log_test "multiple vxlan devices with different ttl"
372*4882a593Smuzhiyun}
373*4882a593Smuzhiyun
374*4882a593Smuzhiyunsanitization_multi_devs_udp_dstport_test()
375*4882a593Smuzhiyun{
376*4882a593Smuzhiyun	RET=0
377*4882a593Smuzhiyun
378*4882a593Smuzhiyun	ip link add dev br0 type bridge mcast_snooping 0
379*4882a593Smuzhiyun	ip link add dev br1 type bridge mcast_snooping 0
380*4882a593Smuzhiyun
381*4882a593Smuzhiyun	ip link add name vxlan0 up type vxlan id 10 nolearning noudpcsum \
382*4882a593Smuzhiyun		ttl 20 tos inherit local 198.51.100.1 dstport 4789
383*4882a593Smuzhiyun	ip link add name vxlan1 up type vxlan id 20 nolearning noudpcsum \
384*4882a593Smuzhiyun		ttl 20 tos inherit local 198.51.100.1 dstport 5789
385*4882a593Smuzhiyun
386*4882a593Smuzhiyun	sanitization_multi_devs_test_fail
387*4882a593Smuzhiyun
388*4882a593Smuzhiyun	ip link del dev vxlan1
389*4882a593Smuzhiyun	ip link del dev vxlan0
390*4882a593Smuzhiyun	ip link del dev br1
391*4882a593Smuzhiyun	ip link del dev br0
392*4882a593Smuzhiyun
393*4882a593Smuzhiyun	log_test "multiple vxlan devices with different udp destination port"
394*4882a593Smuzhiyun}
395*4882a593Smuzhiyun
396*4882a593Smuzhiyunsanitization_multi_devs_local_ip_test()
397*4882a593Smuzhiyun{
398*4882a593Smuzhiyun	RET=0
399*4882a593Smuzhiyun
400*4882a593Smuzhiyun	ip link add dev br0 type bridge mcast_snooping 0
401*4882a593Smuzhiyun	ip link add dev br1 type bridge mcast_snooping 0
402*4882a593Smuzhiyun
403*4882a593Smuzhiyun	ip link add name vxlan0 up type vxlan id 10 nolearning noudpcsum \
404*4882a593Smuzhiyun		ttl 20 tos inherit local 198.51.100.1 dstport 4789
405*4882a593Smuzhiyun	ip link add name vxlan1 up type vxlan id 20 nolearning noudpcsum \
406*4882a593Smuzhiyun		ttl 20 tos inherit local 198.51.100.2 dstport 4789
407*4882a593Smuzhiyun
408*4882a593Smuzhiyun	sanitization_multi_devs_test_fail
409*4882a593Smuzhiyun
410*4882a593Smuzhiyun	ip link del dev vxlan1
411*4882a593Smuzhiyun	ip link del dev vxlan0
412*4882a593Smuzhiyun	ip link del dev br1
413*4882a593Smuzhiyun	ip link del dev br0
414*4882a593Smuzhiyun
415*4882a593Smuzhiyun	log_test "multiple vxlan devices with different local ip"
416*4882a593Smuzhiyun}
417*4882a593Smuzhiyun
418*4882a593Smuzhiyunsanitization_multi_devs_test()
419*4882a593Smuzhiyun{
420*4882a593Smuzhiyun	# The device has a single VTEP, which means all the VxLAN devices
421*4882a593Smuzhiyun	# we offload must share certain properties such as source IP and
422*4882a593Smuzhiyun	# UDP destination port. These tests make sure that we forbid
423*4882a593Smuzhiyun	# configurations that violate this limitation
424*4882a593Smuzhiyun	sanitization_multi_devs_valid_test
425*4882a593Smuzhiyun	sanitization_multi_devs_ttl_test
426*4882a593Smuzhiyun	sanitization_multi_devs_udp_dstport_test
427*4882a593Smuzhiyun	sanitization_multi_devs_local_ip_test
428*4882a593Smuzhiyun}
429*4882a593Smuzhiyun
430*4882a593Smuzhiyunsanitization_test()
431*4882a593Smuzhiyun{
432*4882a593Smuzhiyun	sanitization_single_dev_test
433*4882a593Smuzhiyun	sanitization_multi_devs_test
434*4882a593Smuzhiyun}
435*4882a593Smuzhiyun
436*4882a593Smuzhiyunoffload_indication_setup_create()
437*4882a593Smuzhiyun{
438*4882a593Smuzhiyun	# Create a simple setup with two bridges, each with a VxLAN device
439*4882a593Smuzhiyun	# and one local port
440*4882a593Smuzhiyun	ip link add name br0 up type bridge mcast_snooping 0
441*4882a593Smuzhiyun	ip link add name br1 up type bridge mcast_snooping 0
442*4882a593Smuzhiyun
443*4882a593Smuzhiyun	ip link set dev $swp1 master br0
444*4882a593Smuzhiyun	ip link set dev $swp2 master br1
445*4882a593Smuzhiyun
446*4882a593Smuzhiyun	ip address add 198.51.100.1/32 dev lo
447*4882a593Smuzhiyun
448*4882a593Smuzhiyun	ip link add name vxlan0 up master br0 type vxlan id 10 nolearning \
449*4882a593Smuzhiyun		noudpcsum ttl 20 tos inherit local 198.51.100.1 dstport 4789
450*4882a593Smuzhiyun	ip link add name vxlan1 up master br1 type vxlan id 20 nolearning \
451*4882a593Smuzhiyun		noudpcsum ttl 20 tos inherit local 198.51.100.1 dstport 4789
452*4882a593Smuzhiyun}
453*4882a593Smuzhiyun
454*4882a593Smuzhiyunoffload_indication_setup_destroy()
455*4882a593Smuzhiyun{
456*4882a593Smuzhiyun	ip link del dev vxlan1
457*4882a593Smuzhiyun	ip link del dev vxlan0
458*4882a593Smuzhiyun
459*4882a593Smuzhiyun	ip address del 198.51.100.1/32 dev lo
460*4882a593Smuzhiyun
461*4882a593Smuzhiyun	ip link set dev $swp2 nomaster
462*4882a593Smuzhiyun	ip link set dev $swp1 nomaster
463*4882a593Smuzhiyun
464*4882a593Smuzhiyun	ip link del dev br1
465*4882a593Smuzhiyun	ip link del dev br0
466*4882a593Smuzhiyun}
467*4882a593Smuzhiyun
468*4882a593Smuzhiyunoffload_indication_fdb_flood_test()
469*4882a593Smuzhiyun{
470*4882a593Smuzhiyun	RET=0
471*4882a593Smuzhiyun
472*4882a593Smuzhiyun	bridge fdb append 00:00:00:00:00:00 dev vxlan0 self dst 198.51.100.2
473*4882a593Smuzhiyun
474*4882a593Smuzhiyun	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb 00:00:00:00:00:00 \
475*4882a593Smuzhiyun		bridge fdb show brport vxlan0
476*4882a593Smuzhiyun	check_err $?
477*4882a593Smuzhiyun
478*4882a593Smuzhiyun	bridge fdb del 00:00:00:00:00:00 dev vxlan0 self
479*4882a593Smuzhiyun
480*4882a593Smuzhiyun	log_test "vxlan flood entry offload indication"
481*4882a593Smuzhiyun}
482*4882a593Smuzhiyun
483*4882a593Smuzhiyunoffload_indication_fdb_bridge_test()
484*4882a593Smuzhiyun{
485*4882a593Smuzhiyun	RET=0
486*4882a593Smuzhiyun
487*4882a593Smuzhiyun	bridge fdb add de:ad:be:ef:13:37 dev vxlan0 self master static \
488*4882a593Smuzhiyun		dst 198.51.100.2
489*4882a593Smuzhiyun
490*4882a593Smuzhiyun	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
491*4882a593Smuzhiyun		de:ad:be:ef:13:37 self bridge fdb show brport vxlan0
492*4882a593Smuzhiyun	check_err $?
493*4882a593Smuzhiyun	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
494*4882a593Smuzhiyun		de:ad:be:ef:13:37 self -v bridge fdb show brport vxlan0
495*4882a593Smuzhiyun	check_err $?
496*4882a593Smuzhiyun
497*4882a593Smuzhiyun	log_test "vxlan entry offload indication - initial state"
498*4882a593Smuzhiyun
499*4882a593Smuzhiyun	# Remove FDB entry from the bridge driver and check that corresponding
500*4882a593Smuzhiyun	# entry in the VxLAN driver is not marked as offloaded
501*4882a593Smuzhiyun	RET=0
502*4882a593Smuzhiyun
503*4882a593Smuzhiyun	bridge fdb del de:ad:be:ef:13:37 dev vxlan0 master
504*4882a593Smuzhiyun	busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb \
505*4882a593Smuzhiyun		de:ad:be:ef:13:37 self bridge fdb show brport vxlan0
506*4882a593Smuzhiyun	check_err $?
507*4882a593Smuzhiyun
508*4882a593Smuzhiyun	log_test "vxlan entry offload indication - after removal from bridge"
509*4882a593Smuzhiyun
510*4882a593Smuzhiyun	# Add the FDB entry back to the bridge driver and make sure it is
511*4882a593Smuzhiyun	# marked as offloaded in both drivers
512*4882a593Smuzhiyun	RET=0
513*4882a593Smuzhiyun
514*4882a593Smuzhiyun	bridge fdb add de:ad:be:ef:13:37 dev vxlan0 master static
515*4882a593Smuzhiyun	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
516*4882a593Smuzhiyun		de:ad:be:ef:13:37 self bridge fdb show brport vxlan0
517*4882a593Smuzhiyun	check_err $?
518*4882a593Smuzhiyun	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
519*4882a593Smuzhiyun		de:ad:be:ef:13:37 self -v bridge fdb show brport vxlan0
520*4882a593Smuzhiyun	check_err $?
521*4882a593Smuzhiyun
522*4882a593Smuzhiyun	log_test "vxlan entry offload indication - after re-add to bridge"
523*4882a593Smuzhiyun
524*4882a593Smuzhiyun	# Remove FDB entry from the VxLAN driver and check that corresponding
525*4882a593Smuzhiyun	# entry in the bridge driver is not marked as offloaded
526*4882a593Smuzhiyun	RET=0
527*4882a593Smuzhiyun
528*4882a593Smuzhiyun	bridge fdb del de:ad:be:ef:13:37 dev vxlan0 self
529*4882a593Smuzhiyun	busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb \
530*4882a593Smuzhiyun		de:ad:be:ef:13:37 self -v bridge fdb show brport vxlan0
531*4882a593Smuzhiyun	check_err $?
532*4882a593Smuzhiyun
533*4882a593Smuzhiyun	log_test "vxlan entry offload indication - after removal from vxlan"
534*4882a593Smuzhiyun
535*4882a593Smuzhiyun	# Add the FDB entry back to the VxLAN driver and make sure it is
536*4882a593Smuzhiyun	# marked as offloaded in both drivers
537*4882a593Smuzhiyun	RET=0
538*4882a593Smuzhiyun
539*4882a593Smuzhiyun	bridge fdb add de:ad:be:ef:13:37 dev vxlan0 self dst 198.51.100.2
540*4882a593Smuzhiyun	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
541*4882a593Smuzhiyun		de:ad:be:ef:13:37 self bridge fdb show brport vxlan0
542*4882a593Smuzhiyun	check_err $?
543*4882a593Smuzhiyun	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
544*4882a593Smuzhiyun		de:ad:be:ef:13:37 self -v bridge fdb show brport vxlan0
545*4882a593Smuzhiyun	check_err $?
546*4882a593Smuzhiyun
547*4882a593Smuzhiyun	log_test "vxlan entry offload indication - after re-add to vxlan"
548*4882a593Smuzhiyun
549*4882a593Smuzhiyun	bridge fdb del de:ad:be:ef:13:37 dev vxlan0 self master
550*4882a593Smuzhiyun}
551*4882a593Smuzhiyun
552*4882a593Smuzhiyunoffload_indication_fdb_test()
553*4882a593Smuzhiyun{
554*4882a593Smuzhiyun	offload_indication_fdb_flood_test
555*4882a593Smuzhiyun	offload_indication_fdb_bridge_test
556*4882a593Smuzhiyun}
557*4882a593Smuzhiyun
558*4882a593Smuzhiyunoffload_indication_decap_route_test()
559*4882a593Smuzhiyun{
560*4882a593Smuzhiyun	RET=0
561*4882a593Smuzhiyun
562*4882a593Smuzhiyun	busywait "$TIMEOUT" wait_for_offload \
563*4882a593Smuzhiyun		ip route show table local 198.51.100.1
564*4882a593Smuzhiyun	check_err $?
565*4882a593Smuzhiyun
566*4882a593Smuzhiyun	ip link set dev vxlan0 down
567*4882a593Smuzhiyun	busywait "$TIMEOUT" wait_for_offload \
568*4882a593Smuzhiyun		ip route show table local 198.51.100.1
569*4882a593Smuzhiyun	check_err $?
570*4882a593Smuzhiyun
571*4882a593Smuzhiyun	ip link set dev vxlan1 down
572*4882a593Smuzhiyun	busywait "$TIMEOUT" not wait_for_offload \
573*4882a593Smuzhiyun		ip route show table local 198.51.100.1
574*4882a593Smuzhiyun	check_err $?
575*4882a593Smuzhiyun
576*4882a593Smuzhiyun	log_test "vxlan decap route - vxlan device down"
577*4882a593Smuzhiyun
578*4882a593Smuzhiyun	RET=0
579*4882a593Smuzhiyun
580*4882a593Smuzhiyun	ip link set dev vxlan1 up
581*4882a593Smuzhiyun	busywait "$TIMEOUT" wait_for_offload \
582*4882a593Smuzhiyun		ip route show table local 198.51.100.1
583*4882a593Smuzhiyun	check_err $?
584*4882a593Smuzhiyun
585*4882a593Smuzhiyun	ip link set dev vxlan0 up
586*4882a593Smuzhiyun	busywait "$TIMEOUT" wait_for_offload \
587*4882a593Smuzhiyun		ip route show table local 198.51.100.1
588*4882a593Smuzhiyun	check_err $?
589*4882a593Smuzhiyun
590*4882a593Smuzhiyun	log_test "vxlan decap route - vxlan device up"
591*4882a593Smuzhiyun
592*4882a593Smuzhiyun	RET=0
593*4882a593Smuzhiyun
594*4882a593Smuzhiyun	ip address delete 198.51.100.1/32 dev lo
595*4882a593Smuzhiyun	busywait "$TIMEOUT" not wait_for_offload \
596*4882a593Smuzhiyun		ip route show table local 198.51.100.1
597*4882a593Smuzhiyun	check_err $?
598*4882a593Smuzhiyun
599*4882a593Smuzhiyun	ip address add 198.51.100.1/32 dev lo
600*4882a593Smuzhiyun	busywait "$TIMEOUT" wait_for_offload \
601*4882a593Smuzhiyun		ip route show table local 198.51.100.1
602*4882a593Smuzhiyun	check_err $?
603*4882a593Smuzhiyun
604*4882a593Smuzhiyun	log_test "vxlan decap route - add local route"
605*4882a593Smuzhiyun
606*4882a593Smuzhiyun	RET=0
607*4882a593Smuzhiyun
608*4882a593Smuzhiyun	ip link set dev $swp1 nomaster
609*4882a593Smuzhiyun	busywait "$TIMEOUT" wait_for_offload \
610*4882a593Smuzhiyun		ip route show table local 198.51.100.1
611*4882a593Smuzhiyun	check_err $?
612*4882a593Smuzhiyun
613*4882a593Smuzhiyun	ip link set dev $swp2 nomaster
614*4882a593Smuzhiyun	busywait "$TIMEOUT" not wait_for_offload \
615*4882a593Smuzhiyun		ip route show table local 198.51.100.1
616*4882a593Smuzhiyun	check_err $?
617*4882a593Smuzhiyun
618*4882a593Smuzhiyun	ip link set dev $swp1 master br0
619*4882a593Smuzhiyun	ip link set dev $swp2 master br1
620*4882a593Smuzhiyun	busywait "$TIMEOUT" wait_for_offload \
621*4882a593Smuzhiyun		ip route show table local 198.51.100.1
622*4882a593Smuzhiyun	check_err $?
623*4882a593Smuzhiyun
624*4882a593Smuzhiyun	log_test "vxlan decap route - local ports enslavement"
625*4882a593Smuzhiyun
626*4882a593Smuzhiyun	RET=0
627*4882a593Smuzhiyun
628*4882a593Smuzhiyun	ip link del dev br0
629*4882a593Smuzhiyun	busywait "$TIMEOUT" wait_for_offload \
630*4882a593Smuzhiyun		ip route show table local 198.51.100.1
631*4882a593Smuzhiyun	check_err $?
632*4882a593Smuzhiyun
633*4882a593Smuzhiyun	ip link del dev br1
634*4882a593Smuzhiyun	busywait "$TIMEOUT" not wait_for_offload \
635*4882a593Smuzhiyun		ip route show table local 198.51.100.1
636*4882a593Smuzhiyun	check_err $?
637*4882a593Smuzhiyun
638*4882a593Smuzhiyun	log_test "vxlan decap route - bridge device deletion"
639*4882a593Smuzhiyun
640*4882a593Smuzhiyun	RET=0
641*4882a593Smuzhiyun
642*4882a593Smuzhiyun	ip link add name br0 up type bridge mcast_snooping 0
643*4882a593Smuzhiyun	ip link add name br1 up type bridge mcast_snooping 0
644*4882a593Smuzhiyun	ip link set dev $swp1 master br0
645*4882a593Smuzhiyun	ip link set dev $swp2 master br1
646*4882a593Smuzhiyun	ip link set dev vxlan0 master br0
647*4882a593Smuzhiyun	ip link set dev vxlan1 master br1
648*4882a593Smuzhiyun	busywait "$TIMEOUT" wait_for_offload \
649*4882a593Smuzhiyun		ip route show table local 198.51.100.1
650*4882a593Smuzhiyun	check_err $?
651*4882a593Smuzhiyun
652*4882a593Smuzhiyun	ip link del dev vxlan0
653*4882a593Smuzhiyun	busywait "$TIMEOUT" wait_for_offload \
654*4882a593Smuzhiyun		ip route show table local 198.51.100.1
655*4882a593Smuzhiyun	check_err $?
656*4882a593Smuzhiyun
657*4882a593Smuzhiyun	ip link del dev vxlan1
658*4882a593Smuzhiyun	busywait "$TIMEOUT" not wait_for_offload \
659*4882a593Smuzhiyun		ip route show table local 198.51.100.1
660*4882a593Smuzhiyun	check_err $?
661*4882a593Smuzhiyun
662*4882a593Smuzhiyun	log_test "vxlan decap route - vxlan device deletion"
663*4882a593Smuzhiyun
664*4882a593Smuzhiyun	ip link add name vxlan0 up master br0 type vxlan id 10 nolearning \
665*4882a593Smuzhiyun		noudpcsum ttl 20 tos inherit local 198.51.100.1 dstport 4789
666*4882a593Smuzhiyun	ip link add name vxlan1 up master br1 type vxlan id 20 nolearning \
667*4882a593Smuzhiyun		noudpcsum ttl 20 tos inherit local 198.51.100.1 dstport 4789
668*4882a593Smuzhiyun}
669*4882a593Smuzhiyun
670*4882a593Smuzhiyuncheck_fdb_offloaded()
671*4882a593Smuzhiyun{
672*4882a593Smuzhiyun	local mac=00:11:22:33:44:55
673*4882a593Smuzhiyun	local zmac=00:00:00:00:00:00
674*4882a593Smuzhiyun
675*4882a593Smuzhiyun	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb $mac self \
676*4882a593Smuzhiyun		bridge fdb show dev vxlan0
677*4882a593Smuzhiyun	check_err $?
678*4882a593Smuzhiyun	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb $mac master \
679*4882a593Smuzhiyun		bridge fdb show dev vxlan0
680*4882a593Smuzhiyun	check_err $?
681*4882a593Smuzhiyun
682*4882a593Smuzhiyun	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb $zmac self \
683*4882a593Smuzhiyun		bridge fdb show dev vxlan0
684*4882a593Smuzhiyun	check_err $?
685*4882a593Smuzhiyun}
686*4882a593Smuzhiyun
687*4882a593Smuzhiyuncheck_vxlan_fdb_not_offloaded()
688*4882a593Smuzhiyun{
689*4882a593Smuzhiyun	local mac=00:11:22:33:44:55
690*4882a593Smuzhiyun	local zmac=00:00:00:00:00:00
691*4882a593Smuzhiyun
692*4882a593Smuzhiyun	bridge fdb show dev vxlan0 | grep $mac | grep -q self
693*4882a593Smuzhiyun	check_err $?
694*4882a593Smuzhiyun	busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb $mac self \
695*4882a593Smuzhiyun		bridge fdb show dev vxlan0
696*4882a593Smuzhiyun	check_err $?
697*4882a593Smuzhiyun
698*4882a593Smuzhiyun	bridge fdb show dev vxlan0 | grep $zmac | grep -q self
699*4882a593Smuzhiyun	check_err $?
700*4882a593Smuzhiyun	busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb $zmac self \
701*4882a593Smuzhiyun		bridge fdb show dev vxlan0
702*4882a593Smuzhiyun	check_err $?
703*4882a593Smuzhiyun}
704*4882a593Smuzhiyun
705*4882a593Smuzhiyuncheck_bridge_fdb_not_offloaded()
706*4882a593Smuzhiyun{
707*4882a593Smuzhiyun	local mac=00:11:22:33:44:55
708*4882a593Smuzhiyun	local zmac=00:00:00:00:00:00
709*4882a593Smuzhiyun
710*4882a593Smuzhiyun	bridge fdb show dev vxlan0 | grep $mac | grep -q master
711*4882a593Smuzhiyun	check_err $?
712*4882a593Smuzhiyun	busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb $mac master \
713*4882a593Smuzhiyun		bridge fdb show dev vxlan0
714*4882a593Smuzhiyun	check_err $?
715*4882a593Smuzhiyun}
716*4882a593Smuzhiyun
717*4882a593Smuzhiyun__offload_indication_join_vxlan_first()
718*4882a593Smuzhiyun{
719*4882a593Smuzhiyun	local vid=$1; shift
720*4882a593Smuzhiyun
721*4882a593Smuzhiyun	local mac=00:11:22:33:44:55
722*4882a593Smuzhiyun	local zmac=00:00:00:00:00:00
723*4882a593Smuzhiyun
724*4882a593Smuzhiyun	bridge fdb append $zmac dev vxlan0 self dst 198.51.100.2
725*4882a593Smuzhiyun
726*4882a593Smuzhiyun	ip link set dev vxlan0 master br0
727*4882a593Smuzhiyun	bridge fdb add dev vxlan0 $mac self master static dst 198.51.100.2
728*4882a593Smuzhiyun
729*4882a593Smuzhiyun	RET=0
730*4882a593Smuzhiyun	check_vxlan_fdb_not_offloaded
731*4882a593Smuzhiyun	ip link set dev $swp1 master br0
732*4882a593Smuzhiyun	sleep .1
733*4882a593Smuzhiyun	check_fdb_offloaded
734*4882a593Smuzhiyun	log_test "offload indication - attach vxlan first"
735*4882a593Smuzhiyun
736*4882a593Smuzhiyun	RET=0
737*4882a593Smuzhiyun	ip link set dev vxlan0 down
738*4882a593Smuzhiyun	check_vxlan_fdb_not_offloaded
739*4882a593Smuzhiyun	check_bridge_fdb_not_offloaded
740*4882a593Smuzhiyun	log_test "offload indication - set vxlan down"
741*4882a593Smuzhiyun
742*4882a593Smuzhiyun	RET=0
743*4882a593Smuzhiyun	ip link set dev vxlan0 up
744*4882a593Smuzhiyun	sleep .1
745*4882a593Smuzhiyun	check_fdb_offloaded
746*4882a593Smuzhiyun	log_test "offload indication - set vxlan up"
747*4882a593Smuzhiyun
748*4882a593Smuzhiyun	if [[ ! -z $vid ]]; then
749*4882a593Smuzhiyun		RET=0
750*4882a593Smuzhiyun		bridge vlan del dev vxlan0 vid $vid
751*4882a593Smuzhiyun		check_vxlan_fdb_not_offloaded
752*4882a593Smuzhiyun		check_bridge_fdb_not_offloaded
753*4882a593Smuzhiyun		log_test "offload indication - delete VLAN"
754*4882a593Smuzhiyun
755*4882a593Smuzhiyun		RET=0
756*4882a593Smuzhiyun		bridge vlan add dev vxlan0 vid $vid
757*4882a593Smuzhiyun		check_vxlan_fdb_not_offloaded
758*4882a593Smuzhiyun		check_bridge_fdb_not_offloaded
759*4882a593Smuzhiyun		log_test "offload indication - add tagged VLAN"
760*4882a593Smuzhiyun
761*4882a593Smuzhiyun		RET=0
762*4882a593Smuzhiyun		bridge vlan add dev vxlan0 vid $vid pvid untagged
763*4882a593Smuzhiyun		sleep .1
764*4882a593Smuzhiyun		check_fdb_offloaded
765*4882a593Smuzhiyun		log_test "offload indication - add pvid/untagged VLAN"
766*4882a593Smuzhiyun	fi
767*4882a593Smuzhiyun
768*4882a593Smuzhiyun	RET=0
769*4882a593Smuzhiyun	ip link set dev $swp1 nomaster
770*4882a593Smuzhiyun	check_vxlan_fdb_not_offloaded
771*4882a593Smuzhiyun	log_test "offload indication - detach port"
772*4882a593Smuzhiyun}
773*4882a593Smuzhiyun
774*4882a593Smuzhiyunoffload_indication_join_vxlan_first()
775*4882a593Smuzhiyun{
776*4882a593Smuzhiyun	ip link add dev br0 up type bridge mcast_snooping 0
777*4882a593Smuzhiyun	ip link add name vxlan0 up type vxlan id 10 nolearning noudpcsum \
778*4882a593Smuzhiyun		ttl 20 tos inherit local 198.51.100.1 dstport 4789
779*4882a593Smuzhiyun
780*4882a593Smuzhiyun	__offload_indication_join_vxlan_first
781*4882a593Smuzhiyun
782*4882a593Smuzhiyun	ip link del dev vxlan0
783*4882a593Smuzhiyun	ip link del dev br0
784*4882a593Smuzhiyun}
785*4882a593Smuzhiyun
786*4882a593Smuzhiyun__offload_indication_join_vxlan_last()
787*4882a593Smuzhiyun{
788*4882a593Smuzhiyun	local zmac=00:00:00:00:00:00
789*4882a593Smuzhiyun
790*4882a593Smuzhiyun	RET=0
791*4882a593Smuzhiyun
792*4882a593Smuzhiyun	bridge fdb append $zmac dev vxlan0 self dst 198.51.100.2
793*4882a593Smuzhiyun
794*4882a593Smuzhiyun	ip link set dev $swp1 master br0
795*4882a593Smuzhiyun
796*4882a593Smuzhiyun	busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb $zmac self \
797*4882a593Smuzhiyun		bridge fdb show dev vxlan0
798*4882a593Smuzhiyun	check_err $?
799*4882a593Smuzhiyun
800*4882a593Smuzhiyun	ip link set dev vxlan0 master br0
801*4882a593Smuzhiyun
802*4882a593Smuzhiyun	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb $zmac self \
803*4882a593Smuzhiyun		bridge fdb show dev vxlan0
804*4882a593Smuzhiyun	check_err $?
805*4882a593Smuzhiyun
806*4882a593Smuzhiyun	log_test "offload indication - attach vxlan last"
807*4882a593Smuzhiyun}
808*4882a593Smuzhiyun
809*4882a593Smuzhiyunoffload_indication_join_vxlan_last()
810*4882a593Smuzhiyun{
811*4882a593Smuzhiyun	ip link add dev br0 up type bridge mcast_snooping 0
812*4882a593Smuzhiyun	ip link add name vxlan0 up type vxlan id 10 nolearning noudpcsum \
813*4882a593Smuzhiyun		ttl 20 tos inherit local 198.51.100.1 dstport 4789
814*4882a593Smuzhiyun
815*4882a593Smuzhiyun	__offload_indication_join_vxlan_last
816*4882a593Smuzhiyun
817*4882a593Smuzhiyun	ip link del dev vxlan0
818*4882a593Smuzhiyun	ip link del dev br0
819*4882a593Smuzhiyun}
820*4882a593Smuzhiyun
821*4882a593Smuzhiyunoffload_indication_test()
822*4882a593Smuzhiyun{
823*4882a593Smuzhiyun	offload_indication_setup_create
824*4882a593Smuzhiyun	offload_indication_fdb_test
825*4882a593Smuzhiyun	offload_indication_decap_route_test
826*4882a593Smuzhiyun	offload_indication_setup_destroy
827*4882a593Smuzhiyun
828*4882a593Smuzhiyun	log_info "offload indication - replay & cleanup"
829*4882a593Smuzhiyun	offload_indication_join_vxlan_first
830*4882a593Smuzhiyun	offload_indication_join_vxlan_last
831*4882a593Smuzhiyun}
832*4882a593Smuzhiyun
833*4882a593Smuzhiyunsanitization_vlan_aware_test()
834*4882a593Smuzhiyun{
835*4882a593Smuzhiyun	RET=0
836*4882a593Smuzhiyun
837*4882a593Smuzhiyun	ip link add dev br0 type bridge mcast_snooping 0 vlan_filtering 1
838*4882a593Smuzhiyun
839*4882a593Smuzhiyun	ip link add name vxlan10 up master br0 type vxlan id 10 nolearning \
840*4882a593Smuzhiyun		noudpcsum ttl 20 tos inherit local 198.51.100.1 dstport 4789
841*4882a593Smuzhiyun
842*4882a593Smuzhiyun	ip link add name vxlan20 up master br0 type vxlan id 20 nolearning \
843*4882a593Smuzhiyun		noudpcsum ttl 20 tos inherit local 198.51.100.1 dstport 4789
844*4882a593Smuzhiyun
845*4882a593Smuzhiyun	# Test that when each VNI is mapped to a different VLAN we can enslave
846*4882a593Smuzhiyun	# a port to the bridge
847*4882a593Smuzhiyun	bridge vlan add vid 10 dev vxlan10 pvid untagged
848*4882a593Smuzhiyun	bridge vlan add vid 20 dev vxlan20 pvid untagged
849*4882a593Smuzhiyun
850*4882a593Smuzhiyun	ip link set dev $swp1 master br0
851*4882a593Smuzhiyun	check_err $?
852*4882a593Smuzhiyun
853*4882a593Smuzhiyun	log_test "vlan-aware - enslavement to vlan-aware bridge"
854*4882a593Smuzhiyun
855*4882a593Smuzhiyun	# Try to map both VNIs to the same VLAN and make sure configuration
856*4882a593Smuzhiyun	# fails
857*4882a593Smuzhiyun	RET=0
858*4882a593Smuzhiyun
859*4882a593Smuzhiyun	bridge vlan add vid 10 dev vxlan20 pvid untagged &> /dev/null
860*4882a593Smuzhiyun	check_fail $?
861*4882a593Smuzhiyun
862*4882a593Smuzhiyun	log_test "vlan-aware - two vnis mapped to the same vlan"
863*4882a593Smuzhiyun
864*4882a593Smuzhiyun	# Test that enslavement of a port to a bridge fails when two VNIs
865*4882a593Smuzhiyun	# are mapped to the same VLAN
866*4882a593Smuzhiyun	RET=0
867*4882a593Smuzhiyun
868*4882a593Smuzhiyun	ip link set dev $swp1 nomaster
869*4882a593Smuzhiyun
870*4882a593Smuzhiyun	bridge vlan del vid 20 dev vxlan20 pvid untagged
871*4882a593Smuzhiyun	bridge vlan add vid 10 dev vxlan20 pvid untagged
872*4882a593Smuzhiyun
873*4882a593Smuzhiyun	ip link set dev $swp1 master br0 &> /dev/null
874*4882a593Smuzhiyun	check_fail $?
875*4882a593Smuzhiyun
876*4882a593Smuzhiyun	log_test "vlan-aware - failed enslavement to vlan-aware bridge"
877*4882a593Smuzhiyun
878*4882a593Smuzhiyun	bridge vlan del vid 10 dev vxlan20
879*4882a593Smuzhiyun	bridge vlan add vid 20 dev vxlan20 pvid untagged
880*4882a593Smuzhiyun
881*4882a593Smuzhiyun	# Test that when two VXLAN tunnels with conflicting configurations
882*4882a593Smuzhiyun	# (i.e., different TTL) are enslaved to the same VLAN-aware bridge,
883*4882a593Smuzhiyun	# then the enslavement of a port to the bridge is denied.
884*4882a593Smuzhiyun
885*4882a593Smuzhiyun	# Use the offload indication of the local route to ensure the VXLAN
886*4882a593Smuzhiyun	# configuration was correctly rollbacked.
887*4882a593Smuzhiyun	ip address add 198.51.100.1/32 dev lo
888*4882a593Smuzhiyun
889*4882a593Smuzhiyun	ip link set dev vxlan10 type vxlan ttl 10
890*4882a593Smuzhiyun	ip link set dev $swp1 master br0 &> /dev/null
891*4882a593Smuzhiyun	check_fail $?
892*4882a593Smuzhiyun
893*4882a593Smuzhiyun	busywait "$TIMEOUT" not wait_for_offload \
894*4882a593Smuzhiyun		ip route show table local 198.51.100.1
895*4882a593Smuzhiyun	check_err $?
896*4882a593Smuzhiyun
897*4882a593Smuzhiyun	log_test "vlan-aware - failed enslavement to bridge due to conflict"
898*4882a593Smuzhiyun
899*4882a593Smuzhiyun	ip link set dev vxlan10 type vxlan ttl 20
900*4882a593Smuzhiyun	ip address del 198.51.100.1/32 dev lo
901*4882a593Smuzhiyun
902*4882a593Smuzhiyun	ip link del dev vxlan20
903*4882a593Smuzhiyun	ip link del dev vxlan10
904*4882a593Smuzhiyun	ip link del dev br0
905*4882a593Smuzhiyun}
906*4882a593Smuzhiyun
907*4882a593Smuzhiyunoffload_indication_vlan_aware_setup_create()
908*4882a593Smuzhiyun{
909*4882a593Smuzhiyun	# Create a simple setup with two VxLAN devices and a single VLAN-aware
910*4882a593Smuzhiyun	# bridge
911*4882a593Smuzhiyun	ip link add name br0 up type bridge mcast_snooping 0 vlan_filtering 1 \
912*4882a593Smuzhiyun		vlan_default_pvid 0
913*4882a593Smuzhiyun
914*4882a593Smuzhiyun	ip link set dev $swp1 master br0
915*4882a593Smuzhiyun
916*4882a593Smuzhiyun	bridge vlan add vid 10 dev $swp1
917*4882a593Smuzhiyun	bridge vlan add vid 20 dev $swp1
918*4882a593Smuzhiyun
919*4882a593Smuzhiyun	ip address add 198.51.100.1/32 dev lo
920*4882a593Smuzhiyun
921*4882a593Smuzhiyun	ip link add name vxlan10 up master br0 type vxlan id 10 nolearning \
922*4882a593Smuzhiyun		noudpcsum ttl 20 tos inherit local 198.51.100.1 dstport 4789
923*4882a593Smuzhiyun	ip link add name vxlan20 up master br0 type vxlan id 20 nolearning \
924*4882a593Smuzhiyun		noudpcsum ttl 20 tos inherit local 198.51.100.1 dstport 4789
925*4882a593Smuzhiyun
926*4882a593Smuzhiyun	bridge vlan add vid 10 dev vxlan10 pvid untagged
927*4882a593Smuzhiyun	bridge vlan add vid 20 dev vxlan20 pvid untagged
928*4882a593Smuzhiyun}
929*4882a593Smuzhiyun
930*4882a593Smuzhiyunoffload_indication_vlan_aware_setup_destroy()
931*4882a593Smuzhiyun{
932*4882a593Smuzhiyun	bridge vlan del vid 20 dev vxlan20
933*4882a593Smuzhiyun	bridge vlan del vid 10 dev vxlan10
934*4882a593Smuzhiyun
935*4882a593Smuzhiyun	ip link del dev vxlan20
936*4882a593Smuzhiyun	ip link del dev vxlan10
937*4882a593Smuzhiyun
938*4882a593Smuzhiyun	ip address del 198.51.100.1/32 dev lo
939*4882a593Smuzhiyun
940*4882a593Smuzhiyun	bridge vlan del vid 20 dev $swp1
941*4882a593Smuzhiyun	bridge vlan del vid 10 dev $swp1
942*4882a593Smuzhiyun
943*4882a593Smuzhiyun	ip link set dev $swp1 nomaster
944*4882a593Smuzhiyun
945*4882a593Smuzhiyun	ip link del dev br0
946*4882a593Smuzhiyun}
947*4882a593Smuzhiyun
948*4882a593Smuzhiyunoffload_indication_vlan_aware_fdb_test()
949*4882a593Smuzhiyun{
950*4882a593Smuzhiyun	RET=0
951*4882a593Smuzhiyun
952*4882a593Smuzhiyun	log_info "vxlan entry offload indication - vlan-aware"
953*4882a593Smuzhiyun
954*4882a593Smuzhiyun	bridge fdb add de:ad:be:ef:13:37 dev vxlan10 self master static \
955*4882a593Smuzhiyun		dst 198.51.100.2 vlan 10
956*4882a593Smuzhiyun
957*4882a593Smuzhiyun	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
958*4882a593Smuzhiyun		de:ad:be:ef:13:37 self bridge fdb show brport vxlan10
959*4882a593Smuzhiyun	check_err $?
960*4882a593Smuzhiyun	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
961*4882a593Smuzhiyun		de:ad:be:ef:13:37 self -v bridge fdb show brport vxlan10
962*4882a593Smuzhiyun	check_err $?
963*4882a593Smuzhiyun
964*4882a593Smuzhiyun	log_test "vxlan entry offload indication - initial state"
965*4882a593Smuzhiyun
966*4882a593Smuzhiyun	# Remove FDB entry from the bridge driver and check that corresponding
967*4882a593Smuzhiyun	# entry in the VxLAN driver is not marked as offloaded
968*4882a593Smuzhiyun	RET=0
969*4882a593Smuzhiyun
970*4882a593Smuzhiyun	bridge fdb del de:ad:be:ef:13:37 dev vxlan10 master vlan 10
971*4882a593Smuzhiyun	busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb \
972*4882a593Smuzhiyun		de:ad:be:ef:13:37 self bridge fdb show brport vxlan10
973*4882a593Smuzhiyun	check_err $?
974*4882a593Smuzhiyun
975*4882a593Smuzhiyun	log_test "vxlan entry offload indication - after removal from bridge"
976*4882a593Smuzhiyun
977*4882a593Smuzhiyun	# Add the FDB entry back to the bridge driver and make sure it is
978*4882a593Smuzhiyun	# marked as offloaded in both drivers
979*4882a593Smuzhiyun	RET=0
980*4882a593Smuzhiyun
981*4882a593Smuzhiyun	bridge fdb add de:ad:be:ef:13:37 dev vxlan10 master static vlan 10
982*4882a593Smuzhiyun	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
983*4882a593Smuzhiyun		de:ad:be:ef:13:37 self bridge fdb show brport vxlan10
984*4882a593Smuzhiyun	check_err $?
985*4882a593Smuzhiyun	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
986*4882a593Smuzhiyun		de:ad:be:ef:13:37 self -v bridge fdb show brport vxlan10
987*4882a593Smuzhiyun	check_err $?
988*4882a593Smuzhiyun
989*4882a593Smuzhiyun	log_test "vxlan entry offload indication - after re-add to bridge"
990*4882a593Smuzhiyun
991*4882a593Smuzhiyun	# Remove FDB entry from the VxLAN driver and check that corresponding
992*4882a593Smuzhiyun	# entry in the bridge driver is not marked as offloaded
993*4882a593Smuzhiyun	RET=0
994*4882a593Smuzhiyun
995*4882a593Smuzhiyun	bridge fdb del de:ad:be:ef:13:37 dev vxlan10 self
996*4882a593Smuzhiyun	busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb \
997*4882a593Smuzhiyun		de:ad:be:ef:13:37 self -v bridge fdb show brport vxlan10
998*4882a593Smuzhiyun	check_err $?
999*4882a593Smuzhiyun
1000*4882a593Smuzhiyun	log_test "vxlan entry offload indication - after removal from vxlan"
1001*4882a593Smuzhiyun
1002*4882a593Smuzhiyun	# Add the FDB entry back to the VxLAN driver and make sure it is
1003*4882a593Smuzhiyun	# marked as offloaded in both drivers
1004*4882a593Smuzhiyun	RET=0
1005*4882a593Smuzhiyun
1006*4882a593Smuzhiyun	bridge fdb add de:ad:be:ef:13:37 dev vxlan10 self dst 198.51.100.2
1007*4882a593Smuzhiyun	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
1008*4882a593Smuzhiyun		de:ad:be:ef:13:37 self bridge fdb show brport vxlan10
1009*4882a593Smuzhiyun	check_err $?
1010*4882a593Smuzhiyun	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
1011*4882a593Smuzhiyun		de:ad:be:ef:13:37 self -v bridge fdb show brport vxlan10
1012*4882a593Smuzhiyun	check_err $?
1013*4882a593Smuzhiyun
1014*4882a593Smuzhiyun	log_test "vxlan entry offload indication - after re-add to vxlan"
1015*4882a593Smuzhiyun
1016*4882a593Smuzhiyun	bridge fdb del de:ad:be:ef:13:37 dev vxlan10 self master vlan 10
1017*4882a593Smuzhiyun}
1018*4882a593Smuzhiyun
1019*4882a593Smuzhiyunoffload_indication_vlan_aware_decap_route_test()
1020*4882a593Smuzhiyun{
1021*4882a593Smuzhiyun	RET=0
1022*4882a593Smuzhiyun
1023*4882a593Smuzhiyun	busywait "$TIMEOUT" wait_for_offload \
1024*4882a593Smuzhiyun		ip route show table local 198.51.100.1
1025*4882a593Smuzhiyun	check_err $?
1026*4882a593Smuzhiyun
1027*4882a593Smuzhiyun	# Toggle PVID flag on one VxLAN device and make sure route is still
1028*4882a593Smuzhiyun	# marked as offloaded
1029*4882a593Smuzhiyun	bridge vlan add vid 10 dev vxlan10 untagged
1030*4882a593Smuzhiyun
1031*4882a593Smuzhiyun	busywait "$TIMEOUT" wait_for_offload \
1032*4882a593Smuzhiyun		ip route show table local 198.51.100.1
1033*4882a593Smuzhiyun	check_err $?
1034*4882a593Smuzhiyun
1035*4882a593Smuzhiyun	# Toggle PVID flag on second VxLAN device and make sure route is no
1036*4882a593Smuzhiyun	# longer marked as offloaded
1037*4882a593Smuzhiyun	bridge vlan add vid 20 dev vxlan20 untagged
1038*4882a593Smuzhiyun
1039*4882a593Smuzhiyun	busywait "$TIMEOUT" not wait_for_offload \
1040*4882a593Smuzhiyun		ip route show table local 198.51.100.1
1041*4882a593Smuzhiyun	check_err $?
1042*4882a593Smuzhiyun
1043*4882a593Smuzhiyun	# Toggle PVID flag back and make sure route is marked as offloaded
1044*4882a593Smuzhiyun	bridge vlan add vid 10 dev vxlan10 pvid untagged
1045*4882a593Smuzhiyun	bridge vlan add vid 20 dev vxlan20 pvid untagged
1046*4882a593Smuzhiyun
1047*4882a593Smuzhiyun	busywait "$TIMEOUT" wait_for_offload ip route show table local 198.51.100.1
1048*4882a593Smuzhiyun	check_err $?
1049*4882a593Smuzhiyun
1050*4882a593Smuzhiyun	log_test "vxlan decap route - vni map/unmap"
1051*4882a593Smuzhiyun}
1052*4882a593Smuzhiyun
1053*4882a593Smuzhiyunoffload_indication_vlan_aware_join_vxlan_first()
1054*4882a593Smuzhiyun{
1055*4882a593Smuzhiyun	ip link add dev br0 up type bridge mcast_snooping 0 \
1056*4882a593Smuzhiyun		vlan_filtering 1 vlan_default_pvid 1
1057*4882a593Smuzhiyun	ip link add name vxlan0 up type vxlan id 10 nolearning noudpcsum \
1058*4882a593Smuzhiyun		ttl 20 tos inherit local 198.51.100.1 dstport 4789
1059*4882a593Smuzhiyun
1060*4882a593Smuzhiyun	__offload_indication_join_vxlan_first 1
1061*4882a593Smuzhiyun
1062*4882a593Smuzhiyun	ip link del dev vxlan0
1063*4882a593Smuzhiyun	ip link del dev br0
1064*4882a593Smuzhiyun}
1065*4882a593Smuzhiyun
1066*4882a593Smuzhiyunoffload_indication_vlan_aware_join_vxlan_last()
1067*4882a593Smuzhiyun{
1068*4882a593Smuzhiyun	ip link add dev br0 up type bridge mcast_snooping 0 \
1069*4882a593Smuzhiyun		vlan_filtering 1 vlan_default_pvid 1
1070*4882a593Smuzhiyun	ip link add name vxlan0 up type vxlan id 10 nolearning noudpcsum \
1071*4882a593Smuzhiyun		ttl 20 tos inherit local 198.51.100.1 dstport 4789
1072*4882a593Smuzhiyun
1073*4882a593Smuzhiyun	__offload_indication_join_vxlan_last
1074*4882a593Smuzhiyun
1075*4882a593Smuzhiyun	ip link del dev vxlan0
1076*4882a593Smuzhiyun	ip link del dev br0
1077*4882a593Smuzhiyun}
1078*4882a593Smuzhiyun
1079*4882a593Smuzhiyunoffload_indication_vlan_aware_l3vni_test()
1080*4882a593Smuzhiyun{
1081*4882a593Smuzhiyun	local zmac=00:00:00:00:00:00
1082*4882a593Smuzhiyun
1083*4882a593Smuzhiyun	RET=0
1084*4882a593Smuzhiyun
1085*4882a593Smuzhiyun	sysctl_set net.ipv6.conf.default.disable_ipv6 1
1086*4882a593Smuzhiyun	ip link add dev br0 up type bridge mcast_snooping 0 \
1087*4882a593Smuzhiyun		vlan_filtering 1 vlan_default_pvid 0
1088*4882a593Smuzhiyun	ip link add name vxlan0 up type vxlan id 10 nolearning noudpcsum \
1089*4882a593Smuzhiyun		ttl 20 tos inherit local 198.51.100.1 dstport 4789
1090*4882a593Smuzhiyun
1091*4882a593Smuzhiyun	ip link set dev $swp1 master br0
1092*4882a593Smuzhiyun
1093*4882a593Smuzhiyun	# The test will use the offload indication on the FDB entry to
1094*4882a593Smuzhiyun	# understand if the tunnel is offloaded or not
1095*4882a593Smuzhiyun	bridge fdb append $zmac dev vxlan0 self dst 192.0.2.1
1096*4882a593Smuzhiyun
1097*4882a593Smuzhiyun	ip link set dev vxlan0 master br0
1098*4882a593Smuzhiyun	bridge vlan add dev vxlan0 vid 10 pvid untagged
1099*4882a593Smuzhiyun
1100*4882a593Smuzhiyun	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb $zmac self \
1101*4882a593Smuzhiyun		bridge fdb show brport vxlan0
1102*4882a593Smuzhiyun	check_err $? "vxlan tunnel not offloaded when should"
1103*4882a593Smuzhiyun
1104*4882a593Smuzhiyun	# Configure a VLAN interface and make sure tunnel is offloaded
1105*4882a593Smuzhiyun	ip link add link br0 name br10 up type vlan id 10
1106*4882a593Smuzhiyun	sysctl_set net.ipv6.conf.br10.disable_ipv6 0
1107*4882a593Smuzhiyun	ip -6 address add 2001:db8:1::1/64 dev br10
1108*4882a593Smuzhiyun	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb $zmac self \
1109*4882a593Smuzhiyun		bridge fdb show brport vxlan0
1110*4882a593Smuzhiyun	check_err $? "vxlan tunnel not offloaded when should"
1111*4882a593Smuzhiyun
1112*4882a593Smuzhiyun	# Unlink the VXLAN device, make sure tunnel is no longer offloaded,
1113*4882a593Smuzhiyun	# then add it back to the bridge and make sure it is offloaded
1114*4882a593Smuzhiyun	ip link set dev vxlan0 nomaster
1115*4882a593Smuzhiyun	busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb $zmac self \
1116*4882a593Smuzhiyun		bridge fdb show brport vxlan0
1117*4882a593Smuzhiyun	check_err $? "vxlan tunnel offloaded after unlinked from bridge"
1118*4882a593Smuzhiyun
1119*4882a593Smuzhiyun	ip link set dev vxlan0 master br0
1120*4882a593Smuzhiyun	busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb $zmac self \
1121*4882a593Smuzhiyun		bridge fdb show brport vxlan0
1122*4882a593Smuzhiyun	check_err $? "vxlan tunnel offloaded despite no matching vid"
1123*4882a593Smuzhiyun
1124*4882a593Smuzhiyun	bridge vlan add dev vxlan0 vid 10 pvid untagged
1125*4882a593Smuzhiyun	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb $zmac self \
1126*4882a593Smuzhiyun		bridge fdb show brport vxlan0
1127*4882a593Smuzhiyun	check_err $? "vxlan tunnel not offloaded after adding vid"
1128*4882a593Smuzhiyun
1129*4882a593Smuzhiyun	log_test "vxlan - l3 vni"
1130*4882a593Smuzhiyun
1131*4882a593Smuzhiyun	ip link del dev vxlan0
1132*4882a593Smuzhiyun	ip link del dev br0
1133*4882a593Smuzhiyun	sysctl_restore net.ipv6.conf.default.disable_ipv6
1134*4882a593Smuzhiyun}
1135*4882a593Smuzhiyun
1136*4882a593Smuzhiyunoffload_indication_vlan_aware_test()
1137*4882a593Smuzhiyun{
1138*4882a593Smuzhiyun	offload_indication_vlan_aware_setup_create
1139*4882a593Smuzhiyun	offload_indication_vlan_aware_fdb_test
1140*4882a593Smuzhiyun	offload_indication_vlan_aware_decap_route_test
1141*4882a593Smuzhiyun	offload_indication_vlan_aware_setup_destroy
1142*4882a593Smuzhiyun
1143*4882a593Smuzhiyun	log_info "offload indication - replay & cleanup - vlan aware"
1144*4882a593Smuzhiyun	offload_indication_vlan_aware_join_vxlan_first
1145*4882a593Smuzhiyun	offload_indication_vlan_aware_join_vxlan_last
1146*4882a593Smuzhiyun	offload_indication_vlan_aware_l3vni_test
1147*4882a593Smuzhiyun}
1148*4882a593Smuzhiyun
1149*4882a593Smuzhiyuntrap cleanup EXIT
1150*4882a593Smuzhiyun
1151*4882a593Smuzhiyunsetup_prepare
1152*4882a593Smuzhiyunsetup_wait
1153*4882a593Smuzhiyun
1154*4882a593Smuzhiyuntests_run
1155*4882a593Smuzhiyun
1156*4882a593Smuzhiyunexit $EXIT_STATUS
1157