#!/bin/bash
# SPDX-License-Identifier: GPL-2.0
#
# Test various aspects of VxLAN offloading which are specific to mlxsw, such
# as sanitization of invalid configurations and offload indication.

lib_dir=$(dirname $0)/../../../net/forwarding

ALL_TESTS="sanitization_test offload_indication_test \
	sanitization_vlan_aware_test offload_indication_vlan_aware_test"
NUM_NETIFS=2
: ${TIMEOUT:=20000} # ms
source $lib_dir/lib.sh

setup_prepare()
{
	swp1=${NETIFS[p1]}
	swp2=${NETIFS[p2]}

	ip link set dev $swp1 up
	ip link set dev $swp2 up
}

cleanup()
{
	pre_cleanup

	ip link set dev $swp2 down
	ip link set dev $swp1 down
}

sanitization_single_dev_test_pass()
{
	ip link set dev $swp1 master br0
	check_err $?
	ip link set dev vxlan0 master br0
	check_err $?

	ip link set dev $swp1 nomaster

	ip link set dev $swp1 master br0
	check_err $?
}

sanitization_single_dev_test_fail()
{
	ip link set dev $swp1 master br0
	check_err $?
	ip link set dev vxlan0 master br0 &> /dev/null
	check_fail $?

	ip link set dev $swp1 nomaster

	ip link set dev vxlan0 master br0
	check_err $?
	ip link set dev $swp1 master br0 &> /dev/null
	check_fail $?
}

sanitization_single_dev_valid_test()
{
	RET=0

	ip link add dev br0 type bridge mcast_snooping 0

	ip link add name vxlan0 up type vxlan id 10 nolearning noudpcsum \
		ttl 20 tos inherit local 198.51.100.1 dstport 4789

	sanitization_single_dev_test_pass

	ip link del dev vxlan0
	ip link del dev br0

	log_test "vxlan device - valid configuration"
}

sanitization_single_dev_vlan_aware_test()
{
	RET=0

	ip link add dev br0 type bridge mcast_snooping 0 vlan_filtering 1

	ip link add name vxlan0 up type vxlan id 10 nolearning noudpcsum \
		ttl 20 tos inherit local 198.51.100.1 dstport 4789

	sanitization_single_dev_test_pass

	ip link del dev vxlan0
	ip link del dev br0

	log_test "vxlan device with a vlan-aware bridge"
}

sanitization_single_dev_mcast_enabled_test()
{
	RET=0

	ip link add dev br0 type bridge

	ip link add name vxlan0 up type vxlan id 10 nolearning noudpcsum \
		ttl 20 tos inherit local 198.51.100.1 dstport 4789

	sanitization_single_dev_test_fail

	ip link del dev vxlan0
	ip link del dev br0

	log_test "vxlan device with a multicast enabled bridge"
}

sanitization_single_dev_mcast_group_test()
{
	RET=0

	ip link add dev br0 type bridge mcast_snooping 0
	ip link add name dummy1 up type dummy

	ip link add name vxlan0 up type vxlan id 10 nolearning noudpcsum \
		ttl 20 tos inherit local 198.51.100.1 dstport 4789 \
		dev dummy1 group 239.0.0.1

	sanitization_single_dev_test_fail

	ip link del dev vxlan0
	ip link del dev dummy1
	ip link del dev br0

	log_test "vxlan device with a multicast group"
}

sanitization_single_dev_no_local_ip_test()
{
	RET=0

	ip link add dev br0 type bridge mcast_snooping 0

	ip link add name vxlan0 up type vxlan id 10 nolearning noudpcsum \
		ttl 20 tos inherit dstport 4789

	sanitization_single_dev_test_fail

	ip link del dev vxlan0
	ip link del dev br0

	log_test "vxlan device with no local ip"
}

sanitization_single_dev_local_ipv6_test()
{
	RET=0

	ip link add dev br0 type bridge mcast_snooping 0

	ip link add name vxlan0 up type vxlan id 10 nolearning noudpcsum \
		ttl 20 tos inherit local 2001:db8::1 dstport 4789

	sanitization_single_dev_test_fail

	ip link del dev vxlan0
	ip link del dev br0

	log_test "vxlan device with local ipv6 address"
}

