Commit 2cd67a4e authored by Nikolay Aleksandrov's avatar Nikolay Aleksandrov Committed by Jakub Kicinski
Browse files

selftests: net: bridge: add vlan mcast_router tests



Add tests for the new per-port/vlan mcast_router option, verify that
unknown multicast packets are flooded only to router ports.

TEST: Port vlan 10 option mcast_router default value                [ OK ]
TEST: Port vlan 10 mcast_router option changed to 2                 [ OK ]
TEST: Flood unknown vlan multicast packets to router port only      [ OK ]

Signed-off-by: default avatarNikolay Aleksandrov <nikolay@nvidia.com>
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent b4ce7b95
Loading
Loading
Loading
Loading
+53 −1
Original line number Diff line number Diff line
@@ -3,7 +3,8 @@

ALL_TESTS="vlmc_control_test vlmc_querier_test vlmc_igmp_mld_version_test \
	   vlmc_last_member_test vlmc_startup_query_test vlmc_membership_test \
	   vlmc_querier_intvl_test vlmc_query_intvl_test vlmc_query_response_intvl_test"
	   vlmc_querier_intvl_test vlmc_query_intvl_test vlmc_query_response_intvl_test \
	   vlmc_router_port_test"
NUM_NETIFS=4
CHECK_TC="yes"
TEST_GROUP="239.10.10.10"
@@ -471,6 +472,57 @@ vlmc_query_response_intvl_test()
	bridge vlan global set vid 10 dev br0 mcast_snooping 1 mcast_query_response_interval 1000
}

vlmc_router_port_test()
{
	RET=0
	local goutput=`bridge -j -d vlan show`
	echo -n $goutput |
		jq -e ".[] | select(.ifname == \"$swp1\" and \
				    .vlans[].vlan == 10)" &>/dev/null
	check_err $? "Could not find port vlan 10's options"

	echo -n $goutput |
		jq -e ".[] | select(.ifname == \"$swp1\" and \
				    .vlans[].vlan == 10 and \
				    .vlans[].mcast_router == 1)" &>/dev/null
	check_err $? "Wrong default port mcast_router option value"
	log_test "Port vlan 10 option mcast_router default value"

	RET=0
	bridge vlan set vid 10 dev $swp1 mcast_router 2
	check_err $? "Could not set port vlan 10's mcast_router option"
	log_test "Port vlan 10 mcast_router option changed to 2"

	RET=0
	tc filter add dev $swp1 egress pref 10 prot 802.1Q \
		flower vlan_id 10 vlan_ethtype ipv4 dst_ip 239.1.1.1 ip_proto udp action pass
	tc filter add dev $swp2 egress pref 10 prot 802.1Q \
		flower vlan_id 10 vlan_ethtype ipv4 dst_ip 239.1.1.1 ip_proto udp action pass
	bridge vlan set vid 10 dev $swp2 mcast_router 0
	# we need to enable querier and disable query response interval to
	# make sure packets are flooded only to router ports
	bridge vlan global set vid 10 dev br0 mcast_snooping 1 mcast_querier 1 \
					      mcast_query_response_interval 0
	bridge vlan add vid 10 dev br0 self
	sleep 1
	mausezahn br0 -Q 10 -c 10 -p 128 -b 01:00:5e:01:01:01 -B 239.1.1.1 \
			-t udp "dp=1024" &>/dev/null
	local swp1_tcstats=$(tc_rule_stats_get $swp1 10 egress)
	if [[ $swp1_tcstats != 10 ]]; then
		check_err 1 "Wrong number of vlan 10 multicast packets flooded"
	fi
	local swp2_tcstats=$(tc_rule_stats_get $swp2 10 egress)
	check_err $swp2_tcstats "Vlan 10 multicast packets flooded to non-router port"
	log_test "Flood unknown vlan multicast packets to router port only"

	tc filter del dev $swp2 egress pref 10
	tc filter del dev $swp1 egress pref 10
	bridge vlan del vid 10 dev br0 self
	bridge vlan global set vid 10 dev br0 mcast_snooping 1 mcast_query_response_interval 1000
	bridge vlan set vid 10 dev $swp2 mcast_router 1
	bridge vlan set vid 10 dev $swp1 mcast_router 1
}

trap cleanup EXIT

setup_prepare