199c9b084SIdo Schimmel#!/bin/bash
299c9b084SIdo Schimmel# SPDX-License-Identifier: GPL-2.0
399c9b084SIdo Schimmel#
499c9b084SIdo Schimmel# Test various aspects of VxLAN offloading which are specific to mlxsw, such
599c9b084SIdo Schimmel# as sanitization of invalid configurations and offload indication.
699c9b084SIdo Schimmel
78e059d64SAmit Cohen: ${ADDR_FAMILY:=ipv4}
88e059d64SAmit Cohenexport ADDR_FAMILY
999c9b084SIdo Schimmel
108e059d64SAmit Cohen: ${LOCAL_IP_1:=198.51.100.1}
118e059d64SAmit Cohenexport LOCAL_IP_1
128e059d64SAmit Cohen
138e059d64SAmit Cohen: ${LOCAL_IP_2:=198.51.100.2}
148e059d64SAmit Cohenexport LOCAL_IP_2
158e059d64SAmit Cohen
168e059d64SAmit Cohen: ${PREFIX_LEN:=32}
178e059d64SAmit Cohenexport PREFIX_LEN
188e059d64SAmit Cohen
198e059d64SAmit Cohen: ${UDPCSUM_FLAFS:=noudpcsum}
208e059d64SAmit Cohenexport UDPCSUM_FLAFS
218e059d64SAmit Cohen
228e059d64SAmit Cohen: ${MC_IP:=239.0.0.1}
238e059d64SAmit Cohenexport MC_IP
248e059d64SAmit Cohen
258e059d64SAmit Cohen: ${IP_FLAG:=""}
268e059d64SAmit Cohenexport IP_FLAG
278e059d64SAmit Cohen
288e059d64SAmit Cohen: ${ALL_TESTS:="
298e059d64SAmit Cohen	sanitization_test
308e059d64SAmit Cohen	offload_indication_test
318e059d64SAmit Cohen	sanitization_vlan_aware_test
328e059d64SAmit Cohen	offload_indication_vlan_aware_test
338e059d64SAmit Cohen"}
348e059d64SAmit Cohen
358e059d64SAmit Cohenlib_dir=$(dirname $0)/../../../net/forwarding
3699c9b084SIdo SchimmelNUM_NETIFS=2
3705ef614cSDanielle Ratson: ${TIMEOUT:=20000} # ms
3899c9b084SIdo Schimmelsource $lib_dir/lib.sh
3999c9b084SIdo Schimmel
4099c9b084SIdo Schimmelsetup_prepare()
4199c9b084SIdo Schimmel{
4299c9b084SIdo Schimmel	swp1=${NETIFS[p1]}
4399c9b084SIdo Schimmel	swp2=${NETIFS[p2]}
4499c9b084SIdo Schimmel
4599c9b084SIdo Schimmel	ip link set dev $swp1 up
4699c9b084SIdo Schimmel	ip link set dev $swp2 up
4799c9b084SIdo Schimmel}
4899c9b084SIdo Schimmel
4999c9b084SIdo Schimmelcleanup()
5099c9b084SIdo Schimmel{
5199c9b084SIdo Schimmel	pre_cleanup
5299c9b084SIdo Schimmel
5399c9b084SIdo Schimmel	ip link set dev $swp2 down
5499c9b084SIdo Schimmel	ip link set dev $swp1 down
5599c9b084SIdo Schimmel}
5699c9b084SIdo Schimmel
5799c9b084SIdo Schimmelsanitization_single_dev_test_pass()
5899c9b084SIdo Schimmel{
5999c9b084SIdo Schimmel	ip link set dev $swp1 master br0
6099c9b084SIdo Schimmel	check_err $?
6199c9b084SIdo Schimmel	ip link set dev vxlan0 master br0
6299c9b084SIdo Schimmel	check_err $?
6399c9b084SIdo Schimmel
6499c9b084SIdo Schimmel	ip link set dev $swp1 nomaster
6599c9b084SIdo Schimmel
6699c9b084SIdo Schimmel	ip link set dev $swp1 master br0
6799c9b084SIdo Schimmel	check_err $?
6899c9b084SIdo Schimmel}
6999c9b084SIdo Schimmel
7099c9b084SIdo Schimmelsanitization_single_dev_test_fail()
7199c9b084SIdo Schimmel{
7299c9b084SIdo Schimmel	ip link set dev $swp1 master br0
7399c9b084SIdo Schimmel	check_err $?
7499c9b084SIdo Schimmel	ip link set dev vxlan0 master br0 &> /dev/null
7599c9b084SIdo Schimmel	check_fail $?
7699c9b084SIdo Schimmel
7799c9b084SIdo Schimmel	ip link set dev $swp1 nomaster
7899c9b084SIdo Schimmel
7999c9b084SIdo Schimmel	ip link set dev vxlan0 master br0
8099c9b084SIdo Schimmel	check_err $?
8199c9b084SIdo Schimmel	ip link set dev $swp1 master br0 &> /dev/null
8299c9b084SIdo Schimmel	check_fail $?
8399c9b084SIdo Schimmel}
8499c9b084SIdo Schimmel
8599c9b084SIdo Schimmelsanitization_single_dev_valid_test()
8699c9b084SIdo Schimmel{
8799c9b084SIdo Schimmel	RET=0
8899c9b084SIdo Schimmel
8999c9b084SIdo Schimmel	ip link add dev br0 type bridge mcast_snooping 0
9099c9b084SIdo Schimmel
918e059d64SAmit Cohen	ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \
928e059d64SAmit Cohen		ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789
9399c9b084SIdo Schimmel
9499c9b084SIdo Schimmel	sanitization_single_dev_test_pass
9599c9b084SIdo Schimmel
9699c9b084SIdo Schimmel	ip link del dev vxlan0
9799c9b084SIdo Schimmel	ip link del dev br0
9899c9b084SIdo Schimmel
9999c9b084SIdo Schimmel	log_test "vxlan device - valid configuration"
10099c9b084SIdo Schimmel}
10199c9b084SIdo Schimmel
10299c9b084SIdo Schimmelsanitization_single_dev_vlan_aware_test()
10399c9b084SIdo Schimmel{
10499c9b084SIdo Schimmel	RET=0
10599c9b084SIdo Schimmel
10699c9b084SIdo Schimmel	ip link add dev br0 type bridge mcast_snooping 0 vlan_filtering 1
10799c9b084SIdo Schimmel
1088e059d64SAmit Cohen	ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \
1098e059d64SAmit Cohen		ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789
11099c9b084SIdo Schimmel
111bbe21061SIdo Schimmel	sanitization_single_dev_test_pass
11299c9b084SIdo Schimmel
11399c9b084SIdo Schimmel	ip link del dev vxlan0
11499c9b084SIdo Schimmel	ip link del dev br0
11599c9b084SIdo Schimmel
11699c9b084SIdo Schimmel	log_test "vxlan device with a vlan-aware bridge"
11799c9b084SIdo Schimmel}
11899c9b084SIdo Schimmel
11999c9b084SIdo Schimmelsanitization_single_dev_mcast_enabled_test()
12099c9b084SIdo Schimmel{
12199c9b084SIdo Schimmel	RET=0
12299c9b084SIdo Schimmel
12399c9b084SIdo Schimmel	ip link add dev br0 type bridge
12499c9b084SIdo Schimmel
1258e059d64SAmit Cohen	ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \
1268e059d64SAmit Cohen		ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789
12799c9b084SIdo Schimmel
12899c9b084SIdo Schimmel	sanitization_single_dev_test_fail
12999c9b084SIdo Schimmel
13099c9b084SIdo Schimmel	ip link del dev vxlan0
13199c9b084SIdo Schimmel	ip link del dev br0
13299c9b084SIdo Schimmel
13399c9b084SIdo Schimmel	log_test "vxlan device with a multicast enabled bridge"
13499c9b084SIdo Schimmel}
13599c9b084SIdo Schimmel
13699c9b084SIdo Schimmelsanitization_single_dev_mcast_group_test()
13799c9b084SIdo Schimmel{
13899c9b084SIdo Schimmel	RET=0
13999c9b084SIdo Schimmel
14099c9b084SIdo Schimmel	ip link add dev br0 type bridge mcast_snooping 0
1414d189c10SIdo Schimmel	ip link add name dummy1 up type dummy
14299c9b084SIdo Schimmel
1438e059d64SAmit Cohen	ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \
1448e059d64SAmit Cohen		ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789 \
1458e059d64SAmit Cohen		dev dummy1 group $MC_IP
14699c9b084SIdo Schimmel
14799c9b084SIdo Schimmel	sanitization_single_dev_test_fail
14899c9b084SIdo Schimmel
14999c9b084SIdo Schimmel	ip link del dev vxlan0
1504d189c10SIdo Schimmel	ip link del dev dummy1
15199c9b084SIdo Schimmel	ip link del dev br0
15299c9b084SIdo Schimmel
15399c9b084SIdo Schimmel	log_test "vxlan device with a multicast group"
15499c9b084SIdo Schimmel}
15599c9b084SIdo Schimmel
15699c9b084SIdo Schimmelsanitization_single_dev_no_local_ip_test()
15799c9b084SIdo Schimmel{
15899c9b084SIdo Schimmel	RET=0
15999c9b084SIdo Schimmel
16099c9b084SIdo Schimmel	ip link add dev br0 type bridge mcast_snooping 0
16199c9b084SIdo Schimmel
1628e059d64SAmit Cohen	ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \
16399c9b084SIdo Schimmel		ttl 20 tos inherit dstport 4789
16499c9b084SIdo Schimmel
16599c9b084SIdo Schimmel	sanitization_single_dev_test_fail
16699c9b084SIdo Schimmel
16799c9b084SIdo Schimmel	ip link del dev vxlan0
16899c9b084SIdo Schimmel	ip link del dev br0
16999c9b084SIdo Schimmel
17099c9b084SIdo Schimmel	log_test "vxlan device with no local ip"
17199c9b084SIdo Schimmel}
17299c9b084SIdo Schimmel
1738e059d64SAmit Cohensanitization_single_dev_learning_enabled_ipv4_test()
17499c9b084SIdo Schimmel{
17599c9b084SIdo Schimmel	RET=0
17699c9b084SIdo Schimmel
17799c9b084SIdo Schimmel	ip link add dev br0 type bridge mcast_snooping 0
17899c9b084SIdo Schimmel
1798e059d64SAmit Cohen	ip link add name vxlan0 up type vxlan id 10 learning $UDPCSUM_FLAFS \
1808e059d64SAmit Cohen		ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789
18199c9b084SIdo Schimmel
182dbd4485aSIdo Schimmel	sanitization_single_dev_test_pass
18399c9b084SIdo Schimmel
18499c9b084SIdo Schimmel	ip link del dev vxlan0
18599c9b084SIdo Schimmel	ip link del dev br0
18699c9b084SIdo Schimmel
18799c9b084SIdo Schimmel	log_test "vxlan device with learning enabled"
18899c9b084SIdo Schimmel}
18999c9b084SIdo Schimmel
19099c9b084SIdo Schimmelsanitization_single_dev_local_interface_test()
19199c9b084SIdo Schimmel{
19299c9b084SIdo Schimmel	RET=0
19399c9b084SIdo Schimmel
19499c9b084SIdo Schimmel	ip link add dev br0 type bridge mcast_snooping 0
1954d189c10SIdo Schimmel	ip link add name dummy1 up type dummy
19699c9b084SIdo Schimmel
1978e059d64SAmit Cohen	ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \
1988e059d64SAmit Cohen		ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789 dev dummy1
19999c9b084SIdo Schimmel
20099c9b084SIdo Schimmel	sanitization_single_dev_test_fail
20199c9b084SIdo Schimmel
20299c9b084SIdo Schimmel	ip link del dev vxlan0
2034d189c10SIdo Schimmel	ip link del dev dummy1
20499c9b084SIdo Schimmel	ip link del dev br0
20599c9b084SIdo Schimmel
20699c9b084SIdo Schimmel	log_test "vxlan device with local interface"
20799c9b084SIdo Schimmel}
20899c9b084SIdo Schimmel
20999c9b084SIdo Schimmelsanitization_single_dev_port_range_test()
21099c9b084SIdo Schimmel{
21199c9b084SIdo Schimmel	RET=0
21299c9b084SIdo Schimmel
21399c9b084SIdo Schimmel	ip link add dev br0 type bridge mcast_snooping 0
21499c9b084SIdo Schimmel
2158e059d64SAmit Cohen	ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \
2168e059d64SAmit Cohen		ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789 \
21799c9b084SIdo Schimmel		srcport 4000 5000
21899c9b084SIdo Schimmel
21999c9b084SIdo Schimmel	sanitization_single_dev_test_fail
22099c9b084SIdo Schimmel
22199c9b084SIdo Schimmel	ip link del dev vxlan0
22299c9b084SIdo Schimmel	ip link del dev br0
22399c9b084SIdo Schimmel
22499c9b084SIdo Schimmel	log_test "vxlan device with udp source port range"
22599c9b084SIdo Schimmel}
22699c9b084SIdo Schimmel
22799c9b084SIdo Schimmelsanitization_single_dev_tos_static_test()
22899c9b084SIdo Schimmel{
22999c9b084SIdo Schimmel	RET=0
23099c9b084SIdo Schimmel
23199c9b084SIdo Schimmel	ip link add dev br0 type bridge mcast_snooping 0
23299c9b084SIdo Schimmel
2338e059d64SAmit Cohen	ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \
2348e059d64SAmit Cohen		ttl 20 tos 20 local $LOCAL_IP_1 dstport 4789
23599c9b084SIdo Schimmel
23699c9b084SIdo Schimmel	sanitization_single_dev_test_fail
23799c9b084SIdo Schimmel
23899c9b084SIdo Schimmel	ip link del dev vxlan0
23999c9b084SIdo Schimmel	ip link del dev br0
24099c9b084SIdo Schimmel
24199c9b084SIdo Schimmel	log_test "vxlan device with static tos"
24299c9b084SIdo Schimmel}
24399c9b084SIdo Schimmel
24499c9b084SIdo Schimmelsanitization_single_dev_ttl_inherit_test()
24599c9b084SIdo Schimmel{
24699c9b084SIdo Schimmel	RET=0
24799c9b084SIdo Schimmel
24899c9b084SIdo Schimmel	ip link add dev br0 type bridge mcast_snooping 0
24999c9b084SIdo Schimmel
2508e059d64SAmit Cohen	ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \
2518e059d64SAmit Cohen		ttl inherit tos inherit local $LOCAL_IP_1 dstport 4789
25299c9b084SIdo Schimmel
25399c9b084SIdo Schimmel	sanitization_single_dev_test_fail
25499c9b084SIdo Schimmel
25599c9b084SIdo Schimmel	ip link del dev vxlan0
25699c9b084SIdo Schimmel	ip link del dev br0
25799c9b084SIdo Schimmel
25899c9b084SIdo Schimmel	log_test "vxlan device with inherit ttl"
25999c9b084SIdo Schimmel}
26099c9b084SIdo Schimmel
2618e059d64SAmit Cohensanitization_single_dev_udp_checksum_ipv4_test()
26299c9b084SIdo Schimmel{
26399c9b084SIdo Schimmel	RET=0
26499c9b084SIdo Schimmel
26599c9b084SIdo Schimmel	ip link add dev br0 type bridge mcast_snooping 0
26699c9b084SIdo Schimmel
26799c9b084SIdo Schimmel	ip link add name vxlan0 up type vxlan id 10 nolearning udpcsum \
2688e059d64SAmit Cohen		ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789
26999c9b084SIdo Schimmel
27099c9b084SIdo Schimmel	sanitization_single_dev_test_fail
27199c9b084SIdo Schimmel
27299c9b084SIdo Schimmel	ip link del dev vxlan0
27399c9b084SIdo Schimmel	ip link del dev br0
27499c9b084SIdo Schimmel
27599c9b084SIdo Schimmel	log_test "vxlan device with udp checksum"
27699c9b084SIdo Schimmel}
27799c9b084SIdo Schimmel
27899c9b084SIdo Schimmelsanitization_single_dev_test()
27999c9b084SIdo Schimmel{
28099c9b084SIdo Schimmel	# These tests make sure that we correctly sanitize VxLAN device
28199c9b084SIdo Schimmel	# configurations we do not support
28299c9b084SIdo Schimmel	sanitization_single_dev_valid_test
28399c9b084SIdo Schimmel	sanitization_single_dev_vlan_aware_test
28499c9b084SIdo Schimmel	sanitization_single_dev_mcast_enabled_test
28599c9b084SIdo Schimmel	sanitization_single_dev_mcast_group_test
28699c9b084SIdo Schimmel	sanitization_single_dev_no_local_ip_test
2878e059d64SAmit Cohen	sanitization_single_dev_learning_enabled_"$ADDR_FAMILY"_test
28899c9b084SIdo Schimmel	sanitization_single_dev_local_interface_test
28999c9b084SIdo Schimmel	sanitization_single_dev_port_range_test
29099c9b084SIdo Schimmel	sanitization_single_dev_tos_static_test
29199c9b084SIdo Schimmel	sanitization_single_dev_ttl_inherit_test
2928e059d64SAmit Cohen	sanitization_single_dev_udp_checksum_"$ADDR_FAMILY"_test
29399c9b084SIdo Schimmel}
29499c9b084SIdo Schimmel
29599c9b084SIdo Schimmelsanitization_multi_devs_test_pass()
29699c9b084SIdo Schimmel{
29799c9b084SIdo Schimmel	ip link set dev $swp1 master br0
29899c9b084SIdo Schimmel	check_err $?
29999c9b084SIdo Schimmel	ip link set dev vxlan0 master br0
30099c9b084SIdo Schimmel	check_err $?
30199c9b084SIdo Schimmel	ip link set dev $swp2 master br1
30299c9b084SIdo Schimmel	check_err $?
30399c9b084SIdo Schimmel	ip link set dev vxlan1 master br1
30499c9b084SIdo Schimmel	check_err $?
30599c9b084SIdo Schimmel
30699c9b084SIdo Schimmel	ip link set dev $swp2 nomaster
30799c9b084SIdo Schimmel	ip link set dev $swp1 nomaster
30899c9b084SIdo Schimmel
30999c9b084SIdo Schimmel	ip link set dev $swp1 master br0
31099c9b084SIdo Schimmel	check_err $?
31199c9b084SIdo Schimmel	ip link set dev $swp2 master br1
31299c9b084SIdo Schimmel	check_err $?
31399c9b084SIdo Schimmel}
31499c9b084SIdo Schimmel
31599c9b084SIdo Schimmelsanitization_multi_devs_test_fail()
31699c9b084SIdo Schimmel{
31799c9b084SIdo Schimmel	ip link set dev $swp1 master br0
31899c9b084SIdo Schimmel	check_err $?
31999c9b084SIdo Schimmel	ip link set dev vxlan0 master br0
32099c9b084SIdo Schimmel	check_err $?
32199c9b084SIdo Schimmel	ip link set dev $swp2 master br1
32299c9b084SIdo Schimmel	check_err $?
32399c9b084SIdo Schimmel	ip link set dev vxlan1 master br1 &> /dev/null
32499c9b084SIdo Schimmel	check_fail $?
32599c9b084SIdo Schimmel
32699c9b084SIdo Schimmel	ip link set dev $swp2 nomaster
32799c9b084SIdo Schimmel	ip link set dev $swp1 nomaster
32899c9b084SIdo Schimmel
32999c9b084SIdo Schimmel	ip link set dev vxlan1 master br1
33099c9b084SIdo Schimmel	check_err $?
33199c9b084SIdo Schimmel	ip link set dev $swp1 master br0
33299c9b084SIdo Schimmel	check_err $?
33399c9b084SIdo Schimmel	ip link set dev $swp2 master br1 &> /dev/null
33499c9b084SIdo Schimmel	check_fail $?
33599c9b084SIdo Schimmel}
33699c9b084SIdo Schimmel
33799c9b084SIdo Schimmelsanitization_multi_devs_valid_test()
33899c9b084SIdo Schimmel{
33999c9b084SIdo Schimmel	RET=0
34099c9b084SIdo Schimmel
34199c9b084SIdo Schimmel	ip link add dev br0 type bridge mcast_snooping 0
34299c9b084SIdo Schimmel	ip link add dev br1 type bridge mcast_snooping 0
34399c9b084SIdo Schimmel
3448e059d64SAmit Cohen	ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \
3458e059d64SAmit Cohen		ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789
3468e059d64SAmit Cohen	ip link add name vxlan1 up type vxlan id 20 nolearning $UDPCSUM_FLAFS \
3478e059d64SAmit Cohen		ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789
34899c9b084SIdo Schimmel
34999c9b084SIdo Schimmel	sanitization_multi_devs_test_pass
35099c9b084SIdo Schimmel
35199c9b084SIdo Schimmel	ip link del dev vxlan1
35299c9b084SIdo Schimmel	ip link del dev vxlan0
35399c9b084SIdo Schimmel	ip link del dev br1
35499c9b084SIdo Schimmel	ip link del dev br0
35599c9b084SIdo Schimmel
35699c9b084SIdo Schimmel	log_test "multiple vxlan devices - valid configuration"
35799c9b084SIdo Schimmel}
35899c9b084SIdo Schimmel
35999c9b084SIdo Schimmelsanitization_multi_devs_ttl_test()
36099c9b084SIdo Schimmel{
36199c9b084SIdo Schimmel	RET=0
36299c9b084SIdo Schimmel
36399c9b084SIdo Schimmel	ip link add dev br0 type bridge mcast_snooping 0
36499c9b084SIdo Schimmel	ip link add dev br1 type bridge mcast_snooping 0
36599c9b084SIdo Schimmel
3668e059d64SAmit Cohen	ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \
3678e059d64SAmit Cohen		ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789
3688e059d64SAmit Cohen	ip link add name vxlan1 up type vxlan id 20 nolearning $UDPCSUM_FLAFS \
3698e059d64SAmit Cohen		ttl 40 tos inherit local $LOCAL_IP_1 dstport 4789
37099c9b084SIdo Schimmel
37199c9b084SIdo Schimmel	sanitization_multi_devs_test_fail
37299c9b084SIdo Schimmel
37399c9b084SIdo Schimmel	ip link del dev vxlan1
37499c9b084SIdo Schimmel	ip link del dev vxlan0
37599c9b084SIdo Schimmel	ip link del dev br1
37699c9b084SIdo Schimmel	ip link del dev br0
37799c9b084SIdo Schimmel
37899c9b084SIdo Schimmel	log_test "multiple vxlan devices with different ttl"
37999c9b084SIdo Schimmel}
38099c9b084SIdo Schimmel
38199c9b084SIdo Schimmelsanitization_multi_devs_udp_dstport_test()
38299c9b084SIdo Schimmel{
38399c9b084SIdo Schimmel	RET=0
38499c9b084SIdo Schimmel
38599c9b084SIdo Schimmel	ip link add dev br0 type bridge mcast_snooping 0
38699c9b084SIdo Schimmel	ip link add dev br1 type bridge mcast_snooping 0
38799c9b084SIdo Schimmel
3888e059d64SAmit Cohen	ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \
3898e059d64SAmit Cohen		ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789
3908e059d64SAmit Cohen	ip link add name vxlan1 up type vxlan id 20 nolearning $UDPCSUM_FLAFS \
3918e059d64SAmit Cohen		ttl 20 tos inherit local $LOCAL_IP_1 dstport 5789
39299c9b084SIdo Schimmel
39399c9b084SIdo Schimmel	sanitization_multi_devs_test_fail
39499c9b084SIdo Schimmel
39599c9b084SIdo Schimmel	ip link del dev vxlan1
39699c9b084SIdo Schimmel	ip link del dev vxlan0
39799c9b084SIdo Schimmel	ip link del dev br1
39899c9b084SIdo Schimmel	ip link del dev br0
39999c9b084SIdo Schimmel
40099c9b084SIdo Schimmel	log_test "multiple vxlan devices with different udp destination port"
40199c9b084SIdo Schimmel}
40299c9b084SIdo Schimmel
40399c9b084SIdo Schimmelsanitization_multi_devs_local_ip_test()
40499c9b084SIdo Schimmel{
40599c9b084SIdo Schimmel	RET=0
40699c9b084SIdo Schimmel
40799c9b084SIdo Schimmel	ip link add dev br0 type bridge mcast_snooping 0
40899c9b084SIdo Schimmel	ip link add dev br1 type bridge mcast_snooping 0
40999c9b084SIdo Schimmel
4108e059d64SAmit Cohen	ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \
4118e059d64SAmit Cohen		ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789
4128e059d64SAmit Cohen	ip link add name vxlan1 up type vxlan id 20 nolearning $UDPCSUM_FLAFS \
4138e059d64SAmit Cohen		ttl 20 tos inherit local $LOCAL_IP_2 dstport 4789
41499c9b084SIdo Schimmel
41599c9b084SIdo Schimmel	sanitization_multi_devs_test_fail
41699c9b084SIdo Schimmel
41799c9b084SIdo Schimmel	ip link del dev vxlan1
41899c9b084SIdo Schimmel	ip link del dev vxlan0
41999c9b084SIdo Schimmel	ip link del dev br1
42099c9b084SIdo Schimmel	ip link del dev br0
42199c9b084SIdo Schimmel
42299c9b084SIdo Schimmel	log_test "multiple vxlan devices with different local ip"
42399c9b084SIdo Schimmel}
42499c9b084SIdo Schimmel
42599c9b084SIdo Schimmelsanitization_multi_devs_test()
42699c9b084SIdo Schimmel{
42799c9b084SIdo Schimmel	# The device has a single VTEP, which means all the VxLAN devices
42899c9b084SIdo Schimmel	# we offload must share certain properties such as source IP and
42999c9b084SIdo Schimmel	# UDP destination port. These tests make sure that we forbid
43099c9b084SIdo Schimmel	# configurations that violate this limitation
43199c9b084SIdo Schimmel	sanitization_multi_devs_valid_test
43299c9b084SIdo Schimmel	sanitization_multi_devs_ttl_test
43399c9b084SIdo Schimmel	sanitization_multi_devs_udp_dstport_test
43499c9b084SIdo Schimmel	sanitization_multi_devs_local_ip_test
43599c9b084SIdo Schimmel}
43699c9b084SIdo Schimmel
43799c9b084SIdo Schimmelsanitization_test()
43899c9b084SIdo Schimmel{
43999c9b084SIdo Schimmel	sanitization_single_dev_test
44099c9b084SIdo Schimmel	sanitization_multi_devs_test
44199c9b084SIdo Schimmel}
44299c9b084SIdo Schimmel
44399c9b084SIdo Schimmeloffload_indication_setup_create()
44499c9b084SIdo Schimmel{
44599c9b084SIdo Schimmel	# Create a simple setup with two bridges, each with a VxLAN device
44699c9b084SIdo Schimmel	# and one local port
447*55415775SPetr Machata	ip link add name br0 type bridge mcast_snooping 0
448*55415775SPetr Machata	ip link set dev br0 addrgenmode none
449*55415775SPetr Machata	ip link set dev br0 up
450*55415775SPetr Machata	ip link add name br1 type bridge mcast_snooping 0
451*55415775SPetr Machata	ip link set dev br1 addrgenmode none
452*55415775SPetr Machata	ip link set dev br1 up
45399c9b084SIdo Schimmel
45499c9b084SIdo Schimmel	ip link set dev $swp1 master br0
45599c9b084SIdo Schimmel	ip link set dev $swp2 master br1
45699c9b084SIdo Schimmel
4578e059d64SAmit Cohen	ip address add $LOCAL_IP_1/$PREFIX_LEN dev lo
45899c9b084SIdo Schimmel
45999c9b084SIdo Schimmel	ip link add name vxlan0 up master br0 type vxlan id 10 nolearning \
4608e059d64SAmit Cohen		$UDPCSUM_FLAFS ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789
46199c9b084SIdo Schimmel	ip link add name vxlan1 up master br1 type vxlan id 20 nolearning \
4628e059d64SAmit Cohen		$UDPCSUM_FLAFS ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789
46399c9b084SIdo Schimmel}
46499c9b084SIdo Schimmel
46599c9b084SIdo Schimmeloffload_indication_setup_destroy()
46699c9b084SIdo Schimmel{
46799c9b084SIdo Schimmel	ip link del dev vxlan1
46899c9b084SIdo Schimmel	ip link del dev vxlan0
46999c9b084SIdo Schimmel
4708e059d64SAmit Cohen	ip address del $LOCAL_IP_1/$PREFIX_LEN dev lo
47199c9b084SIdo Schimmel
47299c9b084SIdo Schimmel	ip link set dev $swp2 nomaster
47399c9b084SIdo Schimmel	ip link set dev $swp1 nomaster
47499c9b084SIdo Schimmel
47599c9b084SIdo Schimmel	ip link del dev br1
47699c9b084SIdo Schimmel	ip link del dev br0
47799c9b084SIdo Schimmel}
47899c9b084SIdo Schimmel
47999c9b084SIdo Schimmeloffload_indication_fdb_flood_test()
48099c9b084SIdo Schimmel{
48199c9b084SIdo Schimmel	RET=0
48299c9b084SIdo Schimmel
4838e059d64SAmit Cohen	bridge fdb append 00:00:00:00:00:00 dev vxlan0 self dst $LOCAL_IP_2
48499c9b084SIdo Schimmel
48505ef614cSDanielle Ratson	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb 00:00:00:00:00:00 \
48605ef614cSDanielle Ratson		bridge fdb show brport vxlan0
48799c9b084SIdo Schimmel	check_err $?
48899c9b084SIdo Schimmel
48999c9b084SIdo Schimmel	bridge fdb del 00:00:00:00:00:00 dev vxlan0 self
49099c9b084SIdo Schimmel
49199c9b084SIdo Schimmel	log_test "vxlan flood entry offload indication"
49299c9b084SIdo Schimmel}
49399c9b084SIdo Schimmel
49499c9b084SIdo Schimmeloffload_indication_fdb_bridge_test()
49599c9b084SIdo Schimmel{
49699c9b084SIdo Schimmel	RET=0
49799c9b084SIdo Schimmel
49899c9b084SIdo Schimmel	bridge fdb add de:ad:be:ef:13:37 dev vxlan0 self master static \
4998e059d64SAmit Cohen		dst $LOCAL_IP_2
50099c9b084SIdo Schimmel
50105ef614cSDanielle Ratson	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
50205ef614cSDanielle Ratson		de:ad:be:ef:13:37 self bridge fdb show brport vxlan0
50399c9b084SIdo Schimmel	check_err $?
50405ef614cSDanielle Ratson	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
50505ef614cSDanielle Ratson		de:ad:be:ef:13:37 self -v bridge fdb show brport vxlan0
50699c9b084SIdo Schimmel	check_err $?
50799c9b084SIdo Schimmel
50899c9b084SIdo Schimmel	log_test "vxlan entry offload indication - initial state"
50999c9b084SIdo Schimmel
51099c9b084SIdo Schimmel	# Remove FDB entry from the bridge driver and check that corresponding
51199c9b084SIdo Schimmel	# entry in the VxLAN driver is not marked as offloaded
51299c9b084SIdo Schimmel	RET=0
51399c9b084SIdo Schimmel
51499c9b084SIdo Schimmel	bridge fdb del de:ad:be:ef:13:37 dev vxlan0 master
51505ef614cSDanielle Ratson	busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb \
51605ef614cSDanielle Ratson		de:ad:be:ef:13:37 self bridge fdb show brport vxlan0
51705ef614cSDanielle Ratson	check_err $?
51899c9b084SIdo Schimmel
51999c9b084SIdo Schimmel	log_test "vxlan entry offload indication - after removal from bridge"
52099c9b084SIdo Schimmel
52199c9b084SIdo Schimmel	# Add the FDB entry back to the bridge driver and make sure it is
52299c9b084SIdo Schimmel	# marked as offloaded in both drivers
52399c9b084SIdo Schimmel	RET=0
52499c9b084SIdo Schimmel
52599c9b084SIdo Schimmel	bridge fdb add de:ad:be:ef:13:37 dev vxlan0 master static
52605ef614cSDanielle Ratson	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
52705ef614cSDanielle Ratson		de:ad:be:ef:13:37 self bridge fdb show brport vxlan0
52899c9b084SIdo Schimmel	check_err $?
52905ef614cSDanielle Ratson	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
53005ef614cSDanielle Ratson		de:ad:be:ef:13:37 self -v bridge fdb show brport vxlan0
53199c9b084SIdo Schimmel	check_err $?
53299c9b084SIdo Schimmel
53399c9b084SIdo Schimmel	log_test "vxlan entry offload indication - after re-add to bridge"
53499c9b084SIdo Schimmel
53599c9b084SIdo Schimmel	# Remove FDB entry from the VxLAN driver and check that corresponding
53699c9b084SIdo Schimmel	# entry in the bridge driver is not marked as offloaded
53799c9b084SIdo Schimmel	RET=0
53899c9b084SIdo Schimmel
53999c9b084SIdo Schimmel	bridge fdb del de:ad:be:ef:13:37 dev vxlan0 self
54005ef614cSDanielle Ratson	busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb \
54105ef614cSDanielle Ratson		de:ad:be:ef:13:37 self -v bridge fdb show brport vxlan0
54205ef614cSDanielle Ratson	check_err $?
54399c9b084SIdo Schimmel
54499c9b084SIdo Schimmel	log_test "vxlan entry offload indication - after removal from vxlan"
54599c9b084SIdo Schimmel
54699c9b084SIdo Schimmel	# Add the FDB entry back to the VxLAN driver and make sure it is
54799c9b084SIdo Schimmel	# marked as offloaded in both drivers
54899c9b084SIdo Schimmel	RET=0
54999c9b084SIdo Schimmel
5508e059d64SAmit Cohen	bridge fdb add de:ad:be:ef:13:37 dev vxlan0 self dst $LOCAL_IP_2
55105ef614cSDanielle Ratson	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
55205ef614cSDanielle Ratson		de:ad:be:ef:13:37 self bridge fdb show brport vxlan0
55399c9b084SIdo Schimmel	check_err $?
55405ef614cSDanielle Ratson	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
55505ef614cSDanielle Ratson		de:ad:be:ef:13:37 self -v bridge fdb show brport vxlan0
55699c9b084SIdo Schimmel	check_err $?
55799c9b084SIdo Schimmel
55899c9b084SIdo Schimmel	log_test "vxlan entry offload indication - after re-add to vxlan"
55999c9b084SIdo Schimmel
56099c9b084SIdo Schimmel	bridge fdb del de:ad:be:ef:13:37 dev vxlan0 self master
56199c9b084SIdo Schimmel}
56299c9b084SIdo Schimmel
56399c9b084SIdo Schimmeloffload_indication_fdb_test()
56499c9b084SIdo Schimmel{
56599c9b084SIdo Schimmel	offload_indication_fdb_flood_test
56699c9b084SIdo Schimmel	offload_indication_fdb_bridge_test
56799c9b084SIdo Schimmel}
56899c9b084SIdo Schimmel
56999c9b084SIdo Schimmeloffload_indication_decap_route_test()
57099c9b084SIdo Schimmel{
57199c9b084SIdo Schimmel	RET=0
57299c9b084SIdo Schimmel
57305ef614cSDanielle Ratson	busywait "$TIMEOUT" wait_for_offload \
5748e059d64SAmit Cohen		ip $IP_FLAG route show table local $LOCAL_IP_1
57599c9b084SIdo Schimmel	check_err $?
57699c9b084SIdo Schimmel
57799c9b084SIdo Schimmel	ip link set dev vxlan0 down
57805ef614cSDanielle Ratson	busywait "$TIMEOUT" wait_for_offload \
5798e059d64SAmit Cohen		ip $IP_FLAG route show table local $LOCAL_IP_1
58099c9b084SIdo Schimmel	check_err $?
58199c9b084SIdo Schimmel
58299c9b084SIdo Schimmel	ip link set dev vxlan1 down
58305ef614cSDanielle Ratson	busywait "$TIMEOUT" not wait_for_offload \
5848e059d64SAmit Cohen		ip $IP_FLAG route show table local $LOCAL_IP_1
58505ef614cSDanielle Ratson	check_err $?
58699c9b084SIdo Schimmel
58799c9b084SIdo Schimmel	log_test "vxlan decap route - vxlan device down"
58899c9b084SIdo Schimmel
58999c9b084SIdo Schimmel	RET=0
59099c9b084SIdo Schimmel
59199c9b084SIdo Schimmel	ip link set dev vxlan1 up
59205ef614cSDanielle Ratson	busywait "$TIMEOUT" wait_for_offload \
5938e059d64SAmit Cohen		ip $IP_FLAG route show table local $LOCAL_IP_1
59499c9b084SIdo Schimmel	check_err $?
59599c9b084SIdo Schimmel
59699c9b084SIdo Schimmel	ip link set dev vxlan0 up
59705ef614cSDanielle Ratson	busywait "$TIMEOUT" wait_for_offload \
5988e059d64SAmit Cohen		ip $IP_FLAG route show table local $LOCAL_IP_1
59999c9b084SIdo Schimmel	check_err $?
60099c9b084SIdo Schimmel
60199c9b084SIdo Schimmel	log_test "vxlan decap route - vxlan device up"
60299c9b084SIdo Schimmel
60399c9b084SIdo Schimmel	RET=0
60499c9b084SIdo Schimmel
6058e059d64SAmit Cohen	ip address delete $LOCAL_IP_1/$PREFIX_LEN dev lo
60605ef614cSDanielle Ratson	busywait "$TIMEOUT" not wait_for_offload \
6078e059d64SAmit Cohen		ip $IP_FLAG route show table local $LOCAL_IP_1
60805ef614cSDanielle Ratson	check_err $?
60999c9b084SIdo Schimmel
6108e059d64SAmit Cohen	ip address add $LOCAL_IP_1/$PREFIX_LEN dev lo
61105ef614cSDanielle Ratson	busywait "$TIMEOUT" wait_for_offload \
6128e059d64SAmit Cohen		ip $IP_FLAG route show table local $LOCAL_IP_1
61399c9b084SIdo Schimmel	check_err $?
61499c9b084SIdo Schimmel
61599c9b084SIdo Schimmel	log_test "vxlan decap route - add local route"
61699c9b084SIdo Schimmel
61799c9b084SIdo Schimmel	RET=0
61899c9b084SIdo Schimmel
61999c9b084SIdo Schimmel	ip link set dev $swp1 nomaster
62005ef614cSDanielle Ratson	busywait "$TIMEOUT" wait_for_offload \
6218e059d64SAmit Cohen		ip $IP_FLAG route show table local $LOCAL_IP_1
62299c9b084SIdo Schimmel	check_err $?
62399c9b084SIdo Schimmel
62499c9b084SIdo Schimmel	ip link set dev $swp2 nomaster
62505ef614cSDanielle Ratson	busywait "$TIMEOUT" not wait_for_offload \
6268e059d64SAmit Cohen		ip $IP_FLAG route show table local $LOCAL_IP_1
62705ef614cSDanielle Ratson	check_err $?
62899c9b084SIdo Schimmel
62999c9b084SIdo Schimmel	ip link set dev $swp1 master br0
63099c9b084SIdo Schimmel	ip link set dev $swp2 master br1
63105ef614cSDanielle Ratson	busywait "$TIMEOUT" wait_for_offload \
6328e059d64SAmit Cohen		ip $IP_FLAG route show table local $LOCAL_IP_1
63399c9b084SIdo Schimmel	check_err $?
63499c9b084SIdo Schimmel
63599c9b084SIdo Schimmel	log_test "vxlan decap route - local ports enslavement"
63699c9b084SIdo Schimmel
63799c9b084SIdo Schimmel	RET=0
63899c9b084SIdo Schimmel
63999c9b084SIdo Schimmel	ip link del dev br0
64005ef614cSDanielle Ratson	busywait "$TIMEOUT" wait_for_offload \
6418e059d64SAmit Cohen		ip $IP_FLAG route show table local $LOCAL_IP_1
64299c9b084SIdo Schimmel	check_err $?
64399c9b084SIdo Schimmel
64499c9b084SIdo Schimmel	ip link del dev br1
64505ef614cSDanielle Ratson	busywait "$TIMEOUT" not wait_for_offload \
6468e059d64SAmit Cohen		ip $IP_FLAG route show table local $LOCAL_IP_1
64705ef614cSDanielle Ratson	check_err $?
64899c9b084SIdo Schimmel
64999c9b084SIdo Schimmel	log_test "vxlan decap route - bridge device deletion"
65099c9b084SIdo Schimmel
65199c9b084SIdo Schimmel	RET=0
65299c9b084SIdo Schimmel
653*55415775SPetr Machata	ip link add name br0 type bridge mcast_snooping 0
654*55415775SPetr Machata	ip link set dev br0 addrgenmode none
655*55415775SPetr Machata	ip link set dev br0 up
656*55415775SPetr Machata	ip link add name br1 type bridge mcast_snooping 0
657*55415775SPetr Machata	ip link set dev br1 addrgenmode none
658*55415775SPetr Machata	ip link set dev br1 up
65999c9b084SIdo Schimmel	ip link set dev $swp1 master br0
66099c9b084SIdo Schimmel	ip link set dev $swp2 master br1
66199c9b084SIdo Schimmel	ip link set dev vxlan0 master br0
66299c9b084SIdo Schimmel	ip link set dev vxlan1 master br1
66305ef614cSDanielle Ratson	busywait "$TIMEOUT" wait_for_offload \
6648e059d64SAmit Cohen		ip $IP_FLAG route show table local $LOCAL_IP_1
66599c9b084SIdo Schimmel	check_err $?
66699c9b084SIdo Schimmel
66799c9b084SIdo Schimmel	ip link del dev vxlan0
66805ef614cSDanielle Ratson	busywait "$TIMEOUT" wait_for_offload \
6698e059d64SAmit Cohen		ip $IP_FLAG route show table local $LOCAL_IP_1
67099c9b084SIdo Schimmel	check_err $?
67199c9b084SIdo Schimmel
67299c9b084SIdo Schimmel	ip link del dev vxlan1
67305ef614cSDanielle Ratson	busywait "$TIMEOUT" not wait_for_offload \
6748e059d64SAmit Cohen		ip $IP_FLAG route show table local $LOCAL_IP_1
67505ef614cSDanielle Ratson	check_err $?
67699c9b084SIdo Schimmel
67799c9b084SIdo Schimmel	log_test "vxlan decap route - vxlan device deletion"
67899c9b084SIdo Schimmel
67999c9b084SIdo Schimmel	ip link add name vxlan0 up master br0 type vxlan id 10 nolearning \
6808e059d64SAmit Cohen		$UDPCSUM_FLAFS ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789
68199c9b084SIdo Schimmel	ip link add name vxlan1 up master br1 type vxlan id 20 nolearning \
6828e059d64SAmit Cohen		$UDPCSUM_FLAFS ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789
68399c9b084SIdo Schimmel}
68499c9b084SIdo Schimmel
6850efe9ed9SPetr Machatacheck_fdb_offloaded()
6860efe9ed9SPetr Machata{
6870efe9ed9SPetr Machata	local mac=00:11:22:33:44:55
6880efe9ed9SPetr Machata	local zmac=00:00:00:00:00:00
6890efe9ed9SPetr Machata
69005ef614cSDanielle Ratson	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb $mac self \
69105ef614cSDanielle Ratson		bridge fdb show dev vxlan0
6920efe9ed9SPetr Machata	check_err $?
69305ef614cSDanielle Ratson	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb $mac master \
69405ef614cSDanielle Ratson		bridge fdb show dev vxlan0
6950efe9ed9SPetr Machata	check_err $?
6960efe9ed9SPetr Machata
69705ef614cSDanielle Ratson	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb $zmac self \
69805ef614cSDanielle Ratson		bridge fdb show dev vxlan0
6990efe9ed9SPetr Machata	check_err $?
7000efe9ed9SPetr Machata}
7010efe9ed9SPetr Machata
7020efe9ed9SPetr Machatacheck_vxlan_fdb_not_offloaded()
7030efe9ed9SPetr Machata{
7040efe9ed9SPetr Machata	local mac=00:11:22:33:44:55
7050efe9ed9SPetr Machata	local zmac=00:00:00:00:00:00
7060efe9ed9SPetr Machata
7070efe9ed9SPetr Machata	bridge fdb show dev vxlan0 | grep $mac | grep -q self
7080efe9ed9SPetr Machata	check_err $?
70905ef614cSDanielle Ratson	busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb $mac self \
71005ef614cSDanielle Ratson		bridge fdb show dev vxlan0
71105ef614cSDanielle Ratson	check_err $?
7120efe9ed9SPetr Machata
7130efe9ed9SPetr Machata	bridge fdb show dev vxlan0 | grep $zmac | grep -q self
7140efe9ed9SPetr Machata	check_err $?
71505ef614cSDanielle Ratson	busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb $zmac self \
71605ef614cSDanielle Ratson		bridge fdb show dev vxlan0
71705ef614cSDanielle Ratson	check_err $?
7180efe9ed9SPetr Machata}
7190efe9ed9SPetr Machata
7200efe9ed9SPetr Machatacheck_bridge_fdb_not_offloaded()
7210efe9ed9SPetr Machata{
7220efe9ed9SPetr Machata	local mac=00:11:22:33:44:55
7230efe9ed9SPetr Machata	local zmac=00:00:00:00:00:00
7240efe9ed9SPetr Machata
7250efe9ed9SPetr Machata	bridge fdb show dev vxlan0 | grep $mac | grep -q master
7260efe9ed9SPetr Machata	check_err $?
72705ef614cSDanielle Ratson	busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb $mac master \
72805ef614cSDanielle Ratson		bridge fdb show dev vxlan0
72905ef614cSDanielle Ratson	check_err $?
7300efe9ed9SPetr Machata}
7310efe9ed9SPetr Machata
7320efe9ed9SPetr Machata__offload_indication_join_vxlan_first()
7330efe9ed9SPetr Machata{
7340efe9ed9SPetr Machata	local vid=$1; shift
7350efe9ed9SPetr Machata
7360efe9ed9SPetr Machata	local mac=00:11:22:33:44:55
7370efe9ed9SPetr Machata	local zmac=00:00:00:00:00:00
7380efe9ed9SPetr Machata
7398e059d64SAmit Cohen	bridge fdb append $zmac dev vxlan0 self dst $LOCAL_IP_2
7400efe9ed9SPetr Machata
7410efe9ed9SPetr Machata	ip link set dev vxlan0 master br0
7428e059d64SAmit Cohen	bridge fdb add dev vxlan0 $mac self master static dst $LOCAL_IP_2
7430efe9ed9SPetr Machata
7440efe9ed9SPetr Machata	RET=0
7450efe9ed9SPetr Machata	check_vxlan_fdb_not_offloaded
7460efe9ed9SPetr Machata	ip link set dev $swp1 master br0
7470efe9ed9SPetr Machata	sleep .1
7480efe9ed9SPetr Machata	check_fdb_offloaded
7490efe9ed9SPetr Machata	log_test "offload indication - attach vxlan first"
7500efe9ed9SPetr Machata
7510efe9ed9SPetr Machata	RET=0
7520efe9ed9SPetr Machata	ip link set dev vxlan0 down
7530efe9ed9SPetr Machata	check_vxlan_fdb_not_offloaded
7540efe9ed9SPetr Machata	check_bridge_fdb_not_offloaded
7550efe9ed9SPetr Machata	log_test "offload indication - set vxlan down"
7560efe9ed9SPetr Machata
7570efe9ed9SPetr Machata	RET=0
7580efe9ed9SPetr Machata	ip link set dev vxlan0 up
7590efe9ed9SPetr Machata	sleep .1
7600efe9ed9SPetr Machata	check_fdb_offloaded
7610efe9ed9SPetr Machata	log_test "offload indication - set vxlan up"
7620efe9ed9SPetr Machata
7630efe9ed9SPetr Machata	if [[ ! -z $vid ]]; then
7640efe9ed9SPetr Machata		RET=0
7650efe9ed9SPetr Machata		bridge vlan del dev vxlan0 vid $vid
7660efe9ed9SPetr Machata		check_vxlan_fdb_not_offloaded
7670efe9ed9SPetr Machata		check_bridge_fdb_not_offloaded
7680efe9ed9SPetr Machata		log_test "offload indication - delete VLAN"
7690efe9ed9SPetr Machata
7700efe9ed9SPetr Machata		RET=0
7710efe9ed9SPetr Machata		bridge vlan add dev vxlan0 vid $vid
7720efe9ed9SPetr Machata		check_vxlan_fdb_not_offloaded
7730efe9ed9SPetr Machata		check_bridge_fdb_not_offloaded
7740efe9ed9SPetr Machata		log_test "offload indication - add tagged VLAN"
7750efe9ed9SPetr Machata
7760efe9ed9SPetr Machata		RET=0
7770efe9ed9SPetr Machata		bridge vlan add dev vxlan0 vid $vid pvid untagged
7780efe9ed9SPetr Machata		sleep .1
7790efe9ed9SPetr Machata		check_fdb_offloaded
7800efe9ed9SPetr Machata		log_test "offload indication - add pvid/untagged VLAN"
7810efe9ed9SPetr Machata	fi
7820efe9ed9SPetr Machata
7830efe9ed9SPetr Machata	RET=0
7840efe9ed9SPetr Machata	ip link set dev $swp1 nomaster
7850efe9ed9SPetr Machata	check_vxlan_fdb_not_offloaded
7860efe9ed9SPetr Machata	log_test "offload indication - detach port"
7870efe9ed9SPetr Machata}
7880efe9ed9SPetr Machata
7890efe9ed9SPetr Machataoffload_indication_join_vxlan_first()
7900efe9ed9SPetr Machata{
791*55415775SPetr Machata	ip link add dev br0 type bridge mcast_snooping 0
792*55415775SPetr Machata	ip link set dev br0 addrgenmode none
793*55415775SPetr Machata	ip link set dev br0 up
7948e059d64SAmit Cohen	ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \
7958e059d64SAmit Cohen		ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789
7960efe9ed9SPetr Machata
7970efe9ed9SPetr Machata	__offload_indication_join_vxlan_first
7980efe9ed9SPetr Machata
7990efe9ed9SPetr Machata	ip link del dev vxlan0
8000efe9ed9SPetr Machata	ip link del dev br0
8010efe9ed9SPetr Machata}
8020efe9ed9SPetr Machata
8030efe9ed9SPetr Machata__offload_indication_join_vxlan_last()
8040efe9ed9SPetr Machata{
8050efe9ed9SPetr Machata	local zmac=00:00:00:00:00:00
8060efe9ed9SPetr Machata
8070efe9ed9SPetr Machata	RET=0
8080efe9ed9SPetr Machata
8098e059d64SAmit Cohen	bridge fdb append $zmac dev vxlan0 self dst $LOCAL_IP_2
8100efe9ed9SPetr Machata
8110efe9ed9SPetr Machata	ip link set dev $swp1 master br0
8120efe9ed9SPetr Machata
81305ef614cSDanielle Ratson	busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb $zmac self \
81405ef614cSDanielle Ratson		bridge fdb show dev vxlan0
81505ef614cSDanielle Ratson	check_err $?
8160efe9ed9SPetr Machata
8170efe9ed9SPetr Machata	ip link set dev vxlan0 master br0
8180efe9ed9SPetr Machata
81905ef614cSDanielle Ratson	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb $zmac self \
82005ef614cSDanielle Ratson		bridge fdb show dev vxlan0
8210efe9ed9SPetr Machata	check_err $?
8220efe9ed9SPetr Machata
8230efe9ed9SPetr Machata	log_test "offload indication - attach vxlan last"
8240efe9ed9SPetr Machata}
8250efe9ed9SPetr Machata
8260efe9ed9SPetr Machataoffload_indication_join_vxlan_last()
8270efe9ed9SPetr Machata{
828*55415775SPetr Machata	ip link add dev br0 type bridge mcast_snooping 0
829*55415775SPetr Machata	ip link set dev br0 addrgenmode none
830*55415775SPetr Machata	ip link set dev br0 up
8318e059d64SAmit Cohen	ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \
8328e059d64SAmit Cohen		ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789
8330efe9ed9SPetr Machata
8340efe9ed9SPetr Machata	__offload_indication_join_vxlan_last
8350efe9ed9SPetr Machata
8360efe9ed9SPetr Machata	ip link del dev vxlan0
8370efe9ed9SPetr Machata	ip link del dev br0
8380efe9ed9SPetr Machata}
8390efe9ed9SPetr Machata
84099c9b084SIdo Schimmeloffload_indication_test()
84199c9b084SIdo Schimmel{
84299c9b084SIdo Schimmel	offload_indication_setup_create
84399c9b084SIdo Schimmel	offload_indication_fdb_test
84499c9b084SIdo Schimmel	offload_indication_decap_route_test
84599c9b084SIdo Schimmel	offload_indication_setup_destroy
8460efe9ed9SPetr Machata
8470efe9ed9SPetr Machata	log_info "offload indication - replay & cleanup"
8480efe9ed9SPetr Machata	offload_indication_join_vxlan_first
8490efe9ed9SPetr Machata	offload_indication_join_vxlan_last
85099c9b084SIdo Schimmel}
85199c9b084SIdo Schimmel
852f0723237SIdo Schimmelsanitization_vlan_aware_test()
853f0723237SIdo Schimmel{
854f0723237SIdo Schimmel	RET=0
855f0723237SIdo Schimmel
856f0723237SIdo Schimmel	ip link add dev br0 type bridge mcast_snooping 0 vlan_filtering 1
857*55415775SPetr Machata	ip link set dev br0 addrgenmode none
858f0723237SIdo Schimmel
859f0723237SIdo Schimmel	ip link add name vxlan10 up master br0 type vxlan id 10 nolearning \
8608e059d64SAmit Cohen		$UDPCSUM_FLAFS ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789
861f0723237SIdo Schimmel
862f0723237SIdo Schimmel	ip link add name vxlan20 up master br0 type vxlan id 20 nolearning \
8638e059d64SAmit Cohen		$UDPCSUM_FLAFS ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789
864f0723237SIdo Schimmel
865f0723237SIdo Schimmel	# Test that when each VNI is mapped to a different VLAN we can enslave
866f0723237SIdo Schimmel	# a port to the bridge
867f0723237SIdo Schimmel	bridge vlan add vid 10 dev vxlan10 pvid untagged
868f0723237SIdo Schimmel	bridge vlan add vid 20 dev vxlan20 pvid untagged
869f0723237SIdo Schimmel
870f0723237SIdo Schimmel	ip link set dev $swp1 master br0
871f0723237SIdo Schimmel	check_err $?
872f0723237SIdo Schimmel
873f0723237SIdo Schimmel	log_test "vlan-aware - enslavement to vlan-aware bridge"
874f0723237SIdo Schimmel
875f0723237SIdo Schimmel	# Try to map both VNIs to the same VLAN and make sure configuration
876f0723237SIdo Schimmel	# fails
877f0723237SIdo Schimmel	RET=0
878f0723237SIdo Schimmel
879f0723237SIdo Schimmel	bridge vlan add vid 10 dev vxlan20 pvid untagged &> /dev/null
880f0723237SIdo Schimmel	check_fail $?
881f0723237SIdo Schimmel
882f0723237SIdo Schimmel	log_test "vlan-aware - two vnis mapped to the same vlan"
883f0723237SIdo Schimmel
884f0723237SIdo Schimmel	# Test that enslavement of a port to a bridge fails when two VNIs
885f0723237SIdo Schimmel	# are mapped to the same VLAN
886f0723237SIdo Schimmel	RET=0
887f0723237SIdo Schimmel
888f0723237SIdo Schimmel	ip link set dev $swp1 nomaster
889f0723237SIdo Schimmel
890f0723237SIdo Schimmel	bridge vlan del vid 20 dev vxlan20 pvid untagged
891f0723237SIdo Schimmel	bridge vlan add vid 10 dev vxlan20 pvid untagged
892f0723237SIdo Schimmel
893f0723237SIdo Schimmel	ip link set dev $swp1 master br0 &> /dev/null
894f0723237SIdo Schimmel	check_fail $?
895f0723237SIdo Schimmel
896f0723237SIdo Schimmel	log_test "vlan-aware - failed enslavement to vlan-aware bridge"
897f0723237SIdo Schimmel
89816dc42e4SIdo Schimmel	bridge vlan del vid 10 dev vxlan20
89916dc42e4SIdo Schimmel	bridge vlan add vid 20 dev vxlan20 pvid untagged
90016dc42e4SIdo Schimmel
901495c3da6SIdo Schimmel	# Test that when two VXLAN tunnels with conflicting configurations
902495c3da6SIdo Schimmel	# (i.e., different TTL) are enslaved to the same VLAN-aware bridge,
903495c3da6SIdo Schimmel	# then the enslavement of a port to the bridge is denied.
904495c3da6SIdo Schimmel
905495c3da6SIdo Schimmel	# Use the offload indication of the local route to ensure the VXLAN
906495c3da6SIdo Schimmel	# configuration was correctly rollbacked.
9078e059d64SAmit Cohen	ip address add $LOCAL_IP_1/$PREFIX_LEN dev lo
908495c3da6SIdo Schimmel
909495c3da6SIdo Schimmel	ip link set dev vxlan10 type vxlan ttl 10
910495c3da6SIdo Schimmel	ip link set dev $swp1 master br0 &> /dev/null
911495c3da6SIdo Schimmel	check_fail $?
912495c3da6SIdo Schimmel
91305ef614cSDanielle Ratson	busywait "$TIMEOUT" not wait_for_offload \
9148e059d64SAmit Cohen		ip $IP_FLAG route show table local $LOCAL_IP_1
91505ef614cSDanielle Ratson	check_err $?
916495c3da6SIdo Schimmel
917495c3da6SIdo Schimmel	log_test "vlan-aware - failed enslavement to bridge due to conflict"
918495c3da6SIdo Schimmel
919495c3da6SIdo Schimmel	ip link set dev vxlan10 type vxlan ttl 20
9208e059d64SAmit Cohen	ip address del $LOCAL_IP_1/$PREFIX_LEN dev lo
921495c3da6SIdo Schimmel
922f0723237SIdo Schimmel	ip link del dev vxlan20
923f0723237SIdo Schimmel	ip link del dev vxlan10
924f0723237SIdo Schimmel	ip link del dev br0
925f0723237SIdo Schimmel}
926f0723237SIdo Schimmel
927f0723237SIdo Schimmeloffload_indication_vlan_aware_setup_create()
928f0723237SIdo Schimmel{
929f0723237SIdo Schimmel	# Create a simple setup with two VxLAN devices and a single VLAN-aware
930f0723237SIdo Schimmel	# bridge
931*55415775SPetr Machata	ip link add name br0 type bridge mcast_snooping 0 vlan_filtering 1 \
932f0723237SIdo Schimmel		vlan_default_pvid 0
933*55415775SPetr Machata	ip link set dev br0 addrgenmode none
934*55415775SPetr Machata	ip link set dev br0 up
935f0723237SIdo Schimmel
936f0723237SIdo Schimmel	ip link set dev $swp1 master br0
937f0723237SIdo Schimmel
938f0723237SIdo Schimmel	bridge vlan add vid 10 dev $swp1
939f0723237SIdo Schimmel	bridge vlan add vid 20 dev $swp1
940f0723237SIdo Schimmel
9418e059d64SAmit Cohen	ip address add $LOCAL_IP_1/$PREFIX_LEN dev lo
942f0723237SIdo Schimmel
943f0723237SIdo Schimmel	ip link add name vxlan10 up master br0 type vxlan id 10 nolearning \
9448e059d64SAmit Cohen		$UDPCSUM_FLAFS ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789
945f0723237SIdo Schimmel	ip link add name vxlan20 up master br0 type vxlan id 20 nolearning \
9468e059d64SAmit Cohen		$UDPCSUM_FLAFS ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789
947f0723237SIdo Schimmel
948f0723237SIdo Schimmel	bridge vlan add vid 10 dev vxlan10 pvid untagged
949f0723237SIdo Schimmel	bridge vlan add vid 20 dev vxlan20 pvid untagged
950f0723237SIdo Schimmel}
951f0723237SIdo Schimmel
952f0723237SIdo Schimmeloffload_indication_vlan_aware_setup_destroy()
953f0723237SIdo Schimmel{
954f0723237SIdo Schimmel	bridge vlan del vid 20 dev vxlan20
955f0723237SIdo Schimmel	bridge vlan del vid 10 dev vxlan10
956f0723237SIdo Schimmel
957f0723237SIdo Schimmel	ip link del dev vxlan20
958f0723237SIdo Schimmel	ip link del dev vxlan10
959f0723237SIdo Schimmel
9608e059d64SAmit Cohen	ip address del $LOCAL_IP_1/$PREFIX_LEN dev lo
961f0723237SIdo Schimmel
962f0723237SIdo Schimmel	bridge vlan del vid 20 dev $swp1
963f0723237SIdo Schimmel	bridge vlan del vid 10 dev $swp1
964f0723237SIdo Schimmel
965f0723237SIdo Schimmel	ip link set dev $swp1 nomaster
966f0723237SIdo Schimmel
967f0723237SIdo Schimmel	ip link del dev br0
968f0723237SIdo Schimmel}
969f0723237SIdo Schimmel
970f0723237SIdo Schimmeloffload_indication_vlan_aware_fdb_test()
971f0723237SIdo Schimmel{
972f0723237SIdo Schimmel	RET=0
973f0723237SIdo Schimmel
974f0723237SIdo Schimmel	log_info "vxlan entry offload indication - vlan-aware"
975f0723237SIdo Schimmel
976f0723237SIdo Schimmel	bridge fdb add de:ad:be:ef:13:37 dev vxlan10 self master static \
9778e059d64SAmit Cohen		dst $LOCAL_IP_2 vlan 10
978f0723237SIdo Schimmel
97905ef614cSDanielle Ratson	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
98005ef614cSDanielle Ratson		de:ad:be:ef:13:37 self bridge fdb show brport vxlan10
981f0723237SIdo Schimmel	check_err $?
98205ef614cSDanielle Ratson	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
98305ef614cSDanielle Ratson		de:ad:be:ef:13:37 self -v bridge fdb show brport vxlan10
984f0723237SIdo Schimmel	check_err $?
985f0723237SIdo Schimmel
986f0723237SIdo Schimmel	log_test "vxlan entry offload indication - initial state"
987f0723237SIdo Schimmel
988f0723237SIdo Schimmel	# Remove FDB entry from the bridge driver and check that corresponding
989f0723237SIdo Schimmel	# entry in the VxLAN driver is not marked as offloaded
990f0723237SIdo Schimmel	RET=0
991f0723237SIdo Schimmel
992f0723237SIdo Schimmel	bridge fdb del de:ad:be:ef:13:37 dev vxlan10 master vlan 10
99305ef614cSDanielle Ratson	busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb \
99405ef614cSDanielle Ratson		de:ad:be:ef:13:37 self bridge fdb show brport vxlan10
99505ef614cSDanielle Ratson	check_err $?
996f0723237SIdo Schimmel
997f0723237SIdo Schimmel	log_test "vxlan entry offload indication - after removal from bridge"
998f0723237SIdo Schimmel
999f0723237SIdo Schimmel	# Add the FDB entry back to the bridge driver and make sure it is
1000f0723237SIdo Schimmel	# marked as offloaded in both drivers
1001f0723237SIdo Schimmel	RET=0
1002f0723237SIdo Schimmel
1003f0723237SIdo Schimmel	bridge fdb add de:ad:be:ef:13:37 dev vxlan10 master static vlan 10
100405ef614cSDanielle Ratson	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
100505ef614cSDanielle Ratson		de:ad:be:ef:13:37 self bridge fdb show brport vxlan10
1006f0723237SIdo Schimmel	check_err $?
100705ef614cSDanielle Ratson	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
100805ef614cSDanielle Ratson		de:ad:be:ef:13:37 self -v bridge fdb show brport vxlan10
1009f0723237SIdo Schimmel	check_err $?
1010f0723237SIdo Schimmel
1011f0723237SIdo Schimmel	log_test "vxlan entry offload indication - after re-add to bridge"
1012f0723237SIdo Schimmel
1013f0723237SIdo Schimmel	# Remove FDB entry from the VxLAN driver and check that corresponding
1014f0723237SIdo Schimmel	# entry in the bridge driver is not marked as offloaded
1015f0723237SIdo Schimmel	RET=0
1016f0723237SIdo Schimmel
1017f0723237SIdo Schimmel	bridge fdb del de:ad:be:ef:13:37 dev vxlan10 self
101805ef614cSDanielle Ratson	busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb \
101905ef614cSDanielle Ratson		de:ad:be:ef:13:37 self -v bridge fdb show brport vxlan10
102005ef614cSDanielle Ratson	check_err $?
1021f0723237SIdo Schimmel
1022f0723237SIdo Schimmel	log_test "vxlan entry offload indication - after removal from vxlan"
1023f0723237SIdo Schimmel
1024f0723237SIdo Schimmel	# Add the FDB entry back to the VxLAN driver and make sure it is
1025f0723237SIdo Schimmel	# marked as offloaded in both drivers
1026f0723237SIdo Schimmel	RET=0
1027f0723237SIdo Schimmel
10288e059d64SAmit Cohen	bridge fdb add de:ad:be:ef:13:37 dev vxlan10 self dst $LOCAL_IP_2
102905ef614cSDanielle Ratson	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
103005ef614cSDanielle Ratson		de:ad:be:ef:13:37 self bridge fdb show brport vxlan10
1031f0723237SIdo Schimmel	check_err $?
103205ef614cSDanielle Ratson	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
103305ef614cSDanielle Ratson		de:ad:be:ef:13:37 self -v bridge fdb show brport vxlan10
1034f0723237SIdo Schimmel	check_err $?
1035f0723237SIdo Schimmel
1036f0723237SIdo Schimmel	log_test "vxlan entry offload indication - after re-add to vxlan"
1037f0723237SIdo Schimmel
1038f0723237SIdo Schimmel	bridge fdb del de:ad:be:ef:13:37 dev vxlan10 self master vlan 10
1039f0723237SIdo Schimmel}
1040f0723237SIdo Schimmel
1041f0723237SIdo Schimmeloffload_indication_vlan_aware_decap_route_test()
1042f0723237SIdo Schimmel{
1043f0723237SIdo Schimmel	RET=0
1044f0723237SIdo Schimmel
104505ef614cSDanielle Ratson	busywait "$TIMEOUT" wait_for_offload \
10468e059d64SAmit Cohen		ip $IP_FLAG route show table local $LOCAL_IP_1
1047f0723237SIdo Schimmel	check_err $?
1048f0723237SIdo Schimmel
1049f0723237SIdo Schimmel	# Toggle PVID flag on one VxLAN device and make sure route is still
1050f0723237SIdo Schimmel	# marked as offloaded
1051f0723237SIdo Schimmel	bridge vlan add vid 10 dev vxlan10 untagged
1052f0723237SIdo Schimmel
105305ef614cSDanielle Ratson	busywait "$TIMEOUT" wait_for_offload \
10548e059d64SAmit Cohen		ip $IP_FLAG route show table local $LOCAL_IP_1
1055f0723237SIdo Schimmel	check_err $?
1056f0723237SIdo Schimmel
1057f0723237SIdo Schimmel	# Toggle PVID flag on second VxLAN device and make sure route is no
1058f0723237SIdo Schimmel	# longer marked as offloaded
1059f0723237SIdo Schimmel	bridge vlan add vid 20 dev vxlan20 untagged
1060f0723237SIdo Schimmel
106105ef614cSDanielle Ratson	busywait "$TIMEOUT" not wait_for_offload \
10628e059d64SAmit Cohen		ip $IP_FLAG route show table local $LOCAL_IP_1
106305ef614cSDanielle Ratson	check_err $?
1064f0723237SIdo Schimmel
1065f0723237SIdo Schimmel	# Toggle PVID flag back and make sure route is marked as offloaded
1066f0723237SIdo Schimmel	bridge vlan add vid 10 dev vxlan10 pvid untagged
1067f0723237SIdo Schimmel	bridge vlan add vid 20 dev vxlan20 pvid untagged
1068f0723237SIdo Schimmel
10698e059d64SAmit Cohen	busywait "$TIMEOUT" wait_for_offload ip $IP_FLAG route show table local \
10708e059d64SAmit Cohen		$LOCAL_IP_1
1071f0723237SIdo Schimmel	check_err $?
1072f0723237SIdo Schimmel
1073f0723237SIdo Schimmel	log_test "vxlan decap route - vni map/unmap"
1074f0723237SIdo Schimmel}
1075f0723237SIdo Schimmel
10760efe9ed9SPetr Machataoffload_indication_vlan_aware_join_vxlan_first()
10770efe9ed9SPetr Machata{
1078*55415775SPetr Machata	ip link add dev br0 type bridge mcast_snooping 0 \
10790efe9ed9SPetr Machata		vlan_filtering 1 vlan_default_pvid 1
1080*55415775SPetr Machata	ip link set dev br0 addrgenmode none
1081*55415775SPetr Machata	ip link set dev br0 up
10828e059d64SAmit Cohen	ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \
10838e059d64SAmit Cohen		ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789
10840efe9ed9SPetr Machata
10850efe9ed9SPetr Machata	__offload_indication_join_vxlan_first 1
10860efe9ed9SPetr Machata
10870efe9ed9SPetr Machata	ip link del dev vxlan0
10880efe9ed9SPetr Machata	ip link del dev br0
10890efe9ed9SPetr Machata}
10900efe9ed9SPetr Machata
10910efe9ed9SPetr Machataoffload_indication_vlan_aware_join_vxlan_last()
10920efe9ed9SPetr Machata{
1093*55415775SPetr Machata	ip link add dev br0 type bridge mcast_snooping 0 \
10940efe9ed9SPetr Machata		vlan_filtering 1 vlan_default_pvid 1
1095*55415775SPetr Machata	ip link set dev br0 addrgenmode none
1096*55415775SPetr Machata	ip link set dev br0 up
10978e059d64SAmit Cohen	ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \
10988e059d64SAmit Cohen		ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789
10990efe9ed9SPetr Machata
11000efe9ed9SPetr Machata	__offload_indication_join_vxlan_last
11010efe9ed9SPetr Machata
11020efe9ed9SPetr Machata	ip link del dev vxlan0
11030efe9ed9SPetr Machata	ip link del dev br0
11040efe9ed9SPetr Machata}
11050efe9ed9SPetr Machata
11069d15dcebSIdo Schimmeloffload_indication_vlan_aware_l3vni_test()
11079d15dcebSIdo Schimmel{
11089d15dcebSIdo Schimmel	local zmac=00:00:00:00:00:00
11099d15dcebSIdo Schimmel
11109d15dcebSIdo Schimmel	RET=0
11119d15dcebSIdo Schimmel
11129d15dcebSIdo Schimmel	sysctl_set net.ipv6.conf.default.disable_ipv6 1
1113*55415775SPetr Machata	ip link add dev br0 type bridge mcast_snooping 0 \
11149d15dcebSIdo Schimmel		vlan_filtering 1 vlan_default_pvid 0
1115*55415775SPetr Machata	ip link set dev br0 addrgenmode none
1116*55415775SPetr Machata	ip link set dev br0 up
11178e059d64SAmit Cohen	ip link add name vxlan0 up type vxlan id 10 nolearning $UDPCSUM_FLAFS \
11188e059d64SAmit Cohen		ttl 20 tos inherit local $LOCAL_IP_1 dstport 4789
11199d15dcebSIdo Schimmel
11209d15dcebSIdo Schimmel	ip link set dev $swp1 master br0
11219d15dcebSIdo Schimmel
11229d15dcebSIdo Schimmel	# The test will use the offload indication on the FDB entry to
11239d15dcebSIdo Schimmel	# understand if the tunnel is offloaded or not
11248e059d64SAmit Cohen	bridge fdb append $zmac dev vxlan0 self dst $LOCAL_IP_2
11259d15dcebSIdo Schimmel
11269d15dcebSIdo Schimmel	ip link set dev vxlan0 master br0
11279d15dcebSIdo Schimmel	bridge vlan add dev vxlan0 vid 10 pvid untagged
11289d15dcebSIdo Schimmel
112905ef614cSDanielle Ratson	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb $zmac self \
113005ef614cSDanielle Ratson		bridge fdb show brport vxlan0
113158ba0238SIdo Schimmel	check_err $? "vxlan tunnel not offloaded when should"
11329d15dcebSIdo Schimmel
11339d15dcebSIdo Schimmel	# Configure a VLAN interface and make sure tunnel is offloaded
11349d15dcebSIdo Schimmel	ip link add link br0 name br10 up type vlan id 10
11359d15dcebSIdo Schimmel	sysctl_set net.ipv6.conf.br10.disable_ipv6 0
11369d15dcebSIdo Schimmel	ip -6 address add 2001:db8:1::1/64 dev br10
113705ef614cSDanielle Ratson	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb $zmac self \
113805ef614cSDanielle Ratson		bridge fdb show brport vxlan0
11399d15dcebSIdo Schimmel	check_err $? "vxlan tunnel not offloaded when should"
11409d15dcebSIdo Schimmel
11419d15dcebSIdo Schimmel	# Unlink the VXLAN device, make sure tunnel is no longer offloaded,
11429d15dcebSIdo Schimmel	# then add it back to the bridge and make sure it is offloaded
11439d15dcebSIdo Schimmel	ip link set dev vxlan0 nomaster
114405ef614cSDanielle Ratson	busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb $zmac self \
114505ef614cSDanielle Ratson		bridge fdb show brport vxlan0
114605ef614cSDanielle Ratson	check_err $? "vxlan tunnel offloaded after unlinked from bridge"
11479d15dcebSIdo Schimmel
11489d15dcebSIdo Schimmel	ip link set dev vxlan0 master br0
114905ef614cSDanielle Ratson	busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb $zmac self \
115005ef614cSDanielle Ratson		bridge fdb show brport vxlan0
115105ef614cSDanielle Ratson	check_err $? "vxlan tunnel offloaded despite no matching vid"
11529d15dcebSIdo Schimmel
11539d15dcebSIdo Schimmel	bridge vlan add dev vxlan0 vid 10 pvid untagged
115405ef614cSDanielle Ratson	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb $zmac self \
115505ef614cSDanielle Ratson		bridge fdb show brport vxlan0
11569d15dcebSIdo Schimmel	check_err $? "vxlan tunnel not offloaded after adding vid"
11579d15dcebSIdo Schimmel
11589d15dcebSIdo Schimmel	log_test "vxlan - l3 vni"
11599d15dcebSIdo Schimmel
11609d15dcebSIdo Schimmel	ip link del dev vxlan0
11619d15dcebSIdo Schimmel	ip link del dev br0
11629d15dcebSIdo Schimmel	sysctl_restore net.ipv6.conf.default.disable_ipv6
11639d15dcebSIdo Schimmel}
11649d15dcebSIdo Schimmel
1165f0723237SIdo Schimmeloffload_indication_vlan_aware_test()
1166f0723237SIdo Schimmel{
1167f0723237SIdo Schimmel	offload_indication_vlan_aware_setup_create
1168f0723237SIdo Schimmel	offload_indication_vlan_aware_fdb_test
1169f0723237SIdo Schimmel	offload_indication_vlan_aware_decap_route_test
1170f0723237SIdo Schimmel	offload_indication_vlan_aware_setup_destroy
11710efe9ed9SPetr Machata
11720efe9ed9SPetr Machata	log_info "offload indication - replay & cleanup - vlan aware"
11730efe9ed9SPetr Machata	offload_indication_vlan_aware_join_vxlan_first
11740efe9ed9SPetr Machata	offload_indication_vlan_aware_join_vxlan_last
11759d15dcebSIdo Schimmel	offload_indication_vlan_aware_l3vni_test
1176f0723237SIdo Schimmel}
1177f0723237SIdo Schimmel
117899c9b084SIdo Schimmeltrap cleanup EXIT
117999c9b084SIdo Schimmel
118099c9b084SIdo Schimmelsetup_prepare
118199c9b084SIdo Schimmelsetup_wait
118299c9b084SIdo Schimmel
118399c9b084SIdo Schimmeltests_run
118499c9b084SIdo Schimmel
118599c9b084SIdo Schimmelexit $EXIT_STATUS
1186