sanitization_single_dev_learning_enabled_test()
{
	RET=0

	ip link add dev br0 type bridge mcast_snooping 0

	ip link add name vxlan0 up type vxlan id 10 learning noudpcsum \
		ttl 20 tos inherit local 198.51.100.1 dstport 4789

	sanitization_single_dev_test_pass

	ip link del dev vxlan0
	ip link del dev br0

	log_test "vxlan device with learning enabled"
}

sanitization_single_dev_local_interface_test()
{
	RET=0

	ip link add dev br0 type bridge mcast_snooping 0
	ip link add name dummy1 up type dummy

	ip link add name vxlan0 up type vxlan id 10 nolearning noudpcsum \
		ttl 20 tos inherit local 198.51.100.1 dstport 4789 dev dummy1

	sanitization_single_dev_test_fail

	ip link del dev vxlan0
	ip link del dev dummy1
	ip link del dev br0

	log_test "vxlan device with local interface"
}

sanitization_single_dev_port_range_test()
{
	RET=0

	ip link add dev br0 type bridge mcast_snooping 0

	ip link add name vxlan0 up type vxlan id 10 nolearning noudpcsum \
		ttl 20 tos inherit local 198.51.100.1 dstport 4789 \
		srcport 4000 5000

	sanitization_single_dev_test_fail

	ip link del dev vxlan0
	ip link del dev br0

	log_test "vxlan device with udp source port range"
}

sanitization_single_dev_tos_static_test()
{
	RET=0

	ip link add dev br0 type bridge mcast_snooping 0

	ip link add name vxlan0 up type vxlan id 10 nolearning noudpcsum \
		ttl 20 tos 20 local 198.51.100.1 dstport 4789

	sanitization_single_dev_test_fail

	ip link del dev vxlan0
	ip link del dev br0

	log_test "vxlan device with static tos"
}

sanitization_single_dev_ttl_inherit_test()
{
	RET=0

	ip link add dev br0 type bridge mcast_snooping 0

	ip link add name vxlan0 up type vxlan id 10 nolearning noudpcsum \
		ttl inherit tos inherit local 198.51.100.1 dstport 4789

	sanitization_single_dev_test_fail

	ip link del dev vxlan0
	ip link del dev br0

	log_test "vxlan device with inherit ttl"
}

sanitization_single_dev_udp_checksum_test()
{
	RET=0

	ip link add dev br0 type bridge mcast_snooping 0

	ip link add name vxlan0 up type vxlan id 10 nolearning udpcsum \
		ttl 20 tos inherit local 198.51.100.1 dstport 4789

	sanitization_single_dev_test_fail

	ip link del dev vxlan0
	ip link del dev br0

	log_test "vxlan device with udp checksum"
}

sanitization_single_dev_test()
{
	# These tests make sure that we correctly sanitize VxLAN device
	# configurations we do not support
	sanitization_single_dev_valid_test
	sanitization_single_dev_vlan_aware_test
	sanitization_single_dev_mcast_enabled_test
	sanitization_single_dev_mcast_group_test
	sanitization_single_dev_no_local_ip_test
	sanitization_single_dev_local_ipv6_test
	sanitization_single_dev_learning_enabled_test
	sanitization_single_dev_local_interface_test
	sanitization_single_dev_port_range_test
	sanitization_single_dev_tos_static_test
	sanitization_single_dev_ttl_inherit_test
	sanitization_single_dev_udp_checksum_test
}

sanitization_multi_devs_test_pass()
{
	ip link set dev $swp1 master br0
	check_err $?
	ip link set dev vxlan0 master br0
	check_err $?
	ip link set dev $swp2 master br1
	check_err $?
	ip link set dev vxlan1 master br1
	check_err $?

	ip link set dev $swp2 nomaster
	ip link set dev $swp1 nomaster

	ip link set dev $swp1 master br0
	check_err $?
	ip link set dev $swp2 master br1
	check_err $?
}

sanitization_multi_devs_test_fail()
{
	ip link set dev $swp1 master br0
	check_err $?
	ip link set dev vxlan0 master br0
	check_err $?
	ip link set dev $swp2 master br1
	check_err $?
	ip link set dev vxlan1 master br1 &> /dev/null
	check_fail $?

	ip link set dev $swp2 nomaster
	ip link set dev $swp1 nomaster

	ip link set dev vxlan1 master br1
	check_err $?
	ip link set dev $swp1 master br0
	check_err $?
	ip link set dev $swp2 master br1 &> /dev/null
	check_fail $?
}

