13446dcd7SPetr Machata#!/bin/bash
23446dcd7SPetr Machata# SPDX-License-Identifier: GPL-2.0
33446dcd7SPetr Machata
43446dcd7SPetr Machata# +-----------------------+                          +------------------------+
53446dcd7SPetr Machata# | H1 (vrf)              |                          | H2 (vrf)               |
63446dcd7SPetr Machata# | + $h1.10              |                          | + $h2.10               |
73446dcd7SPetr Machata# | | 192.0.2.1/28        |                          | | 192.0.2.2/28         |
83446dcd7SPetr Machata# | | 2001:db8:1::1/64    |                          | | 2001:db8:1::2/64     |
93446dcd7SPetr Machata# | |                     |                          | |                      |
103446dcd7SPetr Machata# | |  + $h1.20           |                          | |  + $h2.20            |
113446dcd7SPetr Machata# | \  | 198.51.100.1/24  |                          | \  | 198.51.100.2/24   |
123446dcd7SPetr Machata# |  \ | 2001:db8:2::1/64 |                          |  \ | 2001:db8:2::2/64  |
133446dcd7SPetr Machata# |   \|                  |                          |   \|                   |
143446dcd7SPetr Machata# |    + $h1              |                          |    + $h2               |
153446dcd7SPetr Machata# +----|------------------+                          +----|-------------------+
163446dcd7SPetr Machata#      |                                                  |
173446dcd7SPetr Machata# +----|--------------------------------------------------|-------------------+
183446dcd7SPetr Machata# | SW |                                                  |                   |
193446dcd7SPetr Machata# | +--|--------------------------------------------------|-----------------+ |
203446dcd7SPetr Machata# | |  + $swp1                   BR0 (802.1q)             + $swp2           | |
213446dcd7SPetr Machata# | |     vid 10                                             vid 10         | |
223446dcd7SPetr Machata# | |     vid 20                                             vid 20         | |
233446dcd7SPetr Machata# | |                                                                       | |
243446dcd7SPetr Machata# | +-----------------------------------------------------------------------+ |
253446dcd7SPetr Machata# +---------------------------------------------------------------------------+
263446dcd7SPetr Machata
273446dcd7SPetr MachataALL_TESTS="
283446dcd7SPetr Machata	test_8021d
293446dcd7SPetr Machata	test_8021q
303446dcd7SPetr Machata	test_8021qvs
313446dcd7SPetr Machata"
323446dcd7SPetr Machata
333446dcd7SPetr MachataNUM_NETIFS=4
343446dcd7SPetr Machatasource lib.sh
353446dcd7SPetr Machatasource tc_common.sh
363446dcd7SPetr Machata
373446dcd7SPetr Machatah1_create()
383446dcd7SPetr Machata{
393446dcd7SPetr Machata	simple_if_init $h1
403446dcd7SPetr Machata	vlan_create $h1 10 v$h1 192.0.2.1/28 2001:db8:1::1/64
413446dcd7SPetr Machata	vlan_create $h1 20 v$h1 198.51.100.1/24 2001:db8:2::1/64
423446dcd7SPetr Machata}
433446dcd7SPetr Machata
443446dcd7SPetr Machatah1_destroy()
453446dcd7SPetr Machata{
463446dcd7SPetr Machata	vlan_destroy $h1 20
473446dcd7SPetr Machata	vlan_destroy $h1 10
483446dcd7SPetr Machata	simple_if_fini $h1
493446dcd7SPetr Machata}
503446dcd7SPetr Machata
513446dcd7SPetr Machatah2_create()
523446dcd7SPetr Machata{
533446dcd7SPetr Machata	simple_if_init $h2
543446dcd7SPetr Machata	vlan_create $h2 10 v$h2 192.0.2.2/28
553446dcd7SPetr Machata	vlan_create $h2 20 v$h2 198.51.100.2/24
563446dcd7SPetr Machata}
573446dcd7SPetr Machata
583446dcd7SPetr Machatah2_destroy()
593446dcd7SPetr Machata{
603446dcd7SPetr Machata	vlan_destroy $h2 20
613446dcd7SPetr Machata	vlan_destroy $h2 10
623446dcd7SPetr Machata	simple_if_fini $h2
633446dcd7SPetr Machata}
643446dcd7SPetr Machata
653446dcd7SPetr Machataswitch_create_8021d()
663446dcd7SPetr Machata{
673446dcd7SPetr Machata	log_info "802.1d tests"
683446dcd7SPetr Machata
693446dcd7SPetr Machata	ip link add name br0 type bridge vlan_filtering 0 \
703446dcd7SPetr Machata		mcast_snooping 1 \
713446dcd7SPetr Machata		mcast_igmp_version 3 mcast_mld_version 2
723446dcd7SPetr Machata	ip link set dev br0 up
733446dcd7SPetr Machata
743446dcd7SPetr Machata	ip link set dev $swp1 master br0
753446dcd7SPetr Machata	ip link set dev $swp1 up
763446dcd7SPetr Machata	bridge link set dev $swp1 fastleave on
773446dcd7SPetr Machata
783446dcd7SPetr Machata	ip link set dev $swp2 master br0
793446dcd7SPetr Machata	ip link set dev $swp2 up
803446dcd7SPetr Machata}
813446dcd7SPetr Machata
823446dcd7SPetr Machataswitch_create_8021q()
833446dcd7SPetr Machata{
843446dcd7SPetr Machata	local br_flags=$1; shift
853446dcd7SPetr Machata
863446dcd7SPetr Machata	log_info "802.1q $br_flags${br_flags:+ }tests"
873446dcd7SPetr Machata
883446dcd7SPetr Machata	ip link add name br0 type bridge vlan_filtering 1 vlan_default_pvid 0 \
893446dcd7SPetr Machata		mcast_snooping 1 $br_flags \
903446dcd7SPetr Machata		mcast_igmp_version 3 mcast_mld_version 2
913446dcd7SPetr Machata	bridge vlan add vid 10 dev br0 self
923446dcd7SPetr Machata	bridge vlan add vid 20 dev br0 self
933446dcd7SPetr Machata	ip link set dev br0 up
943446dcd7SPetr Machata
953446dcd7SPetr Machata	ip link set dev $swp1 master br0
963446dcd7SPetr Machata	ip link set dev $swp1 up
973446dcd7SPetr Machata	bridge link set dev $swp1 fastleave on
983446dcd7SPetr Machata	bridge vlan add vid 10 dev $swp1
993446dcd7SPetr Machata	bridge vlan add vid 20 dev $swp1
1003446dcd7SPetr Machata
1013446dcd7SPetr Machata	ip link set dev $swp2 master br0
1023446dcd7SPetr Machata	ip link set dev $swp2 up
1033446dcd7SPetr Machata	bridge vlan add vid 10 dev $swp2
1043446dcd7SPetr Machata	bridge vlan add vid 20 dev $swp2
1053446dcd7SPetr Machata}
1063446dcd7SPetr Machata
1073446dcd7SPetr Machataswitch_create_8021qvs()
1083446dcd7SPetr Machata{
1093446dcd7SPetr Machata	switch_create_8021q "mcast_vlan_snooping 1"
1103446dcd7SPetr Machata	bridge vlan global set dev br0 vid 10 mcast_igmp_version 3
1113446dcd7SPetr Machata	bridge vlan global set dev br0 vid 10 mcast_mld_version 2
1123446dcd7SPetr Machata	bridge vlan global set dev br0 vid 20 mcast_igmp_version 3
1133446dcd7SPetr Machata	bridge vlan global set dev br0 vid 20 mcast_mld_version 2
1143446dcd7SPetr Machata}
1153446dcd7SPetr Machata
1163446dcd7SPetr Machataswitch_destroy()
1173446dcd7SPetr Machata{
1183446dcd7SPetr Machata	ip link set dev $swp2 down
1193446dcd7SPetr Machata	ip link set dev $swp2 nomaster
1203446dcd7SPetr Machata
1213446dcd7SPetr Machata	ip link set dev $swp1 down
1223446dcd7SPetr Machata	ip link set dev $swp1 nomaster
1233446dcd7SPetr Machata
1243446dcd7SPetr Machata	ip link set dev br0 down
1253446dcd7SPetr Machata	ip link del dev br0
1263446dcd7SPetr Machata}
1273446dcd7SPetr Machata
1283446dcd7SPetr Machatasetup_prepare()
1293446dcd7SPetr Machata{
1303446dcd7SPetr Machata	h1=${NETIFS[p1]}
1313446dcd7SPetr Machata	swp1=${NETIFS[p2]}
1323446dcd7SPetr Machata
1333446dcd7SPetr Machata	swp2=${NETIFS[p3]}
1343446dcd7SPetr Machata	h2=${NETIFS[p4]}
1353446dcd7SPetr Machata
1363446dcd7SPetr Machata	vrf_prepare
1373446dcd7SPetr Machata	forwarding_enable
1383446dcd7SPetr Machata
1393446dcd7SPetr Machata	h1_create
1403446dcd7SPetr Machata	h2_create
1413446dcd7SPetr Machata}
1423446dcd7SPetr Machata
1433446dcd7SPetr Machatacleanup()
1443446dcd7SPetr Machata{
1453446dcd7SPetr Machata	pre_cleanup
1463446dcd7SPetr Machata
1473446dcd7SPetr Machata	switch_destroy 2>/dev/null
1483446dcd7SPetr Machata	h2_destroy
1493446dcd7SPetr Machata	h1_destroy
1503446dcd7SPetr Machata
1513446dcd7SPetr Machata	forwarding_restore
1523446dcd7SPetr Machata	vrf_cleanup
1533446dcd7SPetr Machata}
1543446dcd7SPetr Machata
1553446dcd7SPetr Machatacfg_src_list()
1563446dcd7SPetr Machata{
1573446dcd7SPetr Machata	local IPs=("$@")
1583446dcd7SPetr Machata	local IPstr=$(echo ${IPs[@]} | tr '[:space:]' , | sed 's/,$//')
1593446dcd7SPetr Machata
1603446dcd7SPetr Machata	echo ${IPstr:+source_list }${IPstr}
1613446dcd7SPetr Machata}
1623446dcd7SPetr Machata
1633446dcd7SPetr Machatacfg_group_op()
1643446dcd7SPetr Machata{
1653446dcd7SPetr Machata	local op=$1; shift
1663446dcd7SPetr Machata	local locus=$1; shift
1673446dcd7SPetr Machata	local GRP=$1; shift
1683446dcd7SPetr Machata	local state=$1; shift
1693446dcd7SPetr Machata	local IPs=("$@")
1703446dcd7SPetr Machata
1713446dcd7SPetr Machata	local source_list=$(cfg_src_list ${IPs[@]})
1723446dcd7SPetr Machata
1733446dcd7SPetr Machata	# Everything besides `bridge mdb' uses the "dev X vid Y" syntax,
1743446dcd7SPetr Machata	# so we use it here as well and convert.
1753446dcd7SPetr Machata	local br_locus=$(echo "$locus" | sed 's/^dev /port /')
1763446dcd7SPetr Machata
1773446dcd7SPetr Machata	bridge mdb $op dev br0 $br_locus grp $GRP $state \
1783446dcd7SPetr Machata	       filter_mode include $source_list
1793446dcd7SPetr Machata}
1803446dcd7SPetr Machata
1813446dcd7SPetr Machatacfg4_entries_op()
1823446dcd7SPetr Machata{
1833446dcd7SPetr Machata	local op=$1; shift
1843446dcd7SPetr Machata	local locus=$1; shift
1853446dcd7SPetr Machata	local state=$1; shift
1863446dcd7SPetr Machata	local n=$1; shift
1873446dcd7SPetr Machata	local grp=${1:-1}; shift
1883446dcd7SPetr Machata
1893446dcd7SPetr Machata	local GRP=239.1.1.${grp}
1903446dcd7SPetr Machata	local IPs=$(seq -f 192.0.2.%g 1 $((n - 1)))
1913446dcd7SPetr Machata	cfg_group_op "$op" "$locus" "$GRP" "$state" ${IPs[@]}
1923446dcd7SPetr Machata}
1933446dcd7SPetr Machata
1943446dcd7SPetr Machatacfg4_entries_add()
1953446dcd7SPetr Machata{
1963446dcd7SPetr Machata	cfg4_entries_op add "$@"
1973446dcd7SPetr Machata}
1983446dcd7SPetr Machata
1993446dcd7SPetr Machatacfg4_entries_del()
2003446dcd7SPetr Machata{
2013446dcd7SPetr Machata	cfg4_entries_op del "$@"
2023446dcd7SPetr Machata}
2033446dcd7SPetr Machata
2043446dcd7SPetr Machatacfg6_entries_op()
2053446dcd7SPetr Machata{
2063446dcd7SPetr Machata	local op=$1; shift
2073446dcd7SPetr Machata	local locus=$1; shift
2083446dcd7SPetr Machata	local state=$1; shift
2093446dcd7SPetr Machata	local n=$1; shift
2103446dcd7SPetr Machata	local grp=${1:-1}; shift
2113446dcd7SPetr Machata
2123446dcd7SPetr Machata	local GRP=ff0e::${grp}
2133446dcd7SPetr Machata	local IPs=$(printf "2001:db8:1::%x\n" $(seq 1 $((n - 1))))
2143446dcd7SPetr Machata	cfg_group_op "$op" "$locus" "$GRP" "$state" ${IPs[@]}
2153446dcd7SPetr Machata}
2163446dcd7SPetr Machata
2173446dcd7SPetr Machatacfg6_entries_add()
2183446dcd7SPetr Machata{
2193446dcd7SPetr Machata	cfg6_entries_op add "$@"
2203446dcd7SPetr Machata}
2213446dcd7SPetr Machata
2223446dcd7SPetr Machatacfg6_entries_del()
2233446dcd7SPetr Machata{
2243446dcd7SPetr Machata	cfg6_entries_op del "$@"
2253446dcd7SPetr Machata}
2263446dcd7SPetr Machata
2273446dcd7SPetr Machatalocus_dev_peer()
2283446dcd7SPetr Machata{
2293446dcd7SPetr Machata	local dev_kw=$1; shift
2303446dcd7SPetr Machata	local dev=$1; shift
2313446dcd7SPetr Machata	local vid_kw=$1; shift
2323446dcd7SPetr Machata	local vid=$1; shift
2333446dcd7SPetr Machata
2343446dcd7SPetr Machata	echo "$h1.${vid:-10}"
2353446dcd7SPetr Machata}
2363446dcd7SPetr Machata
2373446dcd7SPetr Machatalocus_dev()
2383446dcd7SPetr Machata{
2393446dcd7SPetr Machata	local dev_kw=$1; shift
2403446dcd7SPetr Machata	local dev=$1; shift
2413446dcd7SPetr Machata
2423446dcd7SPetr Machata	echo $dev
2433446dcd7SPetr Machata}
2443446dcd7SPetr Machata
2453446dcd7SPetr Machatactl4_entries_add()
2463446dcd7SPetr Machata{
2473446dcd7SPetr Machata	local locus=$1; shift
2483446dcd7SPetr Machata	local state=$1; shift
2493446dcd7SPetr Machata	local n=$1; shift
2503446dcd7SPetr Machata	local grp=${1:-1}; shift
2513446dcd7SPetr Machata
2523446dcd7SPetr Machata	local IPs=$(seq -f 192.0.2.%g 1 $((n - 1)))
2533446dcd7SPetr Machata	local peer=$(locus_dev_peer $locus)
2543446dcd7SPetr Machata	local GRP=239.1.1.${grp}
2553446dcd7SPetr Machata	$MZ $peer -c 1 -A 192.0.2.1 -B $GRP \
2563446dcd7SPetr Machata		-t ip proto=2,p=$(igmpv3_is_in_get $GRP $IPs) -q
2573446dcd7SPetr Machata	sleep 1
2583446dcd7SPetr Machata
2593446dcd7SPetr Machata	local nn=$(bridge mdb show dev br0 | grep $GRP | wc -l)
2603446dcd7SPetr Machata	if ((nn != n)); then
2613446dcd7SPetr Machata		echo mcast_max_groups > /dev/stderr
2623446dcd7SPetr Machata		false
2633446dcd7SPetr Machata	fi
2643446dcd7SPetr Machata}
2653446dcd7SPetr Machata
2663446dcd7SPetr Machatactl4_entries_del()
2673446dcd7SPetr Machata{
2683446dcd7SPetr Machata	local locus=$1; shift
2693446dcd7SPetr Machata	local state=$1; shift
2703446dcd7SPetr Machata	local n=$1; shift
2713446dcd7SPetr Machata	local grp=${1:-1}; shift
2723446dcd7SPetr Machata
2733446dcd7SPetr Machata	local peer=$(locus_dev_peer $locus)
2743446dcd7SPetr Machata	local GRP=239.1.1.${grp}
2753446dcd7SPetr Machata	$MZ $peer -c 1 -A 192.0.2.1 -B 224.0.0.2 \
2763446dcd7SPetr Machata		-t ip proto=2,p=$(igmpv2_leave_get $GRP) -q
2773446dcd7SPetr Machata	sleep 1
2783446dcd7SPetr Machata	! bridge mdb show dev br0 | grep -q $GRP
2793446dcd7SPetr Machata}
2803446dcd7SPetr Machata
2813446dcd7SPetr Machatactl6_entries_add()
2823446dcd7SPetr Machata{
2833446dcd7SPetr Machata	local locus=$1; shift
2843446dcd7SPetr Machata	local state=$1; shift
2853446dcd7SPetr Machata	local n=$1; shift
2863446dcd7SPetr Machata	local grp=${1:-1}; shift
2873446dcd7SPetr Machata
2883446dcd7SPetr Machata	local IPs=$(printf "2001:db8:1::%x\n" $(seq 1 $((n - 1))))
2893446dcd7SPetr Machata	local peer=$(locus_dev_peer $locus)
2903446dcd7SPetr Machata	local SIP=fe80::1
2913446dcd7SPetr Machata	local GRP=ff0e::${grp}
2923446dcd7SPetr Machata	local p=$(mldv2_is_in_get $SIP $GRP $IPs)
2933446dcd7SPetr Machata	$MZ -6 $peer -c 1 -A $SIP -B $GRP -t ip hop=1,next=0,p="$p" -q
2943446dcd7SPetr Machata	sleep 1
2953446dcd7SPetr Machata
2963446dcd7SPetr Machata	local nn=$(bridge mdb show dev br0 | grep $GRP | wc -l)
2973446dcd7SPetr Machata	if ((nn != n)); then
2983446dcd7SPetr Machata		echo mcast_max_groups > /dev/stderr
2993446dcd7SPetr Machata		false
3003446dcd7SPetr Machata	fi
3013446dcd7SPetr Machata}
3023446dcd7SPetr Machata
3033446dcd7SPetr Machatactl6_entries_del()
3043446dcd7SPetr Machata{
3053446dcd7SPetr Machata	local locus=$1; shift
3063446dcd7SPetr Machata	local state=$1; shift
3073446dcd7SPetr Machata	local n=$1; shift
3083446dcd7SPetr Machata	local grp=${1:-1}; shift
3093446dcd7SPetr Machata
3103446dcd7SPetr Machata	local peer=$(locus_dev_peer $locus)
3113446dcd7SPetr Machata	local SIP=fe80::1
3123446dcd7SPetr Machata	local GRP=ff0e::${grp}
3133446dcd7SPetr Machata	local p=$(mldv1_done_get $SIP $GRP)
3143446dcd7SPetr Machata	$MZ -6 $peer -c 1 -A $SIP -B $GRP -t ip hop=1,next=0,p="$p" -q
3153446dcd7SPetr Machata	sleep 1
3163446dcd7SPetr Machata	! bridge mdb show dev br0 | grep -q $GRP
3173446dcd7SPetr Machata}
3183446dcd7SPetr Machata
3193446dcd7SPetr Machatabridge_maxgroups_errmsg_check_cfg()
3203446dcd7SPetr Machata{
3213446dcd7SPetr Machata	local msg=$1; shift
3223446dcd7SPetr Machata	local needle=$1; shift
3233446dcd7SPetr Machata
3243446dcd7SPetr Machata	echo "$msg" | grep -q mcast_max_groups
3253446dcd7SPetr Machata	check_err $? "Adding MDB entries failed for the wrong reason: $msg"
3263446dcd7SPetr Machata}
3273446dcd7SPetr Machata
3283446dcd7SPetr Machatabridge_maxgroups_errmsg_check_cfg4()
3293446dcd7SPetr Machata{
3303446dcd7SPetr Machata	bridge_maxgroups_errmsg_check_cfg "$@"
3313446dcd7SPetr Machata}
3323446dcd7SPetr Machata
3333446dcd7SPetr Machatabridge_maxgroups_errmsg_check_cfg6()
3343446dcd7SPetr Machata{
3353446dcd7SPetr Machata	bridge_maxgroups_errmsg_check_cfg "$@"
3363446dcd7SPetr Machata}
3373446dcd7SPetr Machata
3383446dcd7SPetr Machatabridge_maxgroups_errmsg_check_ctl4()
3393446dcd7SPetr Machata{
3403446dcd7SPetr Machata	:
3413446dcd7SPetr Machata}
3423446dcd7SPetr Machata
3433446dcd7SPetr Machatabridge_maxgroups_errmsg_check_ctl6()
3443446dcd7SPetr Machata{
3453446dcd7SPetr Machata	:
3463446dcd7SPetr Machata}
3473446dcd7SPetr Machata
3483446dcd7SPetr Machatabridge_port_ngroups_get()
3493446dcd7SPetr Machata{
3503446dcd7SPetr Machata	local locus=$1; shift
3513446dcd7SPetr Machata
3523446dcd7SPetr Machata	bridge -j -d link show $locus |
3533446dcd7SPetr Machata	    jq '.[].mcast_n_groups'
3543446dcd7SPetr Machata}
3553446dcd7SPetr Machata
3563446dcd7SPetr Machatabridge_port_maxgroups_get()
3573446dcd7SPetr Machata{
3583446dcd7SPetr Machata	local locus=$1; shift
3593446dcd7SPetr Machata
3603446dcd7SPetr Machata	bridge -j -d link show $locus |
3613446dcd7SPetr Machata	    jq '.[].mcast_max_groups'
3623446dcd7SPetr Machata}
3633446dcd7SPetr Machata
3643446dcd7SPetr Machatabridge_port_maxgroups_set()
3653446dcd7SPetr Machata{
3663446dcd7SPetr Machata	local locus=$1; shift
3673446dcd7SPetr Machata	local max=$1; shift
3683446dcd7SPetr Machata
3693446dcd7SPetr Machata	bridge link set dev $(locus_dev $locus) mcast_max_groups $max
3703446dcd7SPetr Machata}
3713446dcd7SPetr Machata
3723446dcd7SPetr Machatabridge_port_vlan_ngroups_get()
3733446dcd7SPetr Machata{
3743446dcd7SPetr Machata	local locus=$1; shift
3753446dcd7SPetr Machata
3763446dcd7SPetr Machata	bridge -j -d vlan show $locus |
3773446dcd7SPetr Machata	    jq '.[].vlans[].mcast_n_groups'
3783446dcd7SPetr Machata}
3793446dcd7SPetr Machata
3803446dcd7SPetr Machatabridge_port_vlan_maxgroups_get()
3813446dcd7SPetr Machata{
3823446dcd7SPetr Machata	local locus=$1; shift
3833446dcd7SPetr Machata
3843446dcd7SPetr Machata	bridge -j -d vlan show $locus |
3853446dcd7SPetr Machata	    jq '.[].vlans[].mcast_max_groups'
3863446dcd7SPetr Machata}
3873446dcd7SPetr Machata
3883446dcd7SPetr Machatabridge_port_vlan_maxgroups_set()
3893446dcd7SPetr Machata{
3903446dcd7SPetr Machata	local locus=$1; shift
3913446dcd7SPetr Machata	local max=$1; shift
3923446dcd7SPetr Machata
3933446dcd7SPetr Machata	bridge vlan set $locus mcast_max_groups $max
3943446dcd7SPetr Machata}
3953446dcd7SPetr Machata
3963446dcd7SPetr Machatatest_ngroups_reporting()
3973446dcd7SPetr Machata{
3983446dcd7SPetr Machata	local CFG=$1; shift
3993446dcd7SPetr Machata	local context=$1; shift
4003446dcd7SPetr Machata	local locus=$1; shift
4013446dcd7SPetr Machata
4023446dcd7SPetr Machata	RET=0
4033446dcd7SPetr Machata
4043446dcd7SPetr Machata	local n0=$(bridge_${context}_ngroups_get "$locus")
4053446dcd7SPetr Machata	${CFG}_entries_add "$locus" temp 5
4063446dcd7SPetr Machata	check_err $? "Couldn't add MDB entries"
4073446dcd7SPetr Machata	local n1=$(bridge_${context}_ngroups_get "$locus")
4083446dcd7SPetr Machata
4093446dcd7SPetr Machata	((n1 == n0 + 5))
4103446dcd7SPetr Machata	check_err $? "Number of groups was $n0, now is $n1, but $((n0 + 5)) expected"
4113446dcd7SPetr Machata
4123446dcd7SPetr Machata	${CFG}_entries_del "$locus" temp 5
4133446dcd7SPetr Machata	check_err $? "Couldn't delete MDB entries"
4143446dcd7SPetr Machata	local n2=$(bridge_${context}_ngroups_get "$locus")
4153446dcd7SPetr Machata
4163446dcd7SPetr Machata	((n2 == n0))
4173446dcd7SPetr Machata	check_err $? "Number of groups was $n0, now is $n2, but should be back to $n0"
4183446dcd7SPetr Machata
4193446dcd7SPetr Machata	log_test "$CFG: $context: ngroups reporting"
4203446dcd7SPetr Machata}
4213446dcd7SPetr Machata
4223446dcd7SPetr Machatatest_8021d_ngroups_reporting_cfg4()
4233446dcd7SPetr Machata{
4243446dcd7SPetr Machata	test_ngroups_reporting cfg4 port "dev $swp1"
4253446dcd7SPetr Machata}
4263446dcd7SPetr Machata
4273446dcd7SPetr Machatatest_8021d_ngroups_reporting_ctl4()
4283446dcd7SPetr Machata{
4293446dcd7SPetr Machata	test_ngroups_reporting ctl4 port "dev $swp1"
4303446dcd7SPetr Machata}
4313446dcd7SPetr Machata
4323446dcd7SPetr Machatatest_8021d_ngroups_reporting_cfg6()
4333446dcd7SPetr Machata{
4343446dcd7SPetr Machata	test_ngroups_reporting cfg6 port "dev $swp1"
4353446dcd7SPetr Machata}
4363446dcd7SPetr Machata
4373446dcd7SPetr Machatatest_8021d_ngroups_reporting_ctl6()
4383446dcd7SPetr Machata{
4393446dcd7SPetr Machata	test_ngroups_reporting ctl6 port "dev $swp1"
4403446dcd7SPetr Machata}
4413446dcd7SPetr Machata
4423446dcd7SPetr Machatatest_8021q_ngroups_reporting_cfg4()
4433446dcd7SPetr Machata{
4443446dcd7SPetr Machata	test_ngroups_reporting cfg4 port "dev $swp1 vid 10"
4453446dcd7SPetr Machata}
4463446dcd7SPetr Machata
4473446dcd7SPetr Machatatest_8021q_ngroups_reporting_ctl4()
4483446dcd7SPetr Machata{
4493446dcd7SPetr Machata	test_ngroups_reporting ctl4 port "dev $swp1 vid 10"
4503446dcd7SPetr Machata}
4513446dcd7SPetr Machata
4523446dcd7SPetr Machatatest_8021q_ngroups_reporting_cfg6()
4533446dcd7SPetr Machata{
4543446dcd7SPetr Machata	test_ngroups_reporting cfg6 port "dev $swp1 vid 10"
4553446dcd7SPetr Machata}
4563446dcd7SPetr Machata
4573446dcd7SPetr Machatatest_8021q_ngroups_reporting_ctl6()
4583446dcd7SPetr Machata{
4593446dcd7SPetr Machata	test_ngroups_reporting ctl6 port "dev $swp1 vid 10"
4603446dcd7SPetr Machata}
4613446dcd7SPetr Machata
4623446dcd7SPetr Machatatest_8021qvs_ngroups_reporting_cfg4()
4633446dcd7SPetr Machata{
4643446dcd7SPetr Machata	test_ngroups_reporting cfg4 port_vlan "dev $swp1 vid 10"
4653446dcd7SPetr Machata}
4663446dcd7SPetr Machata
4673446dcd7SPetr Machatatest_8021qvs_ngroups_reporting_ctl4()
4683446dcd7SPetr Machata{
4693446dcd7SPetr Machata	test_ngroups_reporting ctl4 port_vlan "dev $swp1 vid 10"
4703446dcd7SPetr Machata}
4713446dcd7SPetr Machata
4723446dcd7SPetr Machatatest_8021qvs_ngroups_reporting_cfg6()
4733446dcd7SPetr Machata{
4743446dcd7SPetr Machata	test_ngroups_reporting cfg6 port_vlan "dev $swp1 vid 10"
4753446dcd7SPetr Machata}
4763446dcd7SPetr Machata
4773446dcd7SPetr Machatatest_8021qvs_ngroups_reporting_ctl6()
4783446dcd7SPetr Machata{
4793446dcd7SPetr Machata	test_ngroups_reporting ctl6 port_vlan "dev $swp1 vid 10"
4803446dcd7SPetr Machata}
4813446dcd7SPetr Machata
4823446dcd7SPetr Machatatest_ngroups_cross_vlan()
4833446dcd7SPetr Machata{
4843446dcd7SPetr Machata	local CFG=$1; shift
4853446dcd7SPetr Machata
4863446dcd7SPetr Machata	local locus1="dev $swp1 vid 10"
4873446dcd7SPetr Machata	local locus2="dev $swp1 vid 20"
4883446dcd7SPetr Machata
4893446dcd7SPetr Machata	RET=0
4903446dcd7SPetr Machata
4913446dcd7SPetr Machata	local n10=$(bridge_port_vlan_ngroups_get "$locus1")
4923446dcd7SPetr Machata	local n20=$(bridge_port_vlan_ngroups_get "$locus2")
4933446dcd7SPetr Machata	${CFG}_entries_add "$locus1" temp 5 111
4943446dcd7SPetr Machata	check_err $? "Couldn't add MDB entries to VLAN 10"
4953446dcd7SPetr Machata	local n11=$(bridge_port_vlan_ngroups_get "$locus1")
4963446dcd7SPetr Machata	local n21=$(bridge_port_vlan_ngroups_get "$locus2")
4973446dcd7SPetr Machata
4983446dcd7SPetr Machata	((n11 == n10 + 5))
4993446dcd7SPetr Machata	check_err $? "Number of groups at VLAN 10 was $n10, now is $n11, but 5 entries added on VLAN 10, $((n10 + 5)) expected"
5003446dcd7SPetr Machata
5013446dcd7SPetr Machata	((n21 == n20))
5023446dcd7SPetr Machata	check_err $? "Number of groups at VLAN 20 was $n20, now is $n21, but no change expected on VLAN 20"
5033446dcd7SPetr Machata
5043446dcd7SPetr Machata	${CFG}_entries_add "$locus2" temp 5 112
5053446dcd7SPetr Machata	check_err $? "Couldn't add MDB entries to VLAN 20"
5063446dcd7SPetr Machata	local n12=$(bridge_port_vlan_ngroups_get "$locus1")
5073446dcd7SPetr Machata	local n22=$(bridge_port_vlan_ngroups_get "$locus2")
5083446dcd7SPetr Machata
5093446dcd7SPetr Machata	((n12 == n11))
5103446dcd7SPetr Machata	check_err $? "Number of groups at VLAN 10 was $n11, now is $n12, but no change expected on VLAN 10"
5113446dcd7SPetr Machata
5123446dcd7SPetr Machata	((n22 == n21 + 5))
5133446dcd7SPetr Machata	check_err $? "Number of groups at VLAN 20 was $n21, now is $n22, but 5 entries added on VLAN 20, $((n21 + 5)) expected"
5143446dcd7SPetr Machata
5153446dcd7SPetr Machata	${CFG}_entries_del "$locus1" temp 5 111
5163446dcd7SPetr Machata	check_err $? "Couldn't delete MDB entries from VLAN 10"
5173446dcd7SPetr Machata	${CFG}_entries_del "$locus2" temp 5 112
5183446dcd7SPetr Machata	check_err $? "Couldn't delete MDB entries from VLAN 20"
5193446dcd7SPetr Machata	local n13=$(bridge_port_vlan_ngroups_get "$locus1")
5203446dcd7SPetr Machata	local n23=$(bridge_port_vlan_ngroups_get "$locus2")
5213446dcd7SPetr Machata
5223446dcd7SPetr Machata	((n13 == n10))
5233446dcd7SPetr Machata	check_err $? "Number of groups at VLAN 10 was $n10, now is $n13, but should be back to $n10"
5243446dcd7SPetr Machata
5253446dcd7SPetr Machata	((n23 == n20))
5263446dcd7SPetr Machata	check_err $? "Number of groups at VLAN 20 was $n20, now is $n23, but should be back to $n20"
5273446dcd7SPetr Machata
5283446dcd7SPetr Machata	log_test "$CFG: port_vlan: isolation of port and per-VLAN ngroups"
5293446dcd7SPetr Machata}
5303446dcd7SPetr Machata
5313446dcd7SPetr Machatatest_8021qvs_ngroups_cross_vlan_cfg4()
5323446dcd7SPetr Machata{
5333446dcd7SPetr Machata	test_ngroups_cross_vlan cfg4
5343446dcd7SPetr Machata}
5353446dcd7SPetr Machata
5363446dcd7SPetr Machatatest_8021qvs_ngroups_cross_vlan_ctl4()
5373446dcd7SPetr Machata{
5383446dcd7SPetr Machata	test_ngroups_cross_vlan ctl4
5393446dcd7SPetr Machata}
5403446dcd7SPetr Machata
5413446dcd7SPetr Machatatest_8021qvs_ngroups_cross_vlan_cfg6()
5423446dcd7SPetr Machata{
5433446dcd7SPetr Machata	test_ngroups_cross_vlan cfg6
5443446dcd7SPetr Machata}
5453446dcd7SPetr Machata
5463446dcd7SPetr Machatatest_8021qvs_ngroups_cross_vlan_ctl6()
5473446dcd7SPetr Machata{
5483446dcd7SPetr Machata	test_ngroups_cross_vlan ctl6
5493446dcd7SPetr Machata}
5503446dcd7SPetr Machata
5513446dcd7SPetr Machatatest_maxgroups_zero()
5523446dcd7SPetr Machata{
5533446dcd7SPetr Machata	local CFG=$1; shift
5543446dcd7SPetr Machata	local context=$1; shift
5553446dcd7SPetr Machata	local locus=$1; shift
5563446dcd7SPetr Machata
5573446dcd7SPetr Machata	RET=0
5583446dcd7SPetr Machata	local max
5593446dcd7SPetr Machata
5603446dcd7SPetr Machata	max=$(bridge_${context}_maxgroups_get "$locus")
5613446dcd7SPetr Machata	((max == 0))
5623446dcd7SPetr Machata	check_err $? "Max groups on $locus should be 0, but $max reported"
5633446dcd7SPetr Machata
5643446dcd7SPetr Machata	bridge_${context}_maxgroups_set "$locus" 100
5653446dcd7SPetr Machata	check_err $? "Failed to set max to 100"
5663446dcd7SPetr Machata	max=$(bridge_${context}_maxgroups_get "$locus")
5673446dcd7SPetr Machata	((max == 100))
5683446dcd7SPetr Machata	check_err $? "Max groups expected to be 100, but $max reported"
5693446dcd7SPetr Machata
5703446dcd7SPetr Machata	bridge_${context}_maxgroups_set "$locus" 0
5713446dcd7SPetr Machata	check_err $? "Couldn't set maximum to 0"
5723446dcd7SPetr Machata
5733446dcd7SPetr Machata	# Test that setting 0 explicitly still serves as infinity.
5743446dcd7SPetr Machata	${CFG}_entries_add "$locus" temp 5
5753446dcd7SPetr Machata	check_err $? "Adding 5 MDB entries failed but should have passed"
5763446dcd7SPetr Machata	${CFG}_entries_del "$locus" temp 5
5773446dcd7SPetr Machata	check_err $? "Couldn't delete MDB entries"
5783446dcd7SPetr Machata
5793446dcd7SPetr Machata	log_test "$CFG: $context maxgroups: reporting and treatment of 0"
5803446dcd7SPetr Machata}
5813446dcd7SPetr Machata
5823446dcd7SPetr Machatatest_8021d_maxgroups_zero_cfg4()
5833446dcd7SPetr Machata{
5843446dcd7SPetr Machata	test_maxgroups_zero cfg4 port "dev $swp1"
5853446dcd7SPetr Machata}
5863446dcd7SPetr Machata
5873446dcd7SPetr Machatatest_8021d_maxgroups_zero_ctl4()
5883446dcd7SPetr Machata{
5893446dcd7SPetr Machata	test_maxgroups_zero ctl4 port "dev $swp1"
5903446dcd7SPetr Machata}
5913446dcd7SPetr Machata
5923446dcd7SPetr Machatatest_8021d_maxgroups_zero_cfg6()
5933446dcd7SPetr Machata{
5943446dcd7SPetr Machata	test_maxgroups_zero cfg6 port "dev $swp1"
5953446dcd7SPetr Machata}
5963446dcd7SPetr Machata
5973446dcd7SPetr Machatatest_8021d_maxgroups_zero_ctl6()
5983446dcd7SPetr Machata{
5993446dcd7SPetr Machata	test_maxgroups_zero ctl6 port "dev $swp1"
6003446dcd7SPetr Machata}
6013446dcd7SPetr Machata
6023446dcd7SPetr Machatatest_8021q_maxgroups_zero_cfg4()
6033446dcd7SPetr Machata{
6043446dcd7SPetr Machata	test_maxgroups_zero cfg4 port "dev $swp1 vid 10"
6053446dcd7SPetr Machata}
6063446dcd7SPetr Machata
6073446dcd7SPetr Machatatest_8021q_maxgroups_zero_ctl4()
6083446dcd7SPetr Machata{
6093446dcd7SPetr Machata	test_maxgroups_zero ctl4 port "dev $swp1 vid 10"
6103446dcd7SPetr Machata}
6113446dcd7SPetr Machata
6123446dcd7SPetr Machatatest_8021q_maxgroups_zero_cfg6()
6133446dcd7SPetr Machata{
6143446dcd7SPetr Machata	test_maxgroups_zero cfg6 port "dev $swp1 vid 10"
6153446dcd7SPetr Machata}
6163446dcd7SPetr Machata
6173446dcd7SPetr Machatatest_8021q_maxgroups_zero_ctl6()
6183446dcd7SPetr Machata{
6193446dcd7SPetr Machata	test_maxgroups_zero ctl6 port "dev $swp1 vid 10"
6203446dcd7SPetr Machata}
6213446dcd7SPetr Machata
6223446dcd7SPetr Machatatest_8021qvs_maxgroups_zero_cfg4()
6233446dcd7SPetr Machata{
6243446dcd7SPetr Machata	test_maxgroups_zero cfg4 port_vlan "dev $swp1 vid 10"
6253446dcd7SPetr Machata}
6263446dcd7SPetr Machata
6273446dcd7SPetr Machatatest_8021qvs_maxgroups_zero_ctl4()
6283446dcd7SPetr Machata{
6293446dcd7SPetr Machata	test_maxgroups_zero ctl4 port_vlan "dev $swp1 vid 10"
6303446dcd7SPetr Machata}
6313446dcd7SPetr Machata
6323446dcd7SPetr Machatatest_8021qvs_maxgroups_zero_cfg6()
6333446dcd7SPetr Machata{
6343446dcd7SPetr Machata	test_maxgroups_zero cfg6 port_vlan "dev $swp1 vid 10"
6353446dcd7SPetr Machata}
6363446dcd7SPetr Machata
6373446dcd7SPetr Machatatest_8021qvs_maxgroups_zero_ctl6()
6383446dcd7SPetr Machata{
6393446dcd7SPetr Machata	test_maxgroups_zero ctl6 port_vlan "dev $swp1 vid 10"
6403446dcd7SPetr Machata}
6413446dcd7SPetr Machata
6423446dcd7SPetr Machatatest_maxgroups_zero_cross_vlan()
6433446dcd7SPetr Machata{
6443446dcd7SPetr Machata	local CFG=$1; shift
6453446dcd7SPetr Machata
6463446dcd7SPetr Machata	local locus0="dev $swp1"
6473446dcd7SPetr Machata	local locus1="dev $swp1 vid 10"
6483446dcd7SPetr Machata	local locus2="dev $swp1 vid 20"
6493446dcd7SPetr Machata	local max
6503446dcd7SPetr Machata
6513446dcd7SPetr Machata	RET=0
6523446dcd7SPetr Machata
6533446dcd7SPetr Machata	bridge_port_vlan_maxgroups_set "$locus1" 100
6543446dcd7SPetr Machata	check_err $? "$locus1: Failed to set max to 100"
6553446dcd7SPetr Machata
6563446dcd7SPetr Machata	max=$(bridge_port_maxgroups_get "$locus0")
6573446dcd7SPetr Machata	((max == 0))
6583446dcd7SPetr Machata	check_err $? "$locus0: Max groups expected to be 0, but $max reported"
6593446dcd7SPetr Machata
6603446dcd7SPetr Machata	max=$(bridge_port_vlan_maxgroups_get "$locus2")
6613446dcd7SPetr Machata	((max == 0))
6623446dcd7SPetr Machata	check_err $? "$locus2: Max groups expected to be 0, but $max reported"
6633446dcd7SPetr Machata
6643446dcd7SPetr Machata	bridge_port_vlan_maxgroups_set "$locus2" 100
6653446dcd7SPetr Machata	check_err $? "$locus2: Failed to set max to 100"
6663446dcd7SPetr Machata
6673446dcd7SPetr Machata	max=$(bridge_port_maxgroups_get "$locus0")
6683446dcd7SPetr Machata	((max == 0))
6693446dcd7SPetr Machata	check_err $? "$locus0: Max groups expected to be 0, but $max reported"
6703446dcd7SPetr Machata
6713446dcd7SPetr Machata	max=$(bridge_port_vlan_maxgroups_get "$locus2")
6723446dcd7SPetr Machata	((max == 100))
6733446dcd7SPetr Machata	check_err $? "$locus2: Max groups expected to be 100, but $max reported"
6743446dcd7SPetr Machata
6753446dcd7SPetr Machata	bridge_port_maxgroups_set "$locus0" 100
6763446dcd7SPetr Machata	check_err $? "$locus0: Failed to set max to 100"
6773446dcd7SPetr Machata
6783446dcd7SPetr Machata	max=$(bridge_port_maxgroups_get "$locus0")
6793446dcd7SPetr Machata	((max == 100))
6803446dcd7SPetr Machata	check_err $? "$locus0: Max groups expected to be 100, but $max reported"
6813446dcd7SPetr Machata
6823446dcd7SPetr Machata	max=$(bridge_port_vlan_maxgroups_get "$locus2")
6833446dcd7SPetr Machata	((max == 100))
6843446dcd7SPetr Machata	check_err $? "$locus2: Max groups expected to be 100, but $max reported"
6853446dcd7SPetr Machata
6863446dcd7SPetr Machata	bridge_port_vlan_maxgroups_set "$locus1" 0
6873446dcd7SPetr Machata	check_err $? "$locus1: Failed to set max to 0"
6883446dcd7SPetr Machata
6893446dcd7SPetr Machata	max=$(bridge_port_maxgroups_get "$locus0")
6903446dcd7SPetr Machata	((max == 100))
6913446dcd7SPetr Machata	check_err $? "$locus0: Max groups expected to be 100, but $max reported"
6923446dcd7SPetr Machata
6933446dcd7SPetr Machata	max=$(bridge_port_vlan_maxgroups_get "$locus2")
6943446dcd7SPetr Machata	((max == 100))
6953446dcd7SPetr Machata	check_err $? "$locus2: Max groups expected to be 100, but $max reported"
6963446dcd7SPetr Machata
6973446dcd7SPetr Machata	bridge_port_vlan_maxgroups_set "$locus2" 0
6983446dcd7SPetr Machata	check_err $? "$locus2: Failed to set max to 0"
6993446dcd7SPetr Machata
7003446dcd7SPetr Machata	max=$(bridge_port_maxgroups_get "$locus0")
7013446dcd7SPetr Machata	((max == 100))
7023446dcd7SPetr Machata	check_err $? "$locus0: Max groups expected to be 100, but $max reported"
7033446dcd7SPetr Machata
7043446dcd7SPetr Machata	max=$(bridge_port_vlan_maxgroups_get "$locus2")
7053446dcd7SPetr Machata	((max == 0))
7063446dcd7SPetr Machata	check_err $? "$locus2: Max groups expected to be 0 but $max reported"
7073446dcd7SPetr Machata
7083446dcd7SPetr Machata	bridge_port_maxgroups_set "$locus0" 0
7093446dcd7SPetr Machata	check_err $? "$locus0: Failed to set max to 0"
7103446dcd7SPetr Machata
7113446dcd7SPetr Machata	max=$(bridge_port_maxgroups_get "$locus0")
7123446dcd7SPetr Machata	((max == 0))
7133446dcd7SPetr Machata	check_err $? "$locus0: Max groups expected to be 0, but $max reported"
7143446dcd7SPetr Machata
7153446dcd7SPetr Machata	max=$(bridge_port_vlan_maxgroups_get "$locus2")
7163446dcd7SPetr Machata	((max == 0))
7173446dcd7SPetr Machata	check_err $? "$locus2: Max groups expected to be 0, but $max reported"
7183446dcd7SPetr Machata
7193446dcd7SPetr Machata	log_test "$CFG: port_vlan maxgroups: isolation of port and per-VLAN maximums"
7203446dcd7SPetr Machata}
7213446dcd7SPetr Machata
7223446dcd7SPetr Machatatest_8021qvs_maxgroups_zero_cross_vlan_cfg4()
7233446dcd7SPetr Machata{
7243446dcd7SPetr Machata	test_maxgroups_zero_cross_vlan cfg4
7253446dcd7SPetr Machata}
7263446dcd7SPetr Machata
7273446dcd7SPetr Machatatest_8021qvs_maxgroups_zero_cross_vlan_ctl4()
7283446dcd7SPetr Machata{
7293446dcd7SPetr Machata	test_maxgroups_zero_cross_vlan ctl4
7303446dcd7SPetr Machata}
7313446dcd7SPetr Machata
7323446dcd7SPetr Machatatest_8021qvs_maxgroups_zero_cross_vlan_cfg6()
7333446dcd7SPetr Machata{
7343446dcd7SPetr Machata	test_maxgroups_zero_cross_vlan cfg6
7353446dcd7SPetr Machata}
7363446dcd7SPetr Machata
7373446dcd7SPetr Machatatest_8021qvs_maxgroups_zero_cross_vlan_ctl6()
7383446dcd7SPetr Machata{
7393446dcd7SPetr Machata	test_maxgroups_zero_cross_vlan ctl6
7403446dcd7SPetr Machata}
7413446dcd7SPetr Machata
7423446dcd7SPetr Machatatest_maxgroups_too_low()
7433446dcd7SPetr Machata{
7443446dcd7SPetr Machata	local CFG=$1; shift
7453446dcd7SPetr Machata	local context=$1; shift
7463446dcd7SPetr Machata	local locus=$1; shift
7473446dcd7SPetr Machata
7483446dcd7SPetr Machata	RET=0
7493446dcd7SPetr Machata
7503446dcd7SPetr Machata	local n=$(bridge_${context}_ngroups_get "$locus")
7513446dcd7SPetr Machata	local msg
7523446dcd7SPetr Machata
7533446dcd7SPetr Machata	${CFG}_entries_add "$locus" temp 5 111
7543446dcd7SPetr Machata	check_err $? "$locus: Couldn't add MDB entries"
7553446dcd7SPetr Machata
7563446dcd7SPetr Machata	bridge_${context}_maxgroups_set "$locus" $((n+2))
7573446dcd7SPetr Machata	check_err $? "$locus: Setting maxgroups to $((n+2)) failed"
7583446dcd7SPetr Machata
7593446dcd7SPetr Machata	msg=$(${CFG}_entries_add "$locus" temp 2 112 2>&1)
7603446dcd7SPetr Machata	check_fail $? "$locus: Adding more entries passed when max<n"
7613446dcd7SPetr Machata	bridge_maxgroups_errmsg_check_cfg "$msg"
7623446dcd7SPetr Machata
7633446dcd7SPetr Machata	${CFG}_entries_del "$locus" temp 5 111
7643446dcd7SPetr Machata	check_err $? "$locus: Couldn't delete MDB entries"
7653446dcd7SPetr Machata
7663446dcd7SPetr Machata	${CFG}_entries_add "$locus" temp 2 112
7673446dcd7SPetr Machata	check_err $? "$locus: Adding more entries failed"
7683446dcd7SPetr Machata
7693446dcd7SPetr Machata	${CFG}_entries_del "$locus" temp 2 112
7703446dcd7SPetr Machata	check_err $? "$locus: Deleting more entries failed"
7713446dcd7SPetr Machata
7723446dcd7SPetr Machata	bridge_${context}_maxgroups_set "$locus" 0
7733446dcd7SPetr Machata	check_err $? "$locus: Couldn't set maximum to 0"
7743446dcd7SPetr Machata
7753446dcd7SPetr Machata	log_test "$CFG: $context maxgroups: configure below ngroups"
7763446dcd7SPetr Machata}
7773446dcd7SPetr Machata
7783446dcd7SPetr Machatatest_8021d_maxgroups_too_low_cfg4()
7793446dcd7SPetr Machata{
7803446dcd7SPetr Machata	test_maxgroups_too_low cfg4 port "dev $swp1"
7813446dcd7SPetr Machata}
7823446dcd7SPetr Machata
7833446dcd7SPetr Machatatest_8021d_maxgroups_too_low_ctl4()
7843446dcd7SPetr Machata{
7853446dcd7SPetr Machata	test_maxgroups_too_low ctl4 port "dev $swp1"
7863446dcd7SPetr Machata}
7873446dcd7SPetr Machata
7883446dcd7SPetr Machatatest_8021d_maxgroups_too_low_cfg6()
7893446dcd7SPetr Machata{
7903446dcd7SPetr Machata	test_maxgroups_too_low cfg6 port "dev $swp1"
7913446dcd7SPetr Machata}
7923446dcd7SPetr Machata
7933446dcd7SPetr Machatatest_8021d_maxgroups_too_low_ctl6()
7943446dcd7SPetr Machata{
7953446dcd7SPetr Machata	test_maxgroups_too_low ctl6 port "dev $swp1"
7963446dcd7SPetr Machata}
7973446dcd7SPetr Machata
7983446dcd7SPetr Machatatest_8021q_maxgroups_too_low_cfg4()
7993446dcd7SPetr Machata{
8003446dcd7SPetr Machata	test_maxgroups_too_low cfg4 port "dev $swp1 vid 10"
8013446dcd7SPetr Machata}
8023446dcd7SPetr Machata
8033446dcd7SPetr Machatatest_8021q_maxgroups_too_low_ctl4()
8043446dcd7SPetr Machata{
8053446dcd7SPetr Machata	test_maxgroups_too_low ctl4 port "dev $swp1 vid 10"
8063446dcd7SPetr Machata}
8073446dcd7SPetr Machata
8083446dcd7SPetr Machatatest_8021q_maxgroups_too_low_cfg6()
8093446dcd7SPetr Machata{
8103446dcd7SPetr Machata	test_maxgroups_too_low cfg6 port "dev $swp1 vid 10"
8113446dcd7SPetr Machata}
8123446dcd7SPetr Machata
8133446dcd7SPetr Machatatest_8021q_maxgroups_too_low_ctl6()
8143446dcd7SPetr Machata{
8153446dcd7SPetr Machata	test_maxgroups_too_low ctl6 port "dev $swp1 vid 10"
8163446dcd7SPetr Machata}
8173446dcd7SPetr Machata
8183446dcd7SPetr Machatatest_8021qvs_maxgroups_too_low_cfg4()
8193446dcd7SPetr Machata{
8203446dcd7SPetr Machata	test_maxgroups_too_low cfg4 port_vlan "dev $swp1 vid 10"
8213446dcd7SPetr Machata}
8223446dcd7SPetr Machata
8233446dcd7SPetr Machatatest_8021qvs_maxgroups_too_low_ctl4()
8243446dcd7SPetr Machata{
8253446dcd7SPetr Machata	test_maxgroups_too_low ctl4 port_vlan "dev $swp1 vid 10"
8263446dcd7SPetr Machata}
8273446dcd7SPetr Machata
8283446dcd7SPetr Machatatest_8021qvs_maxgroups_too_low_cfg6()
8293446dcd7SPetr Machata{
8303446dcd7SPetr Machata	test_maxgroups_too_low cfg6 port_vlan "dev $swp1 vid 10"
8313446dcd7SPetr Machata}
8323446dcd7SPetr Machata
8333446dcd7SPetr Machatatest_8021qvs_maxgroups_too_low_ctl6()
8343446dcd7SPetr Machata{
8353446dcd7SPetr Machata	test_maxgroups_too_low ctl6 port_vlan "dev $swp1 vid 10"
8363446dcd7SPetr Machata}
8373446dcd7SPetr Machata
8383446dcd7SPetr Machatatest_maxgroups_too_many_entries()
8393446dcd7SPetr Machata{
8403446dcd7SPetr Machata	local CFG=$1; shift
8413446dcd7SPetr Machata	local context=$1; shift
8423446dcd7SPetr Machata	local locus=$1; shift
8433446dcd7SPetr Machata
8443446dcd7SPetr Machata	RET=0
8453446dcd7SPetr Machata
8463446dcd7SPetr Machata	local n=$(bridge_${context}_ngroups_get "$locus")
8473446dcd7SPetr Machata	local msg
8483446dcd7SPetr Machata
8493446dcd7SPetr Machata	# Configure a low maximum
8503446dcd7SPetr Machata	bridge_${context}_maxgroups_set "$locus" $((n+1))
8513446dcd7SPetr Machata	check_err $? "$locus: Couldn't set maximum"
8523446dcd7SPetr Machata
8533446dcd7SPetr Machata	# Try to add more entries than the configured maximum
8543446dcd7SPetr Machata	msg=$(${CFG}_entries_add "$locus" temp 5 2>&1)
8553446dcd7SPetr Machata	check_fail $? "Adding 5 MDB entries passed, but should have failed"
8563446dcd7SPetr Machata	bridge_maxgroups_errmsg_check_${CFG} "$msg"
8573446dcd7SPetr Machata
8583446dcd7SPetr Machata	# When adding entries through the control path, as many as possible
8593446dcd7SPetr Machata	# get created. That's consistent with the mcast_hash_max behavior.
8603446dcd7SPetr Machata	# So there, drop the entries explicitly.
8613446dcd7SPetr Machata	if [[ ${CFG%[46]} == ctl ]]; then
8623446dcd7SPetr Machata		${CFG}_entries_del "$locus" temp 17 2>&1
8633446dcd7SPetr Machata	fi
8643446dcd7SPetr Machata
8653446dcd7SPetr Machata	local n2=$(bridge_${context}_ngroups_get "$locus")
8663446dcd7SPetr Machata	((n2 == n))
8673446dcd7SPetr Machata	check_err $? "Number of groups was $n, but after a failed attempt to add MDB entries it changed to $n2"
8683446dcd7SPetr Machata
8693446dcd7SPetr Machata	bridge_${context}_maxgroups_set "$locus" 0
8703446dcd7SPetr Machata	check_err $? "$locus: Couldn't set maximum to 0"
8713446dcd7SPetr Machata
8723446dcd7SPetr Machata	log_test "$CFG: $context maxgroups: add too many MDB entries"
8733446dcd7SPetr Machata}
8743446dcd7SPetr Machata
8753446dcd7SPetr Machatatest_8021d_maxgroups_too_many_entries_cfg4()
8763446dcd7SPetr Machata{
8773446dcd7SPetr Machata	test_maxgroups_too_many_entries cfg4 port "dev $swp1"
8783446dcd7SPetr Machata}
8793446dcd7SPetr Machata
8803446dcd7SPetr Machatatest_8021d_maxgroups_too_many_entries_ctl4()
8813446dcd7SPetr Machata{
8823446dcd7SPetr Machata	test_maxgroups_too_many_entries ctl4 port "dev $swp1"
8833446dcd7SPetr Machata}
8843446dcd7SPetr Machata
8853446dcd7SPetr Machatatest_8021d_maxgroups_too_many_entries_cfg6()
8863446dcd7SPetr Machata{
8873446dcd7SPetr Machata	test_maxgroups_too_many_entries cfg6 port "dev $swp1"
8883446dcd7SPetr Machata}
8893446dcd7SPetr Machata
8903446dcd7SPetr Machatatest_8021d_maxgroups_too_many_entries_ctl6()
8913446dcd7SPetr Machata{
8923446dcd7SPetr Machata	test_maxgroups_too_many_entries ctl6 port "dev $swp1"
8933446dcd7SPetr Machata}
8943446dcd7SPetr Machata
8953446dcd7SPetr Machatatest_8021q_maxgroups_too_many_entries_cfg4()
8963446dcd7SPetr Machata{
8973446dcd7SPetr Machata	test_maxgroups_too_many_entries cfg4 port "dev $swp1 vid 10"
8983446dcd7SPetr Machata}
8993446dcd7SPetr Machata
9003446dcd7SPetr Machatatest_8021q_maxgroups_too_many_entries_ctl4()
9013446dcd7SPetr Machata{
9023446dcd7SPetr Machata	test_maxgroups_too_many_entries ctl4 port "dev $swp1 vid 10"
9033446dcd7SPetr Machata}
9043446dcd7SPetr Machata
9053446dcd7SPetr Machatatest_8021q_maxgroups_too_many_entries_cfg6()
9063446dcd7SPetr Machata{
9073446dcd7SPetr Machata	test_maxgroups_too_many_entries cfg6 port "dev $swp1 vid 10"
9083446dcd7SPetr Machata}
9093446dcd7SPetr Machata
9103446dcd7SPetr Machatatest_8021q_maxgroups_too_many_entries_ctl6()
9113446dcd7SPetr Machata{
9123446dcd7SPetr Machata	test_maxgroups_too_many_entries ctl6 port "dev $swp1 vid 10"
9133446dcd7SPetr Machata}
9143446dcd7SPetr Machata
9153446dcd7SPetr Machatatest_8021qvs_maxgroups_too_many_entries_cfg4()
9163446dcd7SPetr Machata{
9173446dcd7SPetr Machata	test_maxgroups_too_many_entries cfg4 port_vlan "dev $swp1 vid 10"
9183446dcd7SPetr Machata}
9193446dcd7SPetr Machata
9203446dcd7SPetr Machatatest_8021qvs_maxgroups_too_many_entries_ctl4()
9213446dcd7SPetr Machata{
9223446dcd7SPetr Machata	test_maxgroups_too_many_entries ctl4 port_vlan "dev $swp1 vid 10"
9233446dcd7SPetr Machata}
9243446dcd7SPetr Machata
9253446dcd7SPetr Machatatest_8021qvs_maxgroups_too_many_entries_cfg6()
9263446dcd7SPetr Machata{
9273446dcd7SPetr Machata	test_maxgroups_too_many_entries cfg6 port_vlan "dev $swp1 vid 10"
9283446dcd7SPetr Machata}
9293446dcd7SPetr Machata
9303446dcd7SPetr Machatatest_8021qvs_maxgroups_too_many_entries_ctl6()
9313446dcd7SPetr Machata{
9323446dcd7SPetr Machata	test_maxgroups_too_many_entries ctl6 port_vlan "dev $swp1 vid 10"
9333446dcd7SPetr Machata}
9343446dcd7SPetr Machata
9353446dcd7SPetr Machatatest_maxgroups_too_many_cross_vlan()
9363446dcd7SPetr Machata{
9373446dcd7SPetr Machata	local CFG=$1; shift
9383446dcd7SPetr Machata
9393446dcd7SPetr Machata	RET=0
9403446dcd7SPetr Machata
9413446dcd7SPetr Machata	local locus0="dev $swp1"
9423446dcd7SPetr Machata	local locus1="dev $swp1 vid 10"
9433446dcd7SPetr Machata	local locus2="dev $swp1 vid 20"
9443446dcd7SPetr Machata	local n1=$(bridge_port_vlan_ngroups_get "$locus1")
9453446dcd7SPetr Machata	local n2=$(bridge_port_vlan_ngroups_get "$locus2")
9463446dcd7SPetr Machata	local msg
9473446dcd7SPetr Machata
9483446dcd7SPetr Machata	if ((n1 > n2)); then
9493446dcd7SPetr Machata		local tmp=$n1
9503446dcd7SPetr Machata		n1=$n2
9513446dcd7SPetr Machata		n2=$tmp
9523446dcd7SPetr Machata
9533446dcd7SPetr Machata		tmp="$locus1"
9543446dcd7SPetr Machata		locus1="$locus2"
9553446dcd7SPetr Machata		locus2="$tmp"
9563446dcd7SPetr Machata	fi
9573446dcd7SPetr Machata
9583446dcd7SPetr Machata	# Now 0 <= n1 <= n2.
9593446dcd7SPetr Machata	${CFG}_entries_add "$locus2" temp 5 112
9603446dcd7SPetr Machata	check_err $? "Couldn't add 5 entries"
9613446dcd7SPetr Machata
9623446dcd7SPetr Machata	n2=$(bridge_port_vlan_ngroups_get "$locus2")
9633446dcd7SPetr Machata	# Now 0 <= n1 < n2-1.
9643446dcd7SPetr Machata
9653446dcd7SPetr Machata	# Setting locus1'maxgroups to n2-1 should pass. The number is
9663446dcd7SPetr Machata	# smaller than both the absolute number of MDB entries, and in
9673446dcd7SPetr Machata	# particular than number of locus2's number of entries, but it is
9683446dcd7SPetr Machata	# large enough to cover locus1's entries. Thus we check that
9693446dcd7SPetr Machata	# individual VLAN's ngroups are independent.
9703446dcd7SPetr Machata	bridge_port_vlan_maxgroups_set "$locus1" $((n2-1))
9713446dcd7SPetr Machata	check_err $? "Setting ${locus1}'s maxgroups to $((n2-1)) failed"
9723446dcd7SPetr Machata
9733446dcd7SPetr Machata	msg=$(${CFG}_entries_add "$locus1" temp $n2 111 2>&1)
9743446dcd7SPetr Machata	check_fail $? "$locus1: Adding $n2 MDB entries passed, but should have failed"
9753446dcd7SPetr Machata	bridge_maxgroups_errmsg_check_${CFG} "$msg"
9763446dcd7SPetr Machata
9773446dcd7SPetr Machata	bridge_port_maxgroups_set "$locus0" $((n1 + n2 + 2))
9783446dcd7SPetr Machata	check_err $? "$locus0: Couldn't set maximum"
9793446dcd7SPetr Machata
9803446dcd7SPetr Machata	msg=$(${CFG}_entries_add "$locus1" temp 5 111 2>&1)
9813446dcd7SPetr Machata	check_fail $? "$locus1: Adding 5 MDB entries passed, but should have failed"
9823446dcd7SPetr Machata	bridge_maxgroups_errmsg_check_${CFG} "$msg"
9833446dcd7SPetr Machata
9843446dcd7SPetr Machata	# IGMP/MLD packets can cause several entries to be added, before
9853446dcd7SPetr Machata	# the maximum is hit and the rest is then bounced. Remove what was
9863446dcd7SPetr Machata	# committed, if anything.
9873446dcd7SPetr Machata	${CFG}_entries_del "$locus1" temp 5 111 2>/dev/null
9883446dcd7SPetr Machata
9893446dcd7SPetr Machata	${CFG}_entries_add "$locus1" temp 2 111
9903446dcd7SPetr Machata	check_err $? "$locus1: Adding 2 MDB entries failed, but should have passed"
9913446dcd7SPetr Machata
9923446dcd7SPetr Machata	${CFG}_entries_del "$locus1" temp 2 111
9933446dcd7SPetr Machata	check_err $? "Couldn't delete MDB entries"
9943446dcd7SPetr Machata
9953446dcd7SPetr Machata	${CFG}_entries_del "$locus2" temp 5 112
9963446dcd7SPetr Machata	check_err $? "Couldn't delete MDB entries"
9973446dcd7SPetr Machata
9983446dcd7SPetr Machata	bridge_port_vlan_maxgroups_set "$locus1" 0
9993446dcd7SPetr Machata	check_err $? "$locus1: Couldn't set maximum to 0"
10003446dcd7SPetr Machata
10013446dcd7SPetr Machata	bridge_port_maxgroups_set "$locus0" 0
10023446dcd7SPetr Machata	check_err $? "$locus0: Couldn't set maximum to 0"
10033446dcd7SPetr Machata
10043446dcd7SPetr Machata	log_test "$CFG: port_vlan maxgroups: isolation of port and per-VLAN ngroups"
10053446dcd7SPetr Machata}
10063446dcd7SPetr Machata
10073446dcd7SPetr Machatatest_8021qvs_maxgroups_too_many_cross_vlan_cfg4()
10083446dcd7SPetr Machata{
10093446dcd7SPetr Machata	test_maxgroups_too_many_cross_vlan cfg4
10103446dcd7SPetr Machata}
10113446dcd7SPetr Machata
10123446dcd7SPetr Machatatest_8021qvs_maxgroups_too_many_cross_vlan_ctl4()
10133446dcd7SPetr Machata{
10143446dcd7SPetr Machata	test_maxgroups_too_many_cross_vlan ctl4
10153446dcd7SPetr Machata}
10163446dcd7SPetr Machata
10173446dcd7SPetr Machatatest_8021qvs_maxgroups_too_many_cross_vlan_cfg6()
10183446dcd7SPetr Machata{
10193446dcd7SPetr Machata	test_maxgroups_too_many_cross_vlan cfg6
10203446dcd7SPetr Machata}
10213446dcd7SPetr Machata
10223446dcd7SPetr Machatatest_8021qvs_maxgroups_too_many_cross_vlan_ctl6()
10233446dcd7SPetr Machata{
10243446dcd7SPetr Machata	test_maxgroups_too_many_cross_vlan ctl6
10253446dcd7SPetr Machata}
10263446dcd7SPetr Machata
10273446dcd7SPetr Machatatest_vlan_attributes()
10283446dcd7SPetr Machata{
10293446dcd7SPetr Machata	local locus=$1; shift
10303446dcd7SPetr Machata	local expect=$1; shift
10313446dcd7SPetr Machata
10323446dcd7SPetr Machata	RET=0
10333446dcd7SPetr Machata
10343446dcd7SPetr Machata	local max=$(bridge_port_vlan_maxgroups_get "$locus")
10353446dcd7SPetr Machata	local n=$(bridge_port_vlan_ngroups_get "$locus")
10363446dcd7SPetr Machata
10373446dcd7SPetr Machata	eval "[[ $max $expect ]]"
10383446dcd7SPetr Machata	check_err $? "$locus: maxgroups attribute expected to be $expect, but was $max"
10393446dcd7SPetr Machata
10403446dcd7SPetr Machata	eval "[[ $n $expect ]]"
10413446dcd7SPetr Machata	check_err $? "$locus: ngroups attribute expected to be $expect, but was $n"
10423446dcd7SPetr Machata
10433446dcd7SPetr Machata	log_test "port_vlan: presence of ngroups and maxgroups attributes"
10443446dcd7SPetr Machata}
10453446dcd7SPetr Machata
10463446dcd7SPetr Machatatest_8021q_vlan_attributes()
10473446dcd7SPetr Machata{
10483446dcd7SPetr Machata	test_vlan_attributes "dev $swp1 vid 10" "== null"
10493446dcd7SPetr Machata}
10503446dcd7SPetr Machata
10513446dcd7SPetr Machatatest_8021qvs_vlan_attributes()
10523446dcd7SPetr Machata{
10533446dcd7SPetr Machata	test_vlan_attributes "dev $swp1 vid 10" "-ge 0"
10543446dcd7SPetr Machata}
10553446dcd7SPetr Machata
10563446dcd7SPetr Machatatest_toggle_vlan_snooping()
10573446dcd7SPetr Machata{
10583446dcd7SPetr Machata	local mode=$1; shift
10593446dcd7SPetr Machata
10603446dcd7SPetr Machata	RET=0
10613446dcd7SPetr Machata
10623446dcd7SPetr Machata	local CFG=cfg4
10633446dcd7SPetr Machata	local context=port_vlan
10643446dcd7SPetr Machata	local locus="dev $swp1 vid 10"
10653446dcd7SPetr Machata
10663446dcd7SPetr Machata	${CFG}_entries_add "$locus" $mode 5
10673446dcd7SPetr Machata	check_err $? "Couldn't add MDB entries"
10683446dcd7SPetr Machata
10693446dcd7SPetr Machata	bridge_${context}_maxgroups_set "$locus" 100
10703446dcd7SPetr Machata	check_err $? "Failed to set max to 100"
10713446dcd7SPetr Machata
10723446dcd7SPetr Machata	ip link set dev br0 type bridge mcast_vlan_snooping 0
10733446dcd7SPetr Machata	sleep 1
10743446dcd7SPetr Machata	ip link set dev br0 type bridge mcast_vlan_snooping 1
10753446dcd7SPetr Machata
10763446dcd7SPetr Machata	local n=$(bridge_${context}_ngroups_get "$locus")
10773446dcd7SPetr Machata	local nn=$(bridge mdb show dev br0 | grep $swp1 | wc -l)
10783446dcd7SPetr Machata	((nn == n))
10793446dcd7SPetr Machata	check_err $? "mcast_n_groups expected to be $nn, but $n reported"
10803446dcd7SPetr Machata
10813446dcd7SPetr Machata	local max=$(bridge_${context}_maxgroups_get "$locus")
10823446dcd7SPetr Machata	((max == 100))
10833446dcd7SPetr Machata	check_err $? "Max groups expected to be 100 but $max reported"
10843446dcd7SPetr Machata
10853446dcd7SPetr Machata	bridge_${context}_maxgroups_set "$locus" 0
10863446dcd7SPetr Machata	check_err $? "Failed to set max to 0"
10873446dcd7SPetr Machata
10883446dcd7SPetr Machata	log_test "$CFG: $context: $mode: mcast_vlan_snooping toggle"
10893446dcd7SPetr Machata}
10903446dcd7SPetr Machata
10913446dcd7SPetr Machatatest_toggle_vlan_snooping_temp()
10923446dcd7SPetr Machata{
10933446dcd7SPetr Machata	test_toggle_vlan_snooping temp
10943446dcd7SPetr Machata}
10953446dcd7SPetr Machata
10963446dcd7SPetr Machatatest_toggle_vlan_snooping_permanent()
10973446dcd7SPetr Machata{
10983446dcd7SPetr Machata	test_toggle_vlan_snooping permanent
10993446dcd7SPetr Machata}
11003446dcd7SPetr Machata
11013446dcd7SPetr Machata# ngroup test suites
11023446dcd7SPetr Machata
11033446dcd7SPetr Machatatest_8021d_ngroups_cfg4()
11043446dcd7SPetr Machata{
11053446dcd7SPetr Machata	test_8021d_ngroups_reporting_cfg4
11063446dcd7SPetr Machata}
11073446dcd7SPetr Machata
11083446dcd7SPetr Machatatest_8021d_ngroups_ctl4()
11093446dcd7SPetr Machata{
11103446dcd7SPetr Machata	test_8021d_ngroups_reporting_ctl4
11113446dcd7SPetr Machata}
11123446dcd7SPetr Machata
11133446dcd7SPetr Machatatest_8021d_ngroups_cfg6()
11143446dcd7SPetr Machata{
11153446dcd7SPetr Machata	test_8021d_ngroups_reporting_cfg6
11163446dcd7SPetr Machata}
11173446dcd7SPetr Machata
11183446dcd7SPetr Machatatest_8021d_ngroups_ctl6()
11193446dcd7SPetr Machata{
11203446dcd7SPetr Machata	test_8021d_ngroups_reporting_ctl6
11213446dcd7SPetr Machata}
11223446dcd7SPetr Machata
11233446dcd7SPetr Machatatest_8021q_ngroups_cfg4()
11243446dcd7SPetr Machata{
11253446dcd7SPetr Machata	test_8021q_ngroups_reporting_cfg4
11263446dcd7SPetr Machata}
11273446dcd7SPetr Machata
11283446dcd7SPetr Machatatest_8021q_ngroups_ctl4()
11293446dcd7SPetr Machata{
11303446dcd7SPetr Machata	test_8021q_ngroups_reporting_ctl4
11313446dcd7SPetr Machata}
11323446dcd7SPetr Machata
11333446dcd7SPetr Machatatest_8021q_ngroups_cfg6()
11343446dcd7SPetr Machata{
11353446dcd7SPetr Machata	test_8021q_ngroups_reporting_cfg6
11363446dcd7SPetr Machata}
11373446dcd7SPetr Machata
11383446dcd7SPetr Machatatest_8021q_ngroups_ctl6()
11393446dcd7SPetr Machata{
11403446dcd7SPetr Machata	test_8021q_ngroups_reporting_ctl6
11413446dcd7SPetr Machata}
11423446dcd7SPetr Machata
11433446dcd7SPetr Machatatest_8021qvs_ngroups_cfg4()
11443446dcd7SPetr Machata{
11453446dcd7SPetr Machata	test_8021qvs_ngroups_reporting_cfg4
11463446dcd7SPetr Machata	test_8021qvs_ngroups_cross_vlan_cfg4
11473446dcd7SPetr Machata}
11483446dcd7SPetr Machata
11493446dcd7SPetr Machatatest_8021qvs_ngroups_ctl4()
11503446dcd7SPetr Machata{
11513446dcd7SPetr Machata	test_8021qvs_ngroups_reporting_ctl4
11523446dcd7SPetr Machata	test_8021qvs_ngroups_cross_vlan_ctl4
11533446dcd7SPetr Machata}
11543446dcd7SPetr Machata
11553446dcd7SPetr Machatatest_8021qvs_ngroups_cfg6()
11563446dcd7SPetr Machata{
11573446dcd7SPetr Machata	test_8021qvs_ngroups_reporting_cfg6
11583446dcd7SPetr Machata	test_8021qvs_ngroups_cross_vlan_cfg6
11593446dcd7SPetr Machata}
11603446dcd7SPetr Machata
11613446dcd7SPetr Machatatest_8021qvs_ngroups_ctl6()
11623446dcd7SPetr Machata{
11633446dcd7SPetr Machata	test_8021qvs_ngroups_reporting_ctl6
11643446dcd7SPetr Machata	test_8021qvs_ngroups_cross_vlan_ctl6
11653446dcd7SPetr Machata}
11663446dcd7SPetr Machata
11673446dcd7SPetr Machata# maxgroups test suites
11683446dcd7SPetr Machata
11693446dcd7SPetr Machatatest_8021d_maxgroups_cfg4()
11703446dcd7SPetr Machata{
11713446dcd7SPetr Machata	test_8021d_maxgroups_zero_cfg4
11723446dcd7SPetr Machata	test_8021d_maxgroups_too_low_cfg4
11733446dcd7SPetr Machata	test_8021d_maxgroups_too_many_entries_cfg4
11743446dcd7SPetr Machata}
11753446dcd7SPetr Machata
11763446dcd7SPetr Machatatest_8021d_maxgroups_ctl4()
11773446dcd7SPetr Machata{
11783446dcd7SPetr Machata	test_8021d_maxgroups_zero_ctl4
11793446dcd7SPetr Machata	test_8021d_maxgroups_too_low_ctl4
11803446dcd7SPetr Machata	test_8021d_maxgroups_too_many_entries_ctl4
11813446dcd7SPetr Machata}
11823446dcd7SPetr Machata
11833446dcd7SPetr Machatatest_8021d_maxgroups_cfg6()
11843446dcd7SPetr Machata{
11853446dcd7SPetr Machata	test_8021d_maxgroups_zero_cfg6
11863446dcd7SPetr Machata	test_8021d_maxgroups_too_low_cfg6
11873446dcd7SPetr Machata	test_8021d_maxgroups_too_many_entries_cfg6
11883446dcd7SPetr Machata}
11893446dcd7SPetr Machata
11903446dcd7SPetr Machatatest_8021d_maxgroups_ctl6()
11913446dcd7SPetr Machata{
11923446dcd7SPetr Machata	test_8021d_maxgroups_zero_ctl6
11933446dcd7SPetr Machata	test_8021d_maxgroups_too_low_ctl6
11943446dcd7SPetr Machata	test_8021d_maxgroups_too_many_entries_ctl6
11953446dcd7SPetr Machata}
11963446dcd7SPetr Machata
11973446dcd7SPetr Machatatest_8021q_maxgroups_cfg4()
11983446dcd7SPetr Machata{
11993446dcd7SPetr Machata	test_8021q_maxgroups_zero_cfg4
12003446dcd7SPetr Machata	test_8021q_maxgroups_too_low_cfg4
12013446dcd7SPetr Machata	test_8021q_maxgroups_too_many_entries_cfg4
12023446dcd7SPetr Machata}
12033446dcd7SPetr Machata
12043446dcd7SPetr Machatatest_8021q_maxgroups_ctl4()
12053446dcd7SPetr Machata{
12063446dcd7SPetr Machata	test_8021q_maxgroups_zero_ctl4
12073446dcd7SPetr Machata	test_8021q_maxgroups_too_low_ctl4
12083446dcd7SPetr Machata	test_8021q_maxgroups_too_many_entries_ctl4
12093446dcd7SPetr Machata}
12103446dcd7SPetr Machata
12113446dcd7SPetr Machatatest_8021q_maxgroups_cfg6()
12123446dcd7SPetr Machata{
12133446dcd7SPetr Machata	test_8021q_maxgroups_zero_cfg6
12143446dcd7SPetr Machata	test_8021q_maxgroups_too_low_cfg6
12153446dcd7SPetr Machata	test_8021q_maxgroups_too_many_entries_cfg6
12163446dcd7SPetr Machata}
12173446dcd7SPetr Machata
12183446dcd7SPetr Machatatest_8021q_maxgroups_ctl6()
12193446dcd7SPetr Machata{
12203446dcd7SPetr Machata	test_8021q_maxgroups_zero_ctl6
12213446dcd7SPetr Machata	test_8021q_maxgroups_too_low_ctl6
12223446dcd7SPetr Machata	test_8021q_maxgroups_too_many_entries_ctl6
12233446dcd7SPetr Machata}
12243446dcd7SPetr Machata
12253446dcd7SPetr Machatatest_8021qvs_maxgroups_cfg4()
12263446dcd7SPetr Machata{
12273446dcd7SPetr Machata	test_8021qvs_maxgroups_zero_cfg4
12283446dcd7SPetr Machata	test_8021qvs_maxgroups_zero_cross_vlan_cfg4
12293446dcd7SPetr Machata	test_8021qvs_maxgroups_too_low_cfg4
12303446dcd7SPetr Machata	test_8021qvs_maxgroups_too_many_entries_cfg4
12313446dcd7SPetr Machata	test_8021qvs_maxgroups_too_many_cross_vlan_cfg4
12323446dcd7SPetr Machata}
12333446dcd7SPetr Machata
12343446dcd7SPetr Machatatest_8021qvs_maxgroups_ctl4()
12353446dcd7SPetr Machata{
12363446dcd7SPetr Machata	test_8021qvs_maxgroups_zero_ctl4
12373446dcd7SPetr Machata	test_8021qvs_maxgroups_zero_cross_vlan_ctl4
12383446dcd7SPetr Machata	test_8021qvs_maxgroups_too_low_ctl4
12393446dcd7SPetr Machata	test_8021qvs_maxgroups_too_many_entries_ctl4
12403446dcd7SPetr Machata	test_8021qvs_maxgroups_too_many_cross_vlan_ctl4
12413446dcd7SPetr Machata}
12423446dcd7SPetr Machata
12433446dcd7SPetr Machatatest_8021qvs_maxgroups_cfg6()
12443446dcd7SPetr Machata{
12453446dcd7SPetr Machata	test_8021qvs_maxgroups_zero_cfg6
12463446dcd7SPetr Machata	test_8021qvs_maxgroups_zero_cross_vlan_cfg6
12473446dcd7SPetr Machata	test_8021qvs_maxgroups_too_low_cfg6
12483446dcd7SPetr Machata	test_8021qvs_maxgroups_too_many_entries_cfg6
12493446dcd7SPetr Machata	test_8021qvs_maxgroups_too_many_cross_vlan_cfg6
12503446dcd7SPetr Machata}
12513446dcd7SPetr Machata
12523446dcd7SPetr Machatatest_8021qvs_maxgroups_ctl6()
12533446dcd7SPetr Machata{
12543446dcd7SPetr Machata	test_8021qvs_maxgroups_zero_ctl6
12553446dcd7SPetr Machata	test_8021qvs_maxgroups_zero_cross_vlan_ctl6
12563446dcd7SPetr Machata	test_8021qvs_maxgroups_too_low_ctl6
12573446dcd7SPetr Machata	test_8021qvs_maxgroups_too_many_entries_ctl6
12583446dcd7SPetr Machata	test_8021qvs_maxgroups_too_many_cross_vlan_ctl6
12593446dcd7SPetr Machata}
12603446dcd7SPetr Machata
12613446dcd7SPetr Machata# other test suites
12623446dcd7SPetr Machata
12633446dcd7SPetr Machatatest_8021qvs_toggle_vlan_snooping()
12643446dcd7SPetr Machata{
12653446dcd7SPetr Machata	test_toggle_vlan_snooping_temp
12663446dcd7SPetr Machata	test_toggle_vlan_snooping_permanent
12673446dcd7SPetr Machata}
12683446dcd7SPetr Machata
12693446dcd7SPetr Machata# test groups
12703446dcd7SPetr Machata
12713446dcd7SPetr Machatatest_8021d()
12723446dcd7SPetr Machata{
12733446dcd7SPetr Machata	# Tests for vlan_filtering 0 mcast_vlan_snooping 0.
12743446dcd7SPetr Machata
12753446dcd7SPetr Machata	switch_create_8021d
12763446dcd7SPetr Machata	setup_wait
12773446dcd7SPetr Machata
12783446dcd7SPetr Machata	test_8021d_ngroups_cfg4
12793446dcd7SPetr Machata	test_8021d_ngroups_ctl4
12803446dcd7SPetr Machata	test_8021d_ngroups_cfg6
12813446dcd7SPetr Machata	test_8021d_ngroups_ctl6
12823446dcd7SPetr Machata	test_8021d_maxgroups_cfg4
12833446dcd7SPetr Machata	test_8021d_maxgroups_ctl4
12843446dcd7SPetr Machata	test_8021d_maxgroups_cfg6
12853446dcd7SPetr Machata	test_8021d_maxgroups_ctl6
12863446dcd7SPetr Machata
12873446dcd7SPetr Machata	switch_destroy
12883446dcd7SPetr Machata}
12893446dcd7SPetr Machata
12903446dcd7SPetr Machatatest_8021q()
12913446dcd7SPetr Machata{
12923446dcd7SPetr Machata	# Tests for vlan_filtering 1 mcast_vlan_snooping 0.
12933446dcd7SPetr Machata
12943446dcd7SPetr Machata	switch_create_8021q
12953446dcd7SPetr Machata	setup_wait
12963446dcd7SPetr Machata
12973446dcd7SPetr Machata	test_8021q_vlan_attributes
12983446dcd7SPetr Machata	test_8021q_ngroups_cfg4
12993446dcd7SPetr Machata	test_8021q_ngroups_ctl4
13003446dcd7SPetr Machata	test_8021q_ngroups_cfg6
13013446dcd7SPetr Machata	test_8021q_ngroups_ctl6
13023446dcd7SPetr Machata	test_8021q_maxgroups_cfg4
13033446dcd7SPetr Machata	test_8021q_maxgroups_ctl4
13043446dcd7SPetr Machata	test_8021q_maxgroups_cfg6
13053446dcd7SPetr Machata	test_8021q_maxgroups_ctl6
13063446dcd7SPetr Machata
13073446dcd7SPetr Machata	switch_destroy
13083446dcd7SPetr Machata}
13093446dcd7SPetr Machata
13103446dcd7SPetr Machatatest_8021qvs()
13113446dcd7SPetr Machata{
13123446dcd7SPetr Machata	# Tests for vlan_filtering 1 mcast_vlan_snooping 1.
13133446dcd7SPetr Machata
13143446dcd7SPetr Machata	switch_create_8021qvs
13153446dcd7SPetr Machata	setup_wait
13163446dcd7SPetr Machata
13173446dcd7SPetr Machata	test_8021qvs_vlan_attributes
13183446dcd7SPetr Machata	test_8021qvs_ngroups_cfg4
13193446dcd7SPetr Machata	test_8021qvs_ngroups_ctl4
13203446dcd7SPetr Machata	test_8021qvs_ngroups_cfg6
13213446dcd7SPetr Machata	test_8021qvs_ngroups_ctl6
13223446dcd7SPetr Machata	test_8021qvs_maxgroups_cfg4
13233446dcd7SPetr Machata	test_8021qvs_maxgroups_ctl4
13243446dcd7SPetr Machata	test_8021qvs_maxgroups_cfg6
13253446dcd7SPetr Machata	test_8021qvs_maxgroups_ctl6
13263446dcd7SPetr Machata	test_8021qvs_toggle_vlan_snooping
13273446dcd7SPetr Machata
13283446dcd7SPetr Machata	switch_destroy
13293446dcd7SPetr Machata}
13303446dcd7SPetr Machata
1331*6bdf3d97SIdo Schimmelif ! bridge link help 2>&1 | grep -q "mcast_max_groups"; then
1332*6bdf3d97SIdo Schimmel	echo "SKIP: iproute2 too old, missing bridge \"mcast_max_groups\" support"
1333*6bdf3d97SIdo Schimmel	exit $ksft_skip
1334*6bdf3d97SIdo Schimmelfi
1335*6bdf3d97SIdo Schimmel
13363446dcd7SPetr Machatatrap cleanup EXIT
13373446dcd7SPetr Machata
13383446dcd7SPetr Machatasetup_prepare
13393446dcd7SPetr Machatatests_run
13403446dcd7SPetr Machata
13413446dcd7SPetr Machataexit $EXIT_STATUS
1342