selftests: net: bridge: add vlan mcast querier test
Add a test to try the new global vlan mcast_querier control and also verify that tagged general query packets are properly generated when querier is enabled for a single vlan. TEST: Vlan mcast_querier global option default value [ OK ] TEST: Vlan 10 multicast querier enable [ OK ] TEST: Vlan 10 tagged IGMPv2 general query sent [ OK ] TEST: Vlan 10 tagged MLD general query sent [ OK ] Signed-off-by: Nikolay Aleksandrov <nikolay@nvidia.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
71ae450f97
commit
dee2cdc0e3
@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
ALL_TESTS="vlmc_control_test"
|
||||
ALL_TESTS="vlmc_control_test vlmc_querier_test"
|
||||
NUM_NETIFS=4
|
||||
CHECK_TC="yes"
|
||||
TEST_GROUP="239.10.10.10"
|
||||
@ -43,6 +43,9 @@ switch_create()
|
||||
ip link set dev $swp1 up
|
||||
ip link set dev $swp2 up
|
||||
|
||||
tc qdisc add dev $swp1 clsact
|
||||
tc qdisc add dev $swp2 clsact
|
||||
|
||||
bridge vlan add vid 10-11 dev $swp1 master
|
||||
bridge vlan add vid 10-11 dev $swp2 master
|
||||
|
||||
@ -138,6 +141,106 @@ vlmc_control_test()
|
||||
log_test "Vlan 10 multicast snooping control"
|
||||
}
|
||||
|
||||
# setup for general query counting
|
||||
vlmc_query_cnt_xstats()
|
||||
{
|
||||
local type=$1
|
||||
local version=$2
|
||||
local dev=$3
|
||||
|
||||
ip -j link xstats type bridge_slave dev $dev | \
|
||||
jq -e ".[].multicast.${type}_queries.tx_v${version}"
|
||||
}
|
||||
|
||||
vlmc_query_cnt_setup()
|
||||
{
|
||||
local type=$1
|
||||
local dev=$2
|
||||
|
||||
if [[ $type == "igmp" ]]; then
|
||||
tc filter add dev $dev egress pref 10 prot 802.1Q \
|
||||
flower vlan_id 10 vlan_ethtype ipv4 dst_ip 224.0.0.1 ip_proto 2 \
|
||||
action pass
|
||||
else
|
||||
tc filter add dev $dev egress pref 10 prot 802.1Q \
|
||||
flower vlan_id 10 vlan_ethtype ipv6 dst_ip ff02::1 ip_proto icmpv6 \
|
||||
action pass
|
||||
fi
|
||||
|
||||
ip link set dev br0 type bridge mcast_stats_enabled 1
|
||||
}
|
||||
|
||||
vlmc_query_cnt_cleanup()
|
||||
{
|
||||
local dev=$1
|
||||
|
||||
ip link set dev br0 type bridge mcast_stats_enabled 0
|
||||
tc filter del dev $dev egress pref 10
|
||||
}
|
||||
|
||||
vlmc_check_query()
|
||||
{
|
||||
local type=$1
|
||||
local version=$2
|
||||
local dev=$3
|
||||
local expect=$4
|
||||
local time=$5
|
||||
local ret=0
|
||||
|
||||
vlmc_query_cnt_setup $type $dev
|
||||
|
||||
local pre_tx_xstats=$(vlmc_query_cnt_xstats $type $version $dev)
|
||||
bridge vlan global set vid 10 dev br0 mcast_snooping 1 mcast_querier 1
|
||||
ret=$?
|
||||
if [[ $ret -eq 0 ]]; then
|
||||
sleep $time
|
||||
|
||||
local tcstats=$(tc_rule_stats_get $dev 10 egress)
|
||||
local post_tx_xstats=$(vlmc_query_cnt_xstats $type $version $dev)
|
||||
|
||||
if [[ $tcstats != $expect || \
|
||||
$(($post_tx_xstats-$pre_tx_xstats)) != $expect || \
|
||||
$tcstats != $(($post_tx_xstats-$pre_tx_xstats)) ]]; then
|
||||
ret=1
|
||||
fi
|
||||
fi
|
||||
|
||||
bridge vlan global set vid 10 dev br0 mcast_snooping 1 mcast_querier 0
|
||||
vlmc_query_cnt_cleanup $dev
|
||||
|
||||
return $ret
|
||||
}
|
||||
|
||||
vlmc_querier_test()
|
||||
{
|
||||
RET=0
|
||||
local goutput=`bridge -j vlan global show`
|
||||
echo -n $goutput |
|
||||
jq -e ".[].vlans[] | select(.vlan == 10)" &>/dev/null
|
||||
check_err $? "Could not find vlan 10's global options"
|
||||
|
||||
echo -n $goutput |
|
||||
jq -e ".[].vlans[] | select(.vlan == 10 and .mcast_querier == 0) " &>/dev/null
|
||||
check_err $? "Wrong default mcast_querier global vlan option value"
|
||||
log_test "Vlan mcast_querier global option default value"
|
||||
|
||||
RET=0
|
||||
bridge vlan global set vid 10 dev br0 mcast_snooping 1 mcast_querier 1
|
||||
check_err $? "Could not enable querier in vlan 10"
|
||||
log_test "Vlan 10 multicast querier enable"
|
||||
bridge vlan global set vid 10 dev br0 mcast_snooping 1 mcast_querier 0
|
||||
|
||||
RET=0
|
||||
vlmc_check_query igmp 2 $swp1 1 1
|
||||
check_err $? "No vlan tagged IGMPv2 general query packets sent"
|
||||
log_test "Vlan 10 tagged IGMPv2 general query sent"
|
||||
|
||||
RET=0
|
||||
vlmc_check_query mld 1 $swp1 1 1
|
||||
check_err $? "No vlan tagged MLD general query packets sent"
|
||||
log_test "Vlan 10 tagged MLD general query sent"
|
||||
}
|
||||
|
||||
trap cleanup EXIT
|
||||
|
||||
setup_prepare
|
||||
|
Loading…
Reference in New Issue
Block a user