sanitization_multi_devs_valid_test()
{
	RET=0

	ip link add dev br0 type bridge mcast_snooping 0
	ip link add dev br1 type bridge mcast_snooping 0

	ip link add name vxlan0 up type vxlan id 10 nolearning noudpcsum \
		ttl 20 tos inherit local 198.51.100.1 dstport 4789
	ip link add name vxlan1 up type vxlan id 20 nolearning noudpcsum \
		ttl 20 tos inherit local 198.51.100.1 dstport 4789

	sanitization_multi_devs_test_pass

	ip link del dev vxlan1
	ip link del dev vxlan0
	ip link del dev br1
	ip link del dev br0

	log_test "multiple vxlan devices - valid configuration"
}

sanitization_multi_devs_ttl_test()
{
	RET=0

	ip link add dev br0 type bridge mcast_snooping 0
	ip link add dev br1 type bridge mcast_snooping 0

	ip link add name vxlan0 up type vxlan id 10 nolearning noudpcsum \
		ttl 20 tos inherit local 198.51.100.1 dstport 4789
	ip link add name vxlan1 up type vxlan id 20 nolearning noudpcsum \
		ttl 40 tos inherit local 198.51.100.1 dstport 4789

	sanitization_multi_devs_test_fail

	ip link del dev vxlan1
	ip link del dev vxlan0
	ip link del dev br1
	ip link del dev br0

	log_test "multiple vxlan devices with different ttl"
}

sanitization_multi_devs_udp_dstport_test()
{
	RET=0

	ip link add dev br0 type bridge mcast_snooping 0
	ip link add dev br1 type bridge mcast_snooping 0

	ip link add name vxlan0 up type vxlan id 10 nolearning noudpcsum \
		ttl 20 tos inherit local 198.51.100.1 dstport 4789
	ip link add name vxlan1 up type vxlan id 20 nolearning noudpcsum \
		ttl 20 tos inherit local 198.51.100.1 dstport 5789

	sanitization_multi_devs_test_fail

	ip link del dev vxlan1
	ip link del dev vxlan0
	ip link del dev br1
	ip link del dev br0

	log_test "multiple vxlan devices with different udp destination port"
}

sanitization_multi_devs_local_ip_test()
{
	RET=0

	ip link add dev br0 type bridge mcast_snooping 0
	ip link add dev br1 type bridge mcast_snooping 0

	ip link add name vxlan0 up type vxlan id 10 nolearning noudpcsum \
		ttl 20 tos inherit local 198.51.100.1 dstport 4789
	ip link add name vxlan1 up type vxlan id 20 nolearning noudpcsum \
		ttl 20 tos inherit local 198.51.100.2 dstport 4789

	sanitization_multi_devs_test_fail

	ip link del dev vxlan1
	ip link del dev vxlan0
	ip link del dev br1
	ip link del dev br0

	log_test "multiple vxlan devices with different local ip"
}

sanitization_multi_devs_test()
{
	# The device has a single VTEP, which means all the VxLAN devices
	# we offload must share certain properties such as source IP and
	# UDP destination port. These tests make sure that we forbid
	# configurations that violate this limitation
	sanitization_multi_devs_valid_test
	sanitization_multi_devs_ttl_test
	sanitization_multi_devs_udp_dstport_test
	sanitization_multi_devs_local_ip_test
}

sanitization_test()
{
	sanitization_single_dev_test
	sanitization_multi_devs_test
}

offload_indication_setup_create()
{
	# Create a simple setup with two bridges, each with a VxLAN device
	# and one local port
	ip link add name br0 up type bridge mcast_snooping 0
	ip link add name br1 up type bridge mcast_snooping 0

	ip link set dev $swp1 master br0
	ip link set dev $swp2 master br1

	ip address add 198.51.100.1/32 dev lo

	ip link add name vxlan0 up master br0 type vxlan id 10 nolearning \
		noudpcsum ttl 20 tos inherit local 198.51.100.1 dstport 4789
	ip link add name vxlan1 up master br1 type vxlan id 20 nolearning \
		noudpcsum ttl 20 tos inherit local 198.51.100.1 dstport 4789
}

offload_indication_setup_destroy()
{
	ip link del dev vxlan1
	ip link del dev vxlan0

	ip address del 198.51.100.1/32 dev lo

	ip link set dev $swp2 nomaster
	ip link set dev $swp1 nomaster

	ip link del dev br1
	ip link del dev br0
}

offload_indication_fdb_flood_test()
{
	RET=0

	bridge fdb append 00:00:00:00:00:00 dev vxlan0 self dst 198.51.100.2

	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb 00:00:00:00:00:00 \
		bridge fdb show brport vxlan0
	check_err $?

	bridge fdb del 00:00:00:00:00:00 dev vxlan0 self

	log_test "vxlan flood entry offload indication"
}

offload_indication_fdb_bridge_test()
{
	RET=0

	bridge fdb add de:ad:be:ef:13:37 dev vxlan0 self master static \
		dst 198.51.100.2

	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
		de:ad:be:ef:13:37 self bridge fdb show brport vxlan0
	check_err $?
	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
		de:ad:be:ef:13:37 self -v bridge fdb show brport vxlan0
	check_err $?

	log_test "vxlan entry offload indication - initial state"

	# Remove FDB entry from the bridge driver and check that corresponding
	# entry in the VxLAN driver is not marked as offloaded
	RET=0

	bridge fdb del de:ad:be:ef:13:37 dev vxlan0 master
	busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb \
		de:ad:be:ef:13:37 self bridge fdb show brport vxlan0
	check_err $?

	log_test "vxlan entry offload indication - after removal from bridge"

	# Add the FDB entry back to the bridge driver and make sure it is
	# marked as offloaded in both drivers
	RET=0

	bridge fdb add de:ad:be:ef:13:37 dev vxlan0 master static
	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
		de:ad:be:ef:13:37 self bridge fdb show brport vxlan0
	check_err $?
	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
		de:ad:be:ef:13:37 self -v bridge fdb show brport vxlan0
	check_err $?

	log_test "vxlan entry offload indication - after re-add to bridge"

	# Remove FDB entry from the VxLAN driver and check that corresponding
	# entry in the bridge driver is not marked as offloaded
	RET=0

	bridge fdb del de:ad:be:ef:13:37 dev vxlan0 self
	busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb \
		de:ad:be:ef:13:37 self -v bridge fdb show brport vxlan0
	check_err $?

	log_test "vxlan entry offload indication - after removal from vxlan"

	# Add the FDB entry back to the VxLAN driver and make sure it is
	# marked as offloaded in both drivers
	RET=0

	bridge fdb add de:ad:be:ef:13:37 dev vxlan0 self dst 198.51.100.2
	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
		de:ad:be:ef:13:37 self bridge fdb show brport vxlan0
	check_err $?
	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
		de:ad:be:ef:13:37 self -v bridge fdb show brport vxlan0
	check_err $?

	log_test "vxlan entry offload indication - after re-add to vxlan"

	bridge fdb del de:ad:be:ef:13:37 dev vxlan0 self master
}

offload_indication_fdb_test()
{
	offload_indication_fdb_flood_test
	offload_indication_fdb_bridge_test
}

offload_indication_decap_route_test()
{
	RET=0

	busywait "$TIMEOUT" wait_for_offload \
		ip route show table local 198.51.100.1
	check_err $?

	ip link set dev vxlan0 down
	busywait "$TIMEOUT" wait_for_offload \
		ip route show table local 198.51.100.1
	check_err $?

	ip link set dev vxlan1 down
	busywait "$TIMEOUT" not wait_for_offload \
		ip route show table local 198.51.100.1
	check_err $?

	log_test "vxlan decap route - vxlan device down"

	RET=0

	ip link set dev vxlan1 up
	busywait "$TIMEOUT" wait_for_offload \
		ip route show table local 198.51.100.1
	check_err $?

	ip link set dev vxlan0 up
	busywait "$TIMEOUT" wait_for_offload \
		ip route show table local 198.51.100.1
	check_err $?

	log_test "vxlan decap route - vxlan device up"

	RET=0

	ip address delete 198.51.100.1/32 dev lo
	busywait "$TIMEOUT" not wait_for_offload \
		ip route show table local 198.51.100.1
	check_err $?

	ip address add 198.51.100.1/32 dev lo
	busywait "$TIMEOUT" wait_for_offload \
		ip route show table local 198.51.100.1
	check_err $?

	log_test "vxlan decap route - add local route"

	RET=0

	ip link set dev $swp1 nomaster
	busywait "$TIMEOUT" wait_for_offload \
		ip route show table local 198.51.100.1
	check_err $?

	ip link set dev $swp2 nomaster
	busywait "$TIMEOUT" not wait_for_offload \
		ip route show table local 198.51.100.1
	check_err $?

	ip link set dev $swp1 master br0
	ip link set dev $swp2 master br1
	busywait "$TIMEOUT" wait_for_offload \
		ip route show table local 198.51.100.1
	check_err $?

	log_test "vxlan decap route - local ports enslavement"

	RET=0

	ip link del dev br0
	busywait "$TIMEOUT" wait_for_offload \
		ip route show table local 198.51.100.1
	check_err $?

	ip link del dev br1
	busywait "$TIMEOUT" not wait_for_offload \
		ip route show table local 198.51.100.1
	check_err $?

	log_test "vxlan decap route - bridge device deletion"

	RET=0

	ip link add name br0 up type bridge mcast_snooping 0
	ip link add name br1 up type bridge mcast_snooping 0
	ip link set dev $swp1 master br0
	ip link set dev $swp2 master br1
	ip link set dev vxlan0 master br0
	ip link set dev vxlan1 master br1
	busywait "$TIMEOUT" wait_for_offload \
		ip route show table local 198.51.100.1
	check_err $?

	ip link del dev vxlan0
	busywait "$TIMEOUT" wait_for_offload \
		ip route show table local 198.51.100.1
	check_err $?

	ip link del dev vxlan1
	busywait "$TIMEOUT" not wait_for_offload \
		ip route show table local 198.51.100.1
	check_err $?

	log_test "vxlan decap route - vxlan device deletion"

	ip link add name vxlan0 up master br0 type vxlan id 10 nolearning \
		noudpcsum ttl 20 tos inherit local 198.51.100.1 dstport 4789
	ip link add name vxlan1 up master br1 type vxlan id 20 nolearning \
		noudpcsum ttl 20 tos inherit local 198.51.100.1 dstport 4789
}

check_fdb_offloaded()
{
	local mac=00:11:22:33:44:55
	local zmac=00:00:00:00:00:00

	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb $mac self \
		bridge fdb show dev vxlan0
	check_err $?
	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb $mac master \
		bridge fdb show dev vxlan0
	check_err $?

	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb $zmac self \
		bridge fdb show dev vxlan0
	check_err $?
}

check_vxlan_fdb_not_offloaded()
{
	local mac=00:11:22:33:44:55
	local zmac=00:00:00:00:00:00

	bridge fdb show dev vxlan0 | grep $mac | grep -q self
	check_err $?
	busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb $mac self \
		bridge fdb show dev vxlan0
	check_err $?

	bridge fdb show dev vxlan0 | grep $zmac | grep -q self
	check_err $?
	busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb $zmac self \
		bridge fdb show dev vxlan0
	check_err $?
}

check_bridge_fdb_not_offloaded()
{
	local mac=00:11:22:33:44:55
	local zmac=00:00:00:00:00:00

	bridge fdb show dev vxlan0 | grep $mac | grep -q master
	check_err $?
	busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb $mac master \
		bridge fdb show dev vxlan0
	check_err $?
}

__offload_indication_join_vxlan_first()
{
	local vid=$1; shift

	local mac=00:11:22:33:44:55
	local zmac=00:00:00:00:00:00

	bridge fdb append $zmac dev vxlan0 self dst 198.51.100.2

	ip link set dev vxlan0 master br0
	bridge fdb add dev vxlan0 $mac self master static dst 198.51.100.2

	RET=0
	check_vxlan_fdb_not_offloaded
	ip link set dev $swp1 master br0
	sleep .1
	check_fdb_offloaded
	log_test "offload indication - attach vxlan first"

	RET=0
	ip link set dev vxlan0 down
	check_vxlan_fdb_not_offloaded
	check_bridge_fdb_not_offloaded
	log_test "offload indication - set vxlan down"

	RET=0
	ip link set dev vxlan0 up
	sleep .1
	check_fdb_offloaded
	log_test "offload indication - set vxlan up"

	if [[ ! -z $vid ]]; then
		RET=0
		bridge vlan del dev vxlan0 vid $vid
		check_vxlan_fdb_not_offloaded
		check_bridge_fdb_not_offloaded
		log_test "offload indication - delete VLAN"

		RET=0
		bridge vlan add dev vxlan0 vid $vid
		check_vxlan_fdb_not_offloaded
		check_bridge_fdb_not_offloaded
		log_test "offload indication - add tagged VLAN"

		RET=0
		bridge vlan add dev vxlan0 vid $vid pvid untagged
		sleep .1
		check_fdb_offloaded
		log_test "offload indication - add pvid/untagged VLAN"
	fi

	RET=0
	ip link set dev $swp1 nomaster
	check_vxlan_fdb_not_offloaded
	log_test "offload indication - detach port"
}

offload_indication_join_vxlan_first()
{
	ip link add dev br0 up type bridge mcast_snooping 0
	ip link add name vxlan0 up type vxlan id 10 nolearning noudpcsum \
		ttl 20 tos inherit local 198.51.100.1 dstport 4789

	__offload_indication_join_vxlan_first

	ip link del dev vxlan0
	ip link del dev br0
}

__offload_indication_join_vxlan_last()
{
	local zmac=00:00:00:00:00:00

	RET=0

	bridge fdb append $zmac dev vxlan0 self dst 198.51.100.2

	ip link set dev $swp1 master br0

	busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb $zmac self \
		bridge fdb show dev vxlan0
	check_err $?

	ip link set dev vxlan0 master br0

	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb $zmac self \
		bridge fdb show dev vxlan0
	check_err $?

	log_test "offload indication - attach vxlan last"
}

offload_indication_join_vxlan_last()
{
	ip link add dev br0 up type bridge mcast_snooping 0
	ip link add name vxlan0 up type vxlan id 10 nolearning noudpcsum \
		ttl 20 tos inherit local 198.51.100.1 dstport 4789

	__offload_indication_join_vxlan_last

	ip link del dev vxlan0
	ip link del dev br0
}

offload_indication_test()
{
	offload_indication_setup_create
	offload_indication_fdb_test
	offload_indication_decap_route_test
	offload_indication_setup_destroy

	log_info "offload indication - replay & cleanup"
	offload_indication_join_vxlan_first
	offload_indication_join_vxlan_last
}

sanitization_vlan_aware_test()
{
	RET=0

	ip link add dev br0 type bridge mcast_snooping 0 vlan_filtering 1

	ip link add name vxlan10 up master br0 type vxlan id 10 nolearning \
		noudpcsum ttl 20 tos inherit local 198.51.100.1 dstport 4789

	ip link add name vxlan20 up master br0 type vxlan id 20 nolearning \
		noudpcsum ttl 20 tos inherit local 198.51.100.1 dstport 4789

	# Test that when each VNI is mapped to a different VLAN we can enslave
	# a port to the bridge
	bridge vlan add vid 10 dev vxlan10 pvid untagged
	bridge vlan add vid 20 dev vxlan20 pvid untagged

	ip link set dev $swp1 master br0
	check_err $?

	log_test "vlan-aware - enslavement to vlan-aware bridge"

	# Try to map both VNIs to the same VLAN and make sure configuration
	# fails
	RET=0

	bridge vlan add vid 10 dev vxlan20 pvid untagged &> /dev/null
	check_fail $?

	log_test "vlan-aware - two vnis mapped to the same vlan"

	# Test that enslavement of a port to a bridge fails when two VNIs
	# are mapped to the same VLAN
	RET=0

	ip link set dev $swp1 nomaster

	bridge vlan del vid 20 dev vxlan20 pvid untagged
	bridge vlan add vid 10 dev vxlan20 pvid untagged

	ip link set dev $swp1 master br0 &> /dev/null
	check_fail $?

	log_test "vlan-aware - failed enslavement to vlan-aware bridge"

	bridge vlan del vid 10 dev vxlan20
	bridge vlan add vid 20 dev vxlan20 pvid untagged

	# Test that when two VXLAN tunnels with conflicting configurations
	# (i.e., different TTL) are enslaved to the same VLAN-aware bridge,
	# then the enslavement of a port to the bridge is denied.

	# Use the offload indication of the local route to ensure the VXLAN
	# configuration was correctly rollbacked.
	ip address add 198.51.100.1/32 dev lo

	ip link set dev vxlan10 type vxlan ttl 10
	ip link set dev $swp1 master br0 &> /dev/null
	check_fail $?

	busywait "$TIMEOUT" not wait_for_offload \
		ip route show table local 198.51.100.1
	check_err $?

	log_test "vlan-aware - failed enslavement to bridge due to conflict"

	ip link set dev vxlan10 type vxlan ttl 20
	ip address del 198.51.100.1/32 dev lo

	ip link del dev vxlan20
	ip link del dev vxlan10
	ip link del dev br0
}

offload_indication_vlan_aware_setup_create()
{
	# Create a simple setup with two VxLAN devices and a single VLAN-aware
	# bridge
	ip link add name br0 up type bridge mcast_snooping 0 vlan_filtering 1 \
		vlan_default_pvid 0

	ip link set dev $swp1 master br0

	bridge vlan add vid 10 dev $swp1
	bridge vlan add vid 20 dev $swp1

	ip address add 198.51.100.1/32 dev lo

	ip link add name vxlan10 up master br0 type vxlan id 10 nolearning \
		noudpcsum ttl 20 tos inherit local 198.51.100.1 dstport 4789
	ip link add name vxlan20 up master br0 type vxlan id 20 nolearning \
		noudpcsum ttl 20 tos inherit local 198.51.100.1 dstport 4789

	bridge vlan add vid 10 dev vxlan10 pvid untagged
	bridge vlan add vid 20 dev vxlan20 pvid untagged
}

offload_indication_vlan_aware_setup_destroy()
{
	bridge vlan del vid 20 dev vxlan20
	bridge vlan del vid 10 dev vxlan10

	ip link del dev vxlan20
	ip link del dev vxlan10

	ip address del 198.51.100.1/32 dev lo

	bridge vlan del vid 20 dev $swp1
	bridge vlan del vid 10 dev $swp1

	ip link set dev $swp1 nomaster

	ip link del dev br0
}

offload_indication_vlan_aware_fdb_test()
{
	RET=0

	log_info "vxlan entry offload indication - vlan-aware"

	bridge fdb add de:ad:be:ef:13:37 dev vxlan10 self master static \
		dst 198.51.100.2 vlan 10

	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
		de:ad:be:ef:13:37 self bridge fdb show brport vxlan10
	check_err $?
	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
		de:ad:be:ef:13:37 self -v bridge fdb show brport vxlan10
	check_err $?

	log_test "vxlan entry offload indication - initial state"

	# Remove FDB entry from the bridge driver and check that corresponding
	# entry in the VxLAN driver is not marked as offloaded
	RET=0

	bridge fdb del de:ad:be:ef:13:37 dev vxlan10 master vlan 10
	busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb \
		de:ad:be:ef:13:37 self bridge fdb show brport vxlan10
	check_err $?

	log_test "vxlan entry offload indication - after removal from bridge"

	# Add the FDB entry back to the bridge driver and make sure it is
	# marked as offloaded in both drivers
	RET=0

	bridge fdb add de:ad:be:ef:13:37 dev vxlan10 master static vlan 10
	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
		de:ad:be:ef:13:37 self bridge fdb show brport vxlan10
	check_err $?
	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
		de:ad:be:ef:13:37 self -v bridge fdb show brport vxlan10
	check_err $?

	log_test "vxlan entry offload indication - after re-add to bridge"

	# Remove FDB entry from the VxLAN driver and check that corresponding
	# entry in the bridge driver is not marked as offloaded
	RET=0

	bridge fdb del de:ad:be:ef:13:37 dev vxlan10 self
	busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb \
		de:ad:be:ef:13:37 self -v bridge fdb show brport vxlan10
	check_err $?

	log_test "vxlan entry offload indication - after removal from vxlan"

	# Add the FDB entry back to the VxLAN driver and make sure it is
	# marked as offloaded in both drivers
	RET=0

	bridge fdb add de:ad:be:ef:13:37 dev vxlan10 self dst 198.51.100.2
	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
		de:ad:be:ef:13:37 self bridge fdb show brport vxlan10
	check_err $?
	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb \
		de:ad:be:ef:13:37 self -v bridge fdb show brport vxlan10
	check_err $?

	log_test "vxlan entry offload indication - after re-add to vxlan"

	bridge fdb del de:ad:be:ef:13:37 dev vxlan10 self master vlan 10
}

offload_indication_vlan_aware_decap_route_test()
{
	RET=0

	busywait "$TIMEOUT" wait_for_offload \
		ip route show table local 198.51.100.1
	check_err $?

	# Toggle PVID flag on one VxLAN device and make sure route is still
	# marked as offloaded
	bridge vlan add vid 10 dev vxlan10 untagged

	busywait "$TIMEOUT" wait_for_offload \
		ip route show table local 198.51.100.1
	check_err $?

	# Toggle PVID flag on second VxLAN device and make sure route is no
	# longer marked as offloaded
	bridge vlan add vid 20 dev vxlan20 untagged

	busywait "$TIMEOUT" not wait_for_offload \
		ip route show table local 198.51.100.1
	check_err $?

	# Toggle PVID flag back and make sure route is marked as offloaded
	bridge vlan add vid 10 dev vxlan10 pvid untagged
	bridge vlan add vid 20 dev vxlan20 pvid untagged

	busywait "$TIMEOUT" wait_for_offload ip route show table local 198.51.100.1
	check_err $?

	log_test "vxlan decap route - vni map/unmap"
}

offload_indication_vlan_aware_join_vxlan_first()
{
	ip link add dev br0 up type bridge mcast_snooping 0 \
		vlan_filtering 1 vlan_default_pvid 1
	ip link add name vxlan0 up type vxlan id 10 nolearning noudpcsum \
		ttl 20 tos inherit local 198.51.100.1 dstport 4789

	__offload_indication_join_vxlan_first 1

	ip link del dev vxlan0
	ip link del dev br0
}

offload_indication_vlan_aware_join_vxlan_last()
{
	ip link add dev br0 up type bridge mcast_snooping 0 \
		vlan_filtering 1 vlan_default_pvid 1
	ip link add name vxlan0 up type vxlan id 10 nolearning noudpcsum \
		ttl 20 tos inherit local 198.51.100.1 dstport 4789

	__offload_indication_join_vxlan_last

	ip link del dev vxlan0
	ip link del dev br0
}

offload_indication_vlan_aware_l3vni_test()
{
	local zmac=00:00:00:00:00:00

	RET=0

	sysctl_set net.ipv6.conf.default.disable_ipv6 1
	ip link add dev br0 up type bridge mcast_snooping 0 \
		vlan_filtering 1 vlan_default_pvid 0
	ip link add name vxlan0 up type vxlan id 10 nolearning noudpcsum \
		ttl 20 tos inherit local 198.51.100.1 dstport 4789

	ip link set dev $swp1 master br0

	# The test will use the offload indication on the FDB entry to
	# understand if the tunnel is offloaded or not
	bridge fdb append $zmac dev vxlan0 self dst 192.0.2.1

	ip link set dev vxlan0 master br0
	bridge vlan add dev vxlan0 vid 10 pvid untagged

	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb $zmac self \
		bridge fdb show brport vxlan0
	check_err $? "vxlan tunnel not offloaded when should"

	# Configure a VLAN interface and make sure tunnel is offloaded
	ip link add link br0 name br10 up type vlan id 10
	sysctl_set net.ipv6.conf.br10.disable_ipv6 0
	ip -6 address add 2001:db8:1::1/64 dev br10
	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb $zmac self \
		bridge fdb show brport vxlan0
	check_err $? "vxlan tunnel not offloaded when should"

	# Unlink the VXLAN device, make sure tunnel is no longer offloaded,
	# then add it back to the bridge and make sure it is offloaded
	ip link set dev vxlan0 nomaster
	busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb $zmac self \
		bridge fdb show brport vxlan0
	check_err $? "vxlan tunnel offloaded after unlinked from bridge"

	ip link set dev vxlan0 master br0
	busywait "$TIMEOUT" not wait_for_offload grep_bridge_fdb $zmac self \
		bridge fdb show brport vxlan0
	check_err $? "vxlan tunnel offloaded despite no matching vid"

	bridge vlan add dev vxlan0 vid 10 pvid untagged
	busywait "$TIMEOUT" wait_for_offload grep_bridge_fdb $zmac self \
		bridge fdb show brport vxlan0
	check_err $? "vxlan tunnel not offloaded after adding vid"

	log_test "vxlan - l3 vni"

	ip link del dev vxlan0
	ip link del dev br0
	sysctl_restore net.ipv6.conf.default.disable_ipv6
}

offload_indication_vlan_aware_test()
{
	offload_indication_vlan_aware_setup_create
	offload_indication_vlan_aware_fdb_test
	offload_indication_vlan_aware_decap_route_test
	offload_indication_vlan_aware_setup_destroy

	log_info "offload indication - replay & cleanup - vlan aware"
	offload_indication_vlan_aware_join_vxlan_first
	offload_indication_vlan_aware_join_vxlan_last
	offload_indication_vlan_aware_l3vni_test
}

trap cleanup EXIT

setup_prepare
setup_wait

tests_run

exit $EXIT_STATUS
