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}
255*cb034948SIdo Schimmel	local dmac=01:00:5e:01:01:$(printf "%02x" $grp)
256*cb034948SIdo Schimmel	$MZ $peer -a own -b $dmac -c 1 -A 192.0.2.1 -B $GRP \
2573446dcd7SPetr Machata		-t ip proto=2,p=$(igmpv3_is_in_get $GRP $IPs) -q
2583446dcd7SPetr Machata	sleep 1
2593446dcd7SPetr Machata
2603446dcd7SPetr Machata	local nn=$(bridge mdb show dev br0 | grep $GRP | wc -l)
2613446dcd7SPetr Machata	if ((nn != n)); then
2623446dcd7SPetr Machata		echo mcast_max_groups > /dev/stderr
2633446dcd7SPetr Machata		false
2643446dcd7SPetr Machata	fi
2653446dcd7SPetr Machata}
2663446dcd7SPetr Machata
2673446dcd7SPetr Machatactl4_entries_del()
2683446dcd7SPetr Machata{
2693446dcd7SPetr Machata	local locus=$1; shift
2703446dcd7SPetr Machata	local state=$1; shift
2713446dcd7SPetr Machata	local n=$1; shift
2723446dcd7SPetr Machata	local grp=${1:-1}; shift
2733446dcd7SPetr Machata
2743446dcd7SPetr Machata	local peer=$(locus_dev_peer $locus)
2753446dcd7SPetr Machata	local GRP=239.1.1.${grp}
276*cb034948SIdo Schimmel	local dmac=01:00:5e:00:00:02
277*cb034948SIdo Schimmel	$MZ $peer -a own -b $dmac -c 1 -A 192.0.2.1 -B 224.0.0.2 \
2783446dcd7SPetr Machata		-t ip proto=2,p=$(igmpv2_leave_get $GRP) -q
2793446dcd7SPetr Machata	sleep 1
2803446dcd7SPetr Machata	! bridge mdb show dev br0 | grep -q $GRP
2813446dcd7SPetr Machata}
2823446dcd7SPetr Machata
2833446dcd7SPetr Machatactl6_entries_add()
2843446dcd7SPetr Machata{
2853446dcd7SPetr Machata	local locus=$1; shift
2863446dcd7SPetr Machata	local state=$1; shift
2873446dcd7SPetr Machata	local n=$1; shift
2883446dcd7SPetr Machata	local grp=${1:-1}; shift
2893446dcd7SPetr Machata
2903446dcd7SPetr Machata	local IPs=$(printf "2001:db8:1::%x\n" $(seq 1 $((n - 1))))
2913446dcd7SPetr Machata	local peer=$(locus_dev_peer $locus)
2923446dcd7SPetr Machata	local SIP=fe80::1
2933446dcd7SPetr Machata	local GRP=ff0e::${grp}
294*cb034948SIdo Schimmel	local dmac=33:33:00:00:00:$(printf "%02x" $grp)
2953446dcd7SPetr Machata	local p=$(mldv2_is_in_get $SIP $GRP $IPs)
296*cb034948SIdo Schimmel	$MZ -6 $peer -a own -b $dmac -c 1 -A $SIP -B $GRP \
297*cb034948SIdo Schimmel		-t ip hop=1,next=0,p="$p" -q
2983446dcd7SPetr Machata	sleep 1
2993446dcd7SPetr Machata
3003446dcd7SPetr Machata	local nn=$(bridge mdb show dev br0 | grep $GRP | wc -l)
3013446dcd7SPetr Machata	if ((nn != n)); then
3023446dcd7SPetr Machata		echo mcast_max_groups > /dev/stderr
3033446dcd7SPetr Machata		false
3043446dcd7SPetr Machata	fi
3053446dcd7SPetr Machata}
3063446dcd7SPetr Machata
3073446dcd7SPetr Machatactl6_entries_del()
3083446dcd7SPetr Machata{
3093446dcd7SPetr Machata	local locus=$1; shift
3103446dcd7SPetr Machata	local state=$1; shift
3113446dcd7SPetr Machata	local n=$1; shift
3123446dcd7SPetr Machata	local grp=${1:-1}; shift
3133446dcd7SPetr Machata
3143446dcd7SPetr Machata	local peer=$(locus_dev_peer $locus)
3153446dcd7SPetr Machata	local SIP=fe80::1
3163446dcd7SPetr Machata	local GRP=ff0e::${grp}
317*cb034948SIdo Schimmel	local dmac=33:33:00:00:00:$(printf "%02x" $grp)
3183446dcd7SPetr Machata	local p=$(mldv1_done_get $SIP $GRP)
319*cb034948SIdo Schimmel	$MZ -6 $peer -a own -b $dmac -c 1 -A $SIP -B $GRP \
320*cb034948SIdo Schimmel		-t ip hop=1,next=0,p="$p" -q
3213446dcd7SPetr Machata	sleep 1
3223446dcd7SPetr Machata	! bridge mdb show dev br0 | grep -q $GRP
3233446dcd7SPetr Machata}
3243446dcd7SPetr Machata
3253446dcd7SPetr Machatabridge_maxgroups_errmsg_check_cfg()
3263446dcd7SPetr Machata{
3273446dcd7SPetr Machata	local msg=$1; shift
3283446dcd7SPetr Machata	local needle=$1; shift
3293446dcd7SPetr Machata
3303446dcd7SPetr Machata	echo "$msg" | grep -q mcast_max_groups
3313446dcd7SPetr Machata	check_err $? "Adding MDB entries failed for the wrong reason: $msg"
3323446dcd7SPetr Machata}
3333446dcd7SPetr Machata
3343446dcd7SPetr Machatabridge_maxgroups_errmsg_check_cfg4()
3353446dcd7SPetr Machata{
3363446dcd7SPetr Machata	bridge_maxgroups_errmsg_check_cfg "$@"
3373446dcd7SPetr Machata}
3383446dcd7SPetr Machata
3393446dcd7SPetr Machatabridge_maxgroups_errmsg_check_cfg6()
3403446dcd7SPetr Machata{
3413446dcd7SPetr Machata	bridge_maxgroups_errmsg_check_cfg "$@"
3423446dcd7SPetr Machata}
3433446dcd7SPetr Machata
3443446dcd7SPetr Machatabridge_maxgroups_errmsg_check_ctl4()
3453446dcd7SPetr Machata{
3463446dcd7SPetr Machata	:
3473446dcd7SPetr Machata}
3483446dcd7SPetr Machata
3493446dcd7SPetr Machatabridge_maxgroups_errmsg_check_ctl6()
3503446dcd7SPetr Machata{
3513446dcd7SPetr Machata	:
3523446dcd7SPetr Machata}
3533446dcd7SPetr Machata
3543446dcd7SPetr Machatabridge_port_ngroups_get()
3553446dcd7SPetr Machata{
3563446dcd7SPetr Machata	local locus=$1; shift
3573446dcd7SPetr Machata
3583446dcd7SPetr Machata	bridge -j -d link show $locus |
3593446dcd7SPetr Machata	    jq '.[].mcast_n_groups'
3603446dcd7SPetr Machata}
3613446dcd7SPetr Machata
3623446dcd7SPetr Machatabridge_port_maxgroups_get()
3633446dcd7SPetr Machata{
3643446dcd7SPetr Machata	local locus=$1; shift
3653446dcd7SPetr Machata
3663446dcd7SPetr Machata	bridge -j -d link show $locus |
3673446dcd7SPetr Machata	    jq '.[].mcast_max_groups'
3683446dcd7SPetr Machata}
3693446dcd7SPetr Machata
3703446dcd7SPetr Machatabridge_port_maxgroups_set()
3713446dcd7SPetr Machata{
3723446dcd7SPetr Machata	local locus=$1; shift
3733446dcd7SPetr Machata	local max=$1; shift
3743446dcd7SPetr Machata
3753446dcd7SPetr Machata	bridge link set dev $(locus_dev $locus) mcast_max_groups $max
3763446dcd7SPetr Machata}
3773446dcd7SPetr Machata
3783446dcd7SPetr Machatabridge_port_vlan_ngroups_get()
3793446dcd7SPetr Machata{
3803446dcd7SPetr Machata	local locus=$1; shift
3813446dcd7SPetr Machata
3823446dcd7SPetr Machata	bridge -j -d vlan show $locus |
3833446dcd7SPetr Machata	    jq '.[].vlans[].mcast_n_groups'
3843446dcd7SPetr Machata}
3853446dcd7SPetr Machata
3863446dcd7SPetr Machatabridge_port_vlan_maxgroups_get()
3873446dcd7SPetr Machata{
3883446dcd7SPetr Machata	local locus=$1; shift
3893446dcd7SPetr Machata
3903446dcd7SPetr Machata	bridge -j -d vlan show $locus |
3913446dcd7SPetr Machata	    jq '.[].vlans[].mcast_max_groups'
3923446dcd7SPetr Machata}
3933446dcd7SPetr Machata
3943446dcd7SPetr Machatabridge_port_vlan_maxgroups_set()
3953446dcd7SPetr Machata{
3963446dcd7SPetr Machata	local locus=$1; shift
3973446dcd7SPetr Machata	local max=$1; shift
3983446dcd7SPetr Machata
3993446dcd7SPetr Machata	bridge vlan set $locus mcast_max_groups $max
4003446dcd7SPetr Machata}
4013446dcd7SPetr Machata
4023446dcd7SPetr Machatatest_ngroups_reporting()
4033446dcd7SPetr Machata{
4043446dcd7SPetr Machata	local CFG=$1; shift
4053446dcd7SPetr Machata	local context=$1; shift
4063446dcd7SPetr Machata	local locus=$1; shift
4073446dcd7SPetr Machata
4083446dcd7SPetr Machata	RET=0
4093446dcd7SPetr Machata
4103446dcd7SPetr Machata	local n0=$(bridge_${context}_ngroups_get "$locus")
4113446dcd7SPetr Machata	${CFG}_entries_add "$locus" temp 5
4123446dcd7SPetr Machata	check_err $? "Couldn't add MDB entries"
4133446dcd7SPetr Machata	local n1=$(bridge_${context}_ngroups_get "$locus")
4143446dcd7SPetr Machata
4153446dcd7SPetr Machata	((n1 == n0 + 5))
4163446dcd7SPetr Machata	check_err $? "Number of groups was $n0, now is $n1, but $((n0 + 5)) expected"
4173446dcd7SPetr Machata
4183446dcd7SPetr Machata	${CFG}_entries_del "$locus" temp 5
4193446dcd7SPetr Machata	check_err $? "Couldn't delete MDB entries"
4203446dcd7SPetr Machata	local n2=$(bridge_${context}_ngroups_get "$locus")
4213446dcd7SPetr Machata
4223446dcd7SPetr Machata	((n2 == n0))
4233446dcd7SPetr Machata	check_err $? "Number of groups was $n0, now is $n2, but should be back to $n0"
4243446dcd7SPetr Machata
4253446dcd7SPetr Machata	log_test "$CFG: $context: ngroups reporting"
4263446dcd7SPetr Machata}
4273446dcd7SPetr Machata
4283446dcd7SPetr Machatatest_8021d_ngroups_reporting_cfg4()
4293446dcd7SPetr Machata{
4303446dcd7SPetr Machata	test_ngroups_reporting cfg4 port "dev $swp1"
4313446dcd7SPetr Machata}
4323446dcd7SPetr Machata
4333446dcd7SPetr Machatatest_8021d_ngroups_reporting_ctl4()
4343446dcd7SPetr Machata{
4353446dcd7SPetr Machata	test_ngroups_reporting ctl4 port "dev $swp1"
4363446dcd7SPetr Machata}
4373446dcd7SPetr Machata
4383446dcd7SPetr Machatatest_8021d_ngroups_reporting_cfg6()
4393446dcd7SPetr Machata{
4403446dcd7SPetr Machata	test_ngroups_reporting cfg6 port "dev $swp1"
4413446dcd7SPetr Machata}
4423446dcd7SPetr Machata
4433446dcd7SPetr Machatatest_8021d_ngroups_reporting_ctl6()
4443446dcd7SPetr Machata{
4453446dcd7SPetr Machata	test_ngroups_reporting ctl6 port "dev $swp1"
4463446dcd7SPetr Machata}
4473446dcd7SPetr Machata
4483446dcd7SPetr Machatatest_8021q_ngroups_reporting_cfg4()
4493446dcd7SPetr Machata{
4503446dcd7SPetr Machata	test_ngroups_reporting cfg4 port "dev $swp1 vid 10"
4513446dcd7SPetr Machata}
4523446dcd7SPetr Machata
4533446dcd7SPetr Machatatest_8021q_ngroups_reporting_ctl4()
4543446dcd7SPetr Machata{
4553446dcd7SPetr Machata	test_ngroups_reporting ctl4 port "dev $swp1 vid 10"
4563446dcd7SPetr Machata}
4573446dcd7SPetr Machata
4583446dcd7SPetr Machatatest_8021q_ngroups_reporting_cfg6()
4593446dcd7SPetr Machata{
4603446dcd7SPetr Machata	test_ngroups_reporting cfg6 port "dev $swp1 vid 10"
4613446dcd7SPetr Machata}
4623446dcd7SPetr Machata
4633446dcd7SPetr Machatatest_8021q_ngroups_reporting_ctl6()
4643446dcd7SPetr Machata{
4653446dcd7SPetr Machata	test_ngroups_reporting ctl6 port "dev $swp1 vid 10"
4663446dcd7SPetr Machata}
4673446dcd7SPetr Machata
4683446dcd7SPetr Machatatest_8021qvs_ngroups_reporting_cfg4()
4693446dcd7SPetr Machata{
4703446dcd7SPetr Machata	test_ngroups_reporting cfg4 port_vlan "dev $swp1 vid 10"
4713446dcd7SPetr Machata}
4723446dcd7SPetr Machata
4733446dcd7SPetr Machatatest_8021qvs_ngroups_reporting_ctl4()
4743446dcd7SPetr Machata{
4753446dcd7SPetr Machata	test_ngroups_reporting ctl4 port_vlan "dev $swp1 vid 10"
4763446dcd7SPetr Machata}
4773446dcd7SPetr Machata
4783446dcd7SPetr Machatatest_8021qvs_ngroups_reporting_cfg6()
4793446dcd7SPetr Machata{
4803446dcd7SPetr Machata	test_ngroups_reporting cfg6 port_vlan "dev $swp1 vid 10"
4813446dcd7SPetr Machata}
4823446dcd7SPetr Machata
4833446dcd7SPetr Machatatest_8021qvs_ngroups_reporting_ctl6()
4843446dcd7SPetr Machata{
4853446dcd7SPetr Machata	test_ngroups_reporting ctl6 port_vlan "dev $swp1 vid 10"
4863446dcd7SPetr Machata}
4873446dcd7SPetr Machata
4883446dcd7SPetr Machatatest_ngroups_cross_vlan()
4893446dcd7SPetr Machata{
4903446dcd7SPetr Machata	local CFG=$1; shift
4913446dcd7SPetr Machata
4923446dcd7SPetr Machata	local locus1="dev $swp1 vid 10"
4933446dcd7SPetr Machata	local locus2="dev $swp1 vid 20"
4943446dcd7SPetr Machata
4953446dcd7SPetr Machata	RET=0
4963446dcd7SPetr Machata
4973446dcd7SPetr Machata	local n10=$(bridge_port_vlan_ngroups_get "$locus1")
4983446dcd7SPetr Machata	local n20=$(bridge_port_vlan_ngroups_get "$locus2")
4993446dcd7SPetr Machata	${CFG}_entries_add "$locus1" temp 5 111
5003446dcd7SPetr Machata	check_err $? "Couldn't add MDB entries to VLAN 10"
5013446dcd7SPetr Machata	local n11=$(bridge_port_vlan_ngroups_get "$locus1")
5023446dcd7SPetr Machata	local n21=$(bridge_port_vlan_ngroups_get "$locus2")
5033446dcd7SPetr Machata
5043446dcd7SPetr Machata	((n11 == n10 + 5))
5053446dcd7SPetr Machata	check_err $? "Number of groups at VLAN 10 was $n10, now is $n11, but 5 entries added on VLAN 10, $((n10 + 5)) expected"
5063446dcd7SPetr Machata
5073446dcd7SPetr Machata	((n21 == n20))
5083446dcd7SPetr Machata	check_err $? "Number of groups at VLAN 20 was $n20, now is $n21, but no change expected on VLAN 20"
5093446dcd7SPetr Machata
5103446dcd7SPetr Machata	${CFG}_entries_add "$locus2" temp 5 112
5113446dcd7SPetr Machata	check_err $? "Couldn't add MDB entries to VLAN 20"
5123446dcd7SPetr Machata	local n12=$(bridge_port_vlan_ngroups_get "$locus1")
5133446dcd7SPetr Machata	local n22=$(bridge_port_vlan_ngroups_get "$locus2")
5143446dcd7SPetr Machata
5153446dcd7SPetr Machata	((n12 == n11))
5163446dcd7SPetr Machata	check_err $? "Number of groups at VLAN 10 was $n11, now is $n12, but no change expected on VLAN 10"
5173446dcd7SPetr Machata
5183446dcd7SPetr Machata	((n22 == n21 + 5))
5193446dcd7SPetr Machata	check_err $? "Number of groups at VLAN 20 was $n21, now is $n22, but 5 entries added on VLAN 20, $((n21 + 5)) expected"
5203446dcd7SPetr Machata
5213446dcd7SPetr Machata	${CFG}_entries_del "$locus1" temp 5 111
5223446dcd7SPetr Machata	check_err $? "Couldn't delete MDB entries from VLAN 10"
5233446dcd7SPetr Machata	${CFG}_entries_del "$locus2" temp 5 112
5243446dcd7SPetr Machata	check_err $? "Couldn't delete MDB entries from VLAN 20"
5253446dcd7SPetr Machata	local n13=$(bridge_port_vlan_ngroups_get "$locus1")
5263446dcd7SPetr Machata	local n23=$(bridge_port_vlan_ngroups_get "$locus2")
5273446dcd7SPetr Machata
5283446dcd7SPetr Machata	((n13 == n10))
5293446dcd7SPetr Machata	check_err $? "Number of groups at VLAN 10 was $n10, now is $n13, but should be back to $n10"
5303446dcd7SPetr Machata
5313446dcd7SPetr Machata	((n23 == n20))
5323446dcd7SPetr Machata	check_err $? "Number of groups at VLAN 20 was $n20, now is $n23, but should be back to $n20"
5333446dcd7SPetr Machata
5343446dcd7SPetr Machata	log_test "$CFG: port_vlan: isolation of port and per-VLAN ngroups"
5353446dcd7SPetr Machata}
5363446dcd7SPetr Machata
5373446dcd7SPetr Machatatest_8021qvs_ngroups_cross_vlan_cfg4()
5383446dcd7SPetr Machata{
5393446dcd7SPetr Machata	test_ngroups_cross_vlan cfg4
5403446dcd7SPetr Machata}
5413446dcd7SPetr Machata
5423446dcd7SPetr Machatatest_8021qvs_ngroups_cross_vlan_ctl4()
5433446dcd7SPetr Machata{
5443446dcd7SPetr Machata	test_ngroups_cross_vlan ctl4
5453446dcd7SPetr Machata}
5463446dcd7SPetr Machata
5473446dcd7SPetr Machatatest_8021qvs_ngroups_cross_vlan_cfg6()
5483446dcd7SPetr Machata{
5493446dcd7SPetr Machata	test_ngroups_cross_vlan cfg6
5503446dcd7SPetr Machata}
5513446dcd7SPetr Machata
5523446dcd7SPetr Machatatest_8021qvs_ngroups_cross_vlan_ctl6()
5533446dcd7SPetr Machata{
5543446dcd7SPetr Machata	test_ngroups_cross_vlan ctl6
5553446dcd7SPetr Machata}
5563446dcd7SPetr Machata
5573446dcd7SPetr Machatatest_maxgroups_zero()
5583446dcd7SPetr Machata{
5593446dcd7SPetr Machata	local CFG=$1; shift
5603446dcd7SPetr Machata	local context=$1; shift
5613446dcd7SPetr Machata	local locus=$1; shift
5623446dcd7SPetr Machata
5633446dcd7SPetr Machata	RET=0
5643446dcd7SPetr Machata	local max
5653446dcd7SPetr Machata
5663446dcd7SPetr Machata	max=$(bridge_${context}_maxgroups_get "$locus")
5673446dcd7SPetr Machata	((max == 0))
5683446dcd7SPetr Machata	check_err $? "Max groups on $locus should be 0, but $max reported"
5693446dcd7SPetr Machata
5703446dcd7SPetr Machata	bridge_${context}_maxgroups_set "$locus" 100
5713446dcd7SPetr Machata	check_err $? "Failed to set max to 100"
5723446dcd7SPetr Machata	max=$(bridge_${context}_maxgroups_get "$locus")
5733446dcd7SPetr Machata	((max == 100))
5743446dcd7SPetr Machata	check_err $? "Max groups expected to be 100, but $max reported"
5753446dcd7SPetr Machata
5763446dcd7SPetr Machata	bridge_${context}_maxgroups_set "$locus" 0
5773446dcd7SPetr Machata	check_err $? "Couldn't set maximum to 0"
5783446dcd7SPetr Machata
5793446dcd7SPetr Machata	# Test that setting 0 explicitly still serves as infinity.
5803446dcd7SPetr Machata	${CFG}_entries_add "$locus" temp 5
5813446dcd7SPetr Machata	check_err $? "Adding 5 MDB entries failed but should have passed"
5823446dcd7SPetr Machata	${CFG}_entries_del "$locus" temp 5
5833446dcd7SPetr Machata	check_err $? "Couldn't delete MDB entries"
5843446dcd7SPetr Machata
5853446dcd7SPetr Machata	log_test "$CFG: $context maxgroups: reporting and treatment of 0"
5863446dcd7SPetr Machata}
5873446dcd7SPetr Machata
5883446dcd7SPetr Machatatest_8021d_maxgroups_zero_cfg4()
5893446dcd7SPetr Machata{
5903446dcd7SPetr Machata	test_maxgroups_zero cfg4 port "dev $swp1"
5913446dcd7SPetr Machata}
5923446dcd7SPetr Machata
5933446dcd7SPetr Machatatest_8021d_maxgroups_zero_ctl4()
5943446dcd7SPetr Machata{
5953446dcd7SPetr Machata	test_maxgroups_zero ctl4 port "dev $swp1"
5963446dcd7SPetr Machata}
5973446dcd7SPetr Machata
5983446dcd7SPetr Machatatest_8021d_maxgroups_zero_cfg6()
5993446dcd7SPetr Machata{
6003446dcd7SPetr Machata	test_maxgroups_zero cfg6 port "dev $swp1"
6013446dcd7SPetr Machata}
6023446dcd7SPetr Machata
6033446dcd7SPetr Machatatest_8021d_maxgroups_zero_ctl6()
6043446dcd7SPetr Machata{
6053446dcd7SPetr Machata	test_maxgroups_zero ctl6 port "dev $swp1"
6063446dcd7SPetr Machata}
6073446dcd7SPetr Machata
6083446dcd7SPetr Machatatest_8021q_maxgroups_zero_cfg4()
6093446dcd7SPetr Machata{
6103446dcd7SPetr Machata	test_maxgroups_zero cfg4 port "dev $swp1 vid 10"
6113446dcd7SPetr Machata}
6123446dcd7SPetr Machata
6133446dcd7SPetr Machatatest_8021q_maxgroups_zero_ctl4()
6143446dcd7SPetr Machata{
6153446dcd7SPetr Machata	test_maxgroups_zero ctl4 port "dev $swp1 vid 10"
6163446dcd7SPetr Machata}
6173446dcd7SPetr Machata
6183446dcd7SPetr Machatatest_8021q_maxgroups_zero_cfg6()
6193446dcd7SPetr Machata{
6203446dcd7SPetr Machata	test_maxgroups_zero cfg6 port "dev $swp1 vid 10"
6213446dcd7SPetr Machata}
6223446dcd7SPetr Machata
6233446dcd7SPetr Machatatest_8021q_maxgroups_zero_ctl6()
6243446dcd7SPetr Machata{
6253446dcd7SPetr Machata	test_maxgroups_zero ctl6 port "dev $swp1 vid 10"
6263446dcd7SPetr Machata}
6273446dcd7SPetr Machata
6283446dcd7SPetr Machatatest_8021qvs_maxgroups_zero_cfg4()
6293446dcd7SPetr Machata{
6303446dcd7SPetr Machata	test_maxgroups_zero cfg4 port_vlan "dev $swp1 vid 10"
6313446dcd7SPetr Machata}
6323446dcd7SPetr Machata
6333446dcd7SPetr Machatatest_8021qvs_maxgroups_zero_ctl4()
6343446dcd7SPetr Machata{
6353446dcd7SPetr Machata	test_maxgroups_zero ctl4 port_vlan "dev $swp1 vid 10"
6363446dcd7SPetr Machata}
6373446dcd7SPetr Machata
6383446dcd7SPetr Machatatest_8021qvs_maxgroups_zero_cfg6()
6393446dcd7SPetr Machata{
6403446dcd7SPetr Machata	test_maxgroups_zero cfg6 port_vlan "dev $swp1 vid 10"
6413446dcd7SPetr Machata}
6423446dcd7SPetr Machata
6433446dcd7SPetr Machatatest_8021qvs_maxgroups_zero_ctl6()
6443446dcd7SPetr Machata{
6453446dcd7SPetr Machata	test_maxgroups_zero ctl6 port_vlan "dev $swp1 vid 10"
6463446dcd7SPetr Machata}
6473446dcd7SPetr Machata
6483446dcd7SPetr Machatatest_maxgroups_zero_cross_vlan()
6493446dcd7SPetr Machata{
6503446dcd7SPetr Machata	local CFG=$1; shift
6513446dcd7SPetr Machata
6523446dcd7SPetr Machata	local locus0="dev $swp1"
6533446dcd7SPetr Machata	local locus1="dev $swp1 vid 10"
6543446dcd7SPetr Machata	local locus2="dev $swp1 vid 20"
6553446dcd7SPetr Machata	local max
6563446dcd7SPetr Machata
6573446dcd7SPetr Machata	RET=0
6583446dcd7SPetr Machata
6593446dcd7SPetr Machata	bridge_port_vlan_maxgroups_set "$locus1" 100
6603446dcd7SPetr Machata	check_err $? "$locus1: Failed to set max to 100"
6613446dcd7SPetr Machata
6623446dcd7SPetr Machata	max=$(bridge_port_maxgroups_get "$locus0")
6633446dcd7SPetr Machata	((max == 0))
6643446dcd7SPetr Machata	check_err $? "$locus0: Max groups expected to be 0, but $max reported"
6653446dcd7SPetr Machata
6663446dcd7SPetr Machata	max=$(bridge_port_vlan_maxgroups_get "$locus2")
6673446dcd7SPetr Machata	((max == 0))
6683446dcd7SPetr Machata	check_err $? "$locus2: Max groups expected to be 0, but $max reported"
6693446dcd7SPetr Machata
6703446dcd7SPetr Machata	bridge_port_vlan_maxgroups_set "$locus2" 100
6713446dcd7SPetr Machata	check_err $? "$locus2: Failed to set max to 100"
6723446dcd7SPetr Machata
6733446dcd7SPetr Machata	max=$(bridge_port_maxgroups_get "$locus0")
6743446dcd7SPetr Machata	((max == 0))
6753446dcd7SPetr Machata	check_err $? "$locus0: Max groups expected to be 0, but $max reported"
6763446dcd7SPetr Machata
6773446dcd7SPetr Machata	max=$(bridge_port_vlan_maxgroups_get "$locus2")
6783446dcd7SPetr Machata	((max == 100))
6793446dcd7SPetr Machata	check_err $? "$locus2: Max groups expected to be 100, but $max reported"
6803446dcd7SPetr Machata
6813446dcd7SPetr Machata	bridge_port_maxgroups_set "$locus0" 100
6823446dcd7SPetr Machata	check_err $? "$locus0: Failed to set max to 100"
6833446dcd7SPetr Machata
6843446dcd7SPetr Machata	max=$(bridge_port_maxgroups_get "$locus0")
6853446dcd7SPetr Machata	((max == 100))
6863446dcd7SPetr Machata	check_err $? "$locus0: Max groups expected to be 100, but $max reported"
6873446dcd7SPetr Machata
6883446dcd7SPetr Machata	max=$(bridge_port_vlan_maxgroups_get "$locus2")
6893446dcd7SPetr Machata	((max == 100))
6903446dcd7SPetr Machata	check_err $? "$locus2: Max groups expected to be 100, but $max reported"
6913446dcd7SPetr Machata
6923446dcd7SPetr Machata	bridge_port_vlan_maxgroups_set "$locus1" 0
6933446dcd7SPetr Machata	check_err $? "$locus1: Failed to set max to 0"
6943446dcd7SPetr Machata
6953446dcd7SPetr Machata	max=$(bridge_port_maxgroups_get "$locus0")
6963446dcd7SPetr Machata	((max == 100))
6973446dcd7SPetr Machata	check_err $? "$locus0: Max groups expected to be 100, but $max reported"
6983446dcd7SPetr Machata
6993446dcd7SPetr Machata	max=$(bridge_port_vlan_maxgroups_get "$locus2")
7003446dcd7SPetr Machata	((max == 100))
7013446dcd7SPetr Machata	check_err $? "$locus2: Max groups expected to be 100, but $max reported"
7023446dcd7SPetr Machata
7033446dcd7SPetr Machata	bridge_port_vlan_maxgroups_set "$locus2" 0
7043446dcd7SPetr Machata	check_err $? "$locus2: Failed to set max to 0"
7053446dcd7SPetr Machata
7063446dcd7SPetr Machata	max=$(bridge_port_maxgroups_get "$locus0")
7073446dcd7SPetr Machata	((max == 100))
7083446dcd7SPetr Machata	check_err $? "$locus0: Max groups expected to be 100, but $max reported"
7093446dcd7SPetr Machata
7103446dcd7SPetr Machata	max=$(bridge_port_vlan_maxgroups_get "$locus2")
7113446dcd7SPetr Machata	((max == 0))
7123446dcd7SPetr Machata	check_err $? "$locus2: Max groups expected to be 0 but $max reported"
7133446dcd7SPetr Machata
7143446dcd7SPetr Machata	bridge_port_maxgroups_set "$locus0" 0
7153446dcd7SPetr Machata	check_err $? "$locus0: Failed to set max to 0"
7163446dcd7SPetr Machata
7173446dcd7SPetr Machata	max=$(bridge_port_maxgroups_get "$locus0")
7183446dcd7SPetr Machata	((max == 0))
7193446dcd7SPetr Machata	check_err $? "$locus0: Max groups expected to be 0, but $max reported"
7203446dcd7SPetr Machata
7213446dcd7SPetr Machata	max=$(bridge_port_vlan_maxgroups_get "$locus2")
7223446dcd7SPetr Machata	((max == 0))
7233446dcd7SPetr Machata	check_err $? "$locus2: Max groups expected to be 0, but $max reported"
7243446dcd7SPetr Machata
7253446dcd7SPetr Machata	log_test "$CFG: port_vlan maxgroups: isolation of port and per-VLAN maximums"
7263446dcd7SPetr Machata}
7273446dcd7SPetr Machata
7283446dcd7SPetr Machatatest_8021qvs_maxgroups_zero_cross_vlan_cfg4()
7293446dcd7SPetr Machata{
7303446dcd7SPetr Machata	test_maxgroups_zero_cross_vlan cfg4
7313446dcd7SPetr Machata}
7323446dcd7SPetr Machata
7333446dcd7SPetr Machatatest_8021qvs_maxgroups_zero_cross_vlan_ctl4()
7343446dcd7SPetr Machata{
7353446dcd7SPetr Machata	test_maxgroups_zero_cross_vlan ctl4
7363446dcd7SPetr Machata}
7373446dcd7SPetr Machata
7383446dcd7SPetr Machatatest_8021qvs_maxgroups_zero_cross_vlan_cfg6()
7393446dcd7SPetr Machata{
7403446dcd7SPetr Machata	test_maxgroups_zero_cross_vlan cfg6
7413446dcd7SPetr Machata}
7423446dcd7SPetr Machata
7433446dcd7SPetr Machatatest_8021qvs_maxgroups_zero_cross_vlan_ctl6()
7443446dcd7SPetr Machata{
7453446dcd7SPetr Machata	test_maxgroups_zero_cross_vlan ctl6
7463446dcd7SPetr Machata}
7473446dcd7SPetr Machata
7483446dcd7SPetr Machatatest_maxgroups_too_low()
7493446dcd7SPetr Machata{
7503446dcd7SPetr Machata	local CFG=$1; shift
7513446dcd7SPetr Machata	local context=$1; shift
7523446dcd7SPetr Machata	local locus=$1; shift
7533446dcd7SPetr Machata
7543446dcd7SPetr Machata	RET=0
7553446dcd7SPetr Machata
7563446dcd7SPetr Machata	local n=$(bridge_${context}_ngroups_get "$locus")
7573446dcd7SPetr Machata	local msg
7583446dcd7SPetr Machata
7593446dcd7SPetr Machata	${CFG}_entries_add "$locus" temp 5 111
7603446dcd7SPetr Machata	check_err $? "$locus: Couldn't add MDB entries"
7613446dcd7SPetr Machata
7623446dcd7SPetr Machata	bridge_${context}_maxgroups_set "$locus" $((n+2))
7633446dcd7SPetr Machata	check_err $? "$locus: Setting maxgroups to $((n+2)) failed"
7643446dcd7SPetr Machata
7653446dcd7SPetr Machata	msg=$(${CFG}_entries_add "$locus" temp 2 112 2>&1)
7663446dcd7SPetr Machata	check_fail $? "$locus: Adding more entries passed when max<n"
7673446dcd7SPetr Machata	bridge_maxgroups_errmsg_check_cfg "$msg"
7683446dcd7SPetr Machata
7693446dcd7SPetr Machata	${CFG}_entries_del "$locus" temp 5 111
7703446dcd7SPetr Machata	check_err $? "$locus: Couldn't delete MDB entries"
7713446dcd7SPetr Machata
7723446dcd7SPetr Machata	${CFG}_entries_add "$locus" temp 2 112
7733446dcd7SPetr Machata	check_err $? "$locus: Adding more entries failed"
7743446dcd7SPetr Machata
7753446dcd7SPetr Machata	${CFG}_entries_del "$locus" temp 2 112
7763446dcd7SPetr Machata	check_err $? "$locus: Deleting more entries failed"
7773446dcd7SPetr Machata
7783446dcd7SPetr Machata	bridge_${context}_maxgroups_set "$locus" 0
7793446dcd7SPetr Machata	check_err $? "$locus: Couldn't set maximum to 0"
7803446dcd7SPetr Machata
7813446dcd7SPetr Machata	log_test "$CFG: $context maxgroups: configure below ngroups"
7823446dcd7SPetr Machata}
7833446dcd7SPetr Machata
7843446dcd7SPetr Machatatest_8021d_maxgroups_too_low_cfg4()
7853446dcd7SPetr Machata{
7863446dcd7SPetr Machata	test_maxgroups_too_low cfg4 port "dev $swp1"
7873446dcd7SPetr Machata}
7883446dcd7SPetr Machata
7893446dcd7SPetr Machatatest_8021d_maxgroups_too_low_ctl4()
7903446dcd7SPetr Machata{
7913446dcd7SPetr Machata	test_maxgroups_too_low ctl4 port "dev $swp1"
7923446dcd7SPetr Machata}
7933446dcd7SPetr Machata
7943446dcd7SPetr Machatatest_8021d_maxgroups_too_low_cfg6()
7953446dcd7SPetr Machata{
7963446dcd7SPetr Machata	test_maxgroups_too_low cfg6 port "dev $swp1"
7973446dcd7SPetr Machata}
7983446dcd7SPetr Machata
7993446dcd7SPetr Machatatest_8021d_maxgroups_too_low_ctl6()
8003446dcd7SPetr Machata{
8013446dcd7SPetr Machata	test_maxgroups_too_low ctl6 port "dev $swp1"
8023446dcd7SPetr Machata}
8033446dcd7SPetr Machata
8043446dcd7SPetr Machatatest_8021q_maxgroups_too_low_cfg4()
8053446dcd7SPetr Machata{
8063446dcd7SPetr Machata	test_maxgroups_too_low cfg4 port "dev $swp1 vid 10"
8073446dcd7SPetr Machata}
8083446dcd7SPetr Machata
8093446dcd7SPetr Machatatest_8021q_maxgroups_too_low_ctl4()
8103446dcd7SPetr Machata{
8113446dcd7SPetr Machata	test_maxgroups_too_low ctl4 port "dev $swp1 vid 10"
8123446dcd7SPetr Machata}
8133446dcd7SPetr Machata
8143446dcd7SPetr Machatatest_8021q_maxgroups_too_low_cfg6()
8153446dcd7SPetr Machata{
8163446dcd7SPetr Machata	test_maxgroups_too_low cfg6 port "dev $swp1 vid 10"
8173446dcd7SPetr Machata}
8183446dcd7SPetr Machata
8193446dcd7SPetr Machatatest_8021q_maxgroups_too_low_ctl6()
8203446dcd7SPetr Machata{
8213446dcd7SPetr Machata	test_maxgroups_too_low ctl6 port "dev $swp1 vid 10"
8223446dcd7SPetr Machata}
8233446dcd7SPetr Machata
8243446dcd7SPetr Machatatest_8021qvs_maxgroups_too_low_cfg4()
8253446dcd7SPetr Machata{
8263446dcd7SPetr Machata	test_maxgroups_too_low cfg4 port_vlan "dev $swp1 vid 10"
8273446dcd7SPetr Machata}
8283446dcd7SPetr Machata
8293446dcd7SPetr Machatatest_8021qvs_maxgroups_too_low_ctl4()
8303446dcd7SPetr Machata{
8313446dcd7SPetr Machata	test_maxgroups_too_low ctl4 port_vlan "dev $swp1 vid 10"
8323446dcd7SPetr Machata}
8333446dcd7SPetr Machata
8343446dcd7SPetr Machatatest_8021qvs_maxgroups_too_low_cfg6()
8353446dcd7SPetr Machata{
8363446dcd7SPetr Machata	test_maxgroups_too_low cfg6 port_vlan "dev $swp1 vid 10"
8373446dcd7SPetr Machata}
8383446dcd7SPetr Machata
8393446dcd7SPetr Machatatest_8021qvs_maxgroups_too_low_ctl6()
8403446dcd7SPetr Machata{
8413446dcd7SPetr Machata	test_maxgroups_too_low ctl6 port_vlan "dev $swp1 vid 10"
8423446dcd7SPetr Machata}
8433446dcd7SPetr Machata
8443446dcd7SPetr Machatatest_maxgroups_too_many_entries()
8453446dcd7SPetr Machata{
8463446dcd7SPetr Machata	local CFG=$1; shift
8473446dcd7SPetr Machata	local context=$1; shift
8483446dcd7SPetr Machata	local locus=$1; shift
8493446dcd7SPetr Machata
8503446dcd7SPetr Machata	RET=0
8513446dcd7SPetr Machata
8523446dcd7SPetr Machata	local n=$(bridge_${context}_ngroups_get "$locus")
8533446dcd7SPetr Machata	local msg
8543446dcd7SPetr Machata
8553446dcd7SPetr Machata	# Configure a low maximum
8563446dcd7SPetr Machata	bridge_${context}_maxgroups_set "$locus" $((n+1))
8573446dcd7SPetr Machata	check_err $? "$locus: Couldn't set maximum"
8583446dcd7SPetr Machata
8593446dcd7SPetr Machata	# Try to add more entries than the configured maximum
8603446dcd7SPetr Machata	msg=$(${CFG}_entries_add "$locus" temp 5 2>&1)
8613446dcd7SPetr Machata	check_fail $? "Adding 5 MDB entries passed, but should have failed"
8623446dcd7SPetr Machata	bridge_maxgroups_errmsg_check_${CFG} "$msg"
8633446dcd7SPetr Machata
8643446dcd7SPetr Machata	# When adding entries through the control path, as many as possible
8653446dcd7SPetr Machata	# get created. That's consistent with the mcast_hash_max behavior.
8663446dcd7SPetr Machata	# So there, drop the entries explicitly.
8673446dcd7SPetr Machata	if [[ ${CFG%[46]} == ctl ]]; then
8683446dcd7SPetr Machata		${CFG}_entries_del "$locus" temp 17 2>&1
8693446dcd7SPetr Machata	fi
8703446dcd7SPetr Machata
8713446dcd7SPetr Machata	local n2=$(bridge_${context}_ngroups_get "$locus")
8723446dcd7SPetr Machata	((n2 == n))
8733446dcd7SPetr Machata	check_err $? "Number of groups was $n, but after a failed attempt to add MDB entries it changed to $n2"
8743446dcd7SPetr Machata
8753446dcd7SPetr Machata	bridge_${context}_maxgroups_set "$locus" 0
8763446dcd7SPetr Machata	check_err $? "$locus: Couldn't set maximum to 0"
8773446dcd7SPetr Machata
8783446dcd7SPetr Machata	log_test "$CFG: $context maxgroups: add too many MDB entries"
8793446dcd7SPetr Machata}
8803446dcd7SPetr Machata
8813446dcd7SPetr Machatatest_8021d_maxgroups_too_many_entries_cfg4()
8823446dcd7SPetr Machata{
8833446dcd7SPetr Machata	test_maxgroups_too_many_entries cfg4 port "dev $swp1"
8843446dcd7SPetr Machata}
8853446dcd7SPetr Machata
8863446dcd7SPetr Machatatest_8021d_maxgroups_too_many_entries_ctl4()
8873446dcd7SPetr Machata{
8883446dcd7SPetr Machata	test_maxgroups_too_many_entries ctl4 port "dev $swp1"
8893446dcd7SPetr Machata}
8903446dcd7SPetr Machata
8913446dcd7SPetr Machatatest_8021d_maxgroups_too_many_entries_cfg6()
8923446dcd7SPetr Machata{
8933446dcd7SPetr Machata	test_maxgroups_too_many_entries cfg6 port "dev $swp1"
8943446dcd7SPetr Machata}
8953446dcd7SPetr Machata
8963446dcd7SPetr Machatatest_8021d_maxgroups_too_many_entries_ctl6()
8973446dcd7SPetr Machata{
8983446dcd7SPetr Machata	test_maxgroups_too_many_entries ctl6 port "dev $swp1"
8993446dcd7SPetr Machata}
9003446dcd7SPetr Machata
9013446dcd7SPetr Machatatest_8021q_maxgroups_too_many_entries_cfg4()
9023446dcd7SPetr Machata{
9033446dcd7SPetr Machata	test_maxgroups_too_many_entries cfg4 port "dev $swp1 vid 10"
9043446dcd7SPetr Machata}
9053446dcd7SPetr Machata
9063446dcd7SPetr Machatatest_8021q_maxgroups_too_many_entries_ctl4()
9073446dcd7SPetr Machata{
9083446dcd7SPetr Machata	test_maxgroups_too_many_entries ctl4 port "dev $swp1 vid 10"
9093446dcd7SPetr Machata}
9103446dcd7SPetr Machata
9113446dcd7SPetr Machatatest_8021q_maxgroups_too_many_entries_cfg6()
9123446dcd7SPetr Machata{
9133446dcd7SPetr Machata	test_maxgroups_too_many_entries cfg6 port "dev $swp1 vid 10"
9143446dcd7SPetr Machata}
9153446dcd7SPetr Machata
9163446dcd7SPetr Machatatest_8021q_maxgroups_too_many_entries_ctl6()
9173446dcd7SPetr Machata{
9183446dcd7SPetr Machata	test_maxgroups_too_many_entries ctl6 port "dev $swp1 vid 10"
9193446dcd7SPetr Machata}
9203446dcd7SPetr Machata
9213446dcd7SPetr Machatatest_8021qvs_maxgroups_too_many_entries_cfg4()
9223446dcd7SPetr Machata{
9233446dcd7SPetr Machata	test_maxgroups_too_many_entries cfg4 port_vlan "dev $swp1 vid 10"
9243446dcd7SPetr Machata}
9253446dcd7SPetr Machata
9263446dcd7SPetr Machatatest_8021qvs_maxgroups_too_many_entries_ctl4()
9273446dcd7SPetr Machata{
9283446dcd7SPetr Machata	test_maxgroups_too_many_entries ctl4 port_vlan "dev $swp1 vid 10"
9293446dcd7SPetr Machata}
9303446dcd7SPetr Machata
9313446dcd7SPetr Machatatest_8021qvs_maxgroups_too_many_entries_cfg6()
9323446dcd7SPetr Machata{
9333446dcd7SPetr Machata	test_maxgroups_too_many_entries cfg6 port_vlan "dev $swp1 vid 10"
9343446dcd7SPetr Machata}
9353446dcd7SPetr Machata
9363446dcd7SPetr Machatatest_8021qvs_maxgroups_too_many_entries_ctl6()
9373446dcd7SPetr Machata{
9383446dcd7SPetr Machata	test_maxgroups_too_many_entries ctl6 port_vlan "dev $swp1 vid 10"
9393446dcd7SPetr Machata}
9403446dcd7SPetr Machata
9413446dcd7SPetr Machatatest_maxgroups_too_many_cross_vlan()
9423446dcd7SPetr Machata{
9433446dcd7SPetr Machata	local CFG=$1; shift
9443446dcd7SPetr Machata
9453446dcd7SPetr Machata	RET=0
9463446dcd7SPetr Machata
9473446dcd7SPetr Machata	local locus0="dev $swp1"
9483446dcd7SPetr Machata	local locus1="dev $swp1 vid 10"
9493446dcd7SPetr Machata	local locus2="dev $swp1 vid 20"
9503446dcd7SPetr Machata	local n1=$(bridge_port_vlan_ngroups_get "$locus1")
9513446dcd7SPetr Machata	local n2=$(bridge_port_vlan_ngroups_get "$locus2")
9523446dcd7SPetr Machata	local msg
9533446dcd7SPetr Machata
9543446dcd7SPetr Machata	if ((n1 > n2)); then
9553446dcd7SPetr Machata		local tmp=$n1
9563446dcd7SPetr Machata		n1=$n2
9573446dcd7SPetr Machata		n2=$tmp
9583446dcd7SPetr Machata
9593446dcd7SPetr Machata		tmp="$locus1"
9603446dcd7SPetr Machata		locus1="$locus2"
9613446dcd7SPetr Machata		locus2="$tmp"
9623446dcd7SPetr Machata	fi
9633446dcd7SPetr Machata
9643446dcd7SPetr Machata	# Now 0 <= n1 <= n2.
9653446dcd7SPetr Machata	${CFG}_entries_add "$locus2" temp 5 112
9663446dcd7SPetr Machata	check_err $? "Couldn't add 5 entries"
9673446dcd7SPetr Machata
9683446dcd7SPetr Machata	n2=$(bridge_port_vlan_ngroups_get "$locus2")
9693446dcd7SPetr Machata	# Now 0 <= n1 < n2-1.
9703446dcd7SPetr Machata
9713446dcd7SPetr Machata	# Setting locus1'maxgroups to n2-1 should pass. The number is
9723446dcd7SPetr Machata	# smaller than both the absolute number of MDB entries, and in
9733446dcd7SPetr Machata	# particular than number of locus2's number of entries, but it is
9743446dcd7SPetr Machata	# large enough to cover locus1's entries. Thus we check that
9753446dcd7SPetr Machata	# individual VLAN's ngroups are independent.
9763446dcd7SPetr Machata	bridge_port_vlan_maxgroups_set "$locus1" $((n2-1))
9773446dcd7SPetr Machata	check_err $? "Setting ${locus1}'s maxgroups to $((n2-1)) failed"
9783446dcd7SPetr Machata
9793446dcd7SPetr Machata	msg=$(${CFG}_entries_add "$locus1" temp $n2 111 2>&1)
9803446dcd7SPetr Machata	check_fail $? "$locus1: Adding $n2 MDB entries passed, but should have failed"
9813446dcd7SPetr Machata	bridge_maxgroups_errmsg_check_${CFG} "$msg"
9823446dcd7SPetr Machata
9833446dcd7SPetr Machata	bridge_port_maxgroups_set "$locus0" $((n1 + n2 + 2))
9843446dcd7SPetr Machata	check_err $? "$locus0: Couldn't set maximum"
9853446dcd7SPetr Machata
9863446dcd7SPetr Machata	msg=$(${CFG}_entries_add "$locus1" temp 5 111 2>&1)
9873446dcd7SPetr Machata	check_fail $? "$locus1: Adding 5 MDB entries passed, but should have failed"
9883446dcd7SPetr Machata	bridge_maxgroups_errmsg_check_${CFG} "$msg"
9893446dcd7SPetr Machata
9903446dcd7SPetr Machata	# IGMP/MLD packets can cause several entries to be added, before
9913446dcd7SPetr Machata	# the maximum is hit and the rest is then bounced. Remove what was
9923446dcd7SPetr Machata	# committed, if anything.
9933446dcd7SPetr Machata	${CFG}_entries_del "$locus1" temp 5 111 2>/dev/null
9943446dcd7SPetr Machata
9953446dcd7SPetr Machata	${CFG}_entries_add "$locus1" temp 2 111
9963446dcd7SPetr Machata	check_err $? "$locus1: Adding 2 MDB entries failed, but should have passed"
9973446dcd7SPetr Machata
9983446dcd7SPetr Machata	${CFG}_entries_del "$locus1" temp 2 111
9993446dcd7SPetr Machata	check_err $? "Couldn't delete MDB entries"
10003446dcd7SPetr Machata
10013446dcd7SPetr Machata	${CFG}_entries_del "$locus2" temp 5 112
10023446dcd7SPetr Machata	check_err $? "Couldn't delete MDB entries"
10033446dcd7SPetr Machata
10043446dcd7SPetr Machata	bridge_port_vlan_maxgroups_set "$locus1" 0
10053446dcd7SPetr Machata	check_err $? "$locus1: Couldn't set maximum to 0"
10063446dcd7SPetr Machata
10073446dcd7SPetr Machata	bridge_port_maxgroups_set "$locus0" 0
10083446dcd7SPetr Machata	check_err $? "$locus0: Couldn't set maximum to 0"
10093446dcd7SPetr Machata
10103446dcd7SPetr Machata	log_test "$CFG: port_vlan maxgroups: isolation of port and per-VLAN ngroups"
10113446dcd7SPetr Machata}
10123446dcd7SPetr Machata
10133446dcd7SPetr Machatatest_8021qvs_maxgroups_too_many_cross_vlan_cfg4()
10143446dcd7SPetr Machata{
10153446dcd7SPetr Machata	test_maxgroups_too_many_cross_vlan cfg4
10163446dcd7SPetr Machata}
10173446dcd7SPetr Machata
10183446dcd7SPetr Machatatest_8021qvs_maxgroups_too_many_cross_vlan_ctl4()
10193446dcd7SPetr Machata{
10203446dcd7SPetr Machata	test_maxgroups_too_many_cross_vlan ctl4
10213446dcd7SPetr Machata}
10223446dcd7SPetr Machata
10233446dcd7SPetr Machatatest_8021qvs_maxgroups_too_many_cross_vlan_cfg6()
10243446dcd7SPetr Machata{
10253446dcd7SPetr Machata	test_maxgroups_too_many_cross_vlan cfg6
10263446dcd7SPetr Machata}
10273446dcd7SPetr Machata
10283446dcd7SPetr Machatatest_8021qvs_maxgroups_too_many_cross_vlan_ctl6()
10293446dcd7SPetr Machata{
10303446dcd7SPetr Machata	test_maxgroups_too_many_cross_vlan ctl6
10313446dcd7SPetr Machata}
10323446dcd7SPetr Machata
10333446dcd7SPetr Machatatest_vlan_attributes()
10343446dcd7SPetr Machata{
10353446dcd7SPetr Machata	local locus=$1; shift
10363446dcd7SPetr Machata	local expect=$1; shift
10373446dcd7SPetr Machata
10383446dcd7SPetr Machata	RET=0
10393446dcd7SPetr Machata
10403446dcd7SPetr Machata	local max=$(bridge_port_vlan_maxgroups_get "$locus")
10413446dcd7SPetr Machata	local n=$(bridge_port_vlan_ngroups_get "$locus")
10423446dcd7SPetr Machata
10433446dcd7SPetr Machata	eval "[[ $max $expect ]]"
10443446dcd7SPetr Machata	check_err $? "$locus: maxgroups attribute expected to be $expect, but was $max"
10453446dcd7SPetr Machata
10463446dcd7SPetr Machata	eval "[[ $n $expect ]]"
10473446dcd7SPetr Machata	check_err $? "$locus: ngroups attribute expected to be $expect, but was $n"
10483446dcd7SPetr Machata
10493446dcd7SPetr Machata	log_test "port_vlan: presence of ngroups and maxgroups attributes"
10503446dcd7SPetr Machata}
10513446dcd7SPetr Machata
10523446dcd7SPetr Machatatest_8021q_vlan_attributes()
10533446dcd7SPetr Machata{
10543446dcd7SPetr Machata	test_vlan_attributes "dev $swp1 vid 10" "== null"
10553446dcd7SPetr Machata}
10563446dcd7SPetr Machata
10573446dcd7SPetr Machatatest_8021qvs_vlan_attributes()
10583446dcd7SPetr Machata{
10593446dcd7SPetr Machata	test_vlan_attributes "dev $swp1 vid 10" "-ge 0"
10603446dcd7SPetr Machata}
10613446dcd7SPetr Machata
10623446dcd7SPetr Machatatest_toggle_vlan_snooping()
10633446dcd7SPetr Machata{
10643446dcd7SPetr Machata	local mode=$1; shift
10653446dcd7SPetr Machata
10663446dcd7SPetr Machata	RET=0
10673446dcd7SPetr Machata
10683446dcd7SPetr Machata	local CFG=cfg4
10693446dcd7SPetr Machata	local context=port_vlan
10703446dcd7SPetr Machata	local locus="dev $swp1 vid 10"
10713446dcd7SPetr Machata
10723446dcd7SPetr Machata	${CFG}_entries_add "$locus" $mode 5
10733446dcd7SPetr Machata	check_err $? "Couldn't add MDB entries"
10743446dcd7SPetr Machata
10753446dcd7SPetr Machata	bridge_${context}_maxgroups_set "$locus" 100
10763446dcd7SPetr Machata	check_err $? "Failed to set max to 100"
10773446dcd7SPetr Machata
10783446dcd7SPetr Machata	ip link set dev br0 type bridge mcast_vlan_snooping 0
10793446dcd7SPetr Machata	sleep 1
10803446dcd7SPetr Machata	ip link set dev br0 type bridge mcast_vlan_snooping 1
10813446dcd7SPetr Machata
10823446dcd7SPetr Machata	local n=$(bridge_${context}_ngroups_get "$locus")
10833446dcd7SPetr Machata	local nn=$(bridge mdb show dev br0 | grep $swp1 | wc -l)
10843446dcd7SPetr Machata	((nn == n))
10853446dcd7SPetr Machata	check_err $? "mcast_n_groups expected to be $nn, but $n reported"
10863446dcd7SPetr Machata
10873446dcd7SPetr Machata	local max=$(bridge_${context}_maxgroups_get "$locus")
10883446dcd7SPetr Machata	((max == 100))
10893446dcd7SPetr Machata	check_err $? "Max groups expected to be 100 but $max reported"
10903446dcd7SPetr Machata
10913446dcd7SPetr Machata	bridge_${context}_maxgroups_set "$locus" 0
10923446dcd7SPetr Machata	check_err $? "Failed to set max to 0"
10933446dcd7SPetr Machata
10943446dcd7SPetr Machata	log_test "$CFG: $context: $mode: mcast_vlan_snooping toggle"
10953446dcd7SPetr Machata}
10963446dcd7SPetr Machata
10973446dcd7SPetr Machatatest_toggle_vlan_snooping_temp()
10983446dcd7SPetr Machata{
10993446dcd7SPetr Machata	test_toggle_vlan_snooping temp
11003446dcd7SPetr Machata}
11013446dcd7SPetr Machata
11023446dcd7SPetr Machatatest_toggle_vlan_snooping_permanent()
11033446dcd7SPetr Machata{
11043446dcd7SPetr Machata	test_toggle_vlan_snooping permanent
11053446dcd7SPetr Machata}
11063446dcd7SPetr Machata
11073446dcd7SPetr Machata# ngroup test suites
11083446dcd7SPetr Machata
11093446dcd7SPetr Machatatest_8021d_ngroups_cfg4()
11103446dcd7SPetr Machata{
11113446dcd7SPetr Machata	test_8021d_ngroups_reporting_cfg4
11123446dcd7SPetr Machata}
11133446dcd7SPetr Machata
11143446dcd7SPetr Machatatest_8021d_ngroups_ctl4()
11153446dcd7SPetr Machata{
11163446dcd7SPetr Machata	test_8021d_ngroups_reporting_ctl4
11173446dcd7SPetr Machata}
11183446dcd7SPetr Machata
11193446dcd7SPetr Machatatest_8021d_ngroups_cfg6()
11203446dcd7SPetr Machata{
11213446dcd7SPetr Machata	test_8021d_ngroups_reporting_cfg6
11223446dcd7SPetr Machata}
11233446dcd7SPetr Machata
11243446dcd7SPetr Machatatest_8021d_ngroups_ctl6()
11253446dcd7SPetr Machata{
11263446dcd7SPetr Machata	test_8021d_ngroups_reporting_ctl6
11273446dcd7SPetr Machata}
11283446dcd7SPetr Machata
11293446dcd7SPetr Machatatest_8021q_ngroups_cfg4()
11303446dcd7SPetr Machata{
11313446dcd7SPetr Machata	test_8021q_ngroups_reporting_cfg4
11323446dcd7SPetr Machata}
11333446dcd7SPetr Machata
11343446dcd7SPetr Machatatest_8021q_ngroups_ctl4()
11353446dcd7SPetr Machata{
11363446dcd7SPetr Machata	test_8021q_ngroups_reporting_ctl4
11373446dcd7SPetr Machata}
11383446dcd7SPetr Machata
11393446dcd7SPetr Machatatest_8021q_ngroups_cfg6()
11403446dcd7SPetr Machata{
11413446dcd7SPetr Machata	test_8021q_ngroups_reporting_cfg6
11423446dcd7SPetr Machata}
11433446dcd7SPetr Machata
11443446dcd7SPetr Machatatest_8021q_ngroups_ctl6()
11453446dcd7SPetr Machata{
11463446dcd7SPetr Machata	test_8021q_ngroups_reporting_ctl6
11473446dcd7SPetr Machata}
11483446dcd7SPetr Machata
11493446dcd7SPetr Machatatest_8021qvs_ngroups_cfg4()
11503446dcd7SPetr Machata{
11513446dcd7SPetr Machata	test_8021qvs_ngroups_reporting_cfg4
11523446dcd7SPetr Machata	test_8021qvs_ngroups_cross_vlan_cfg4
11533446dcd7SPetr Machata}
11543446dcd7SPetr Machata
11553446dcd7SPetr Machatatest_8021qvs_ngroups_ctl4()
11563446dcd7SPetr Machata{
11573446dcd7SPetr Machata	test_8021qvs_ngroups_reporting_ctl4
11583446dcd7SPetr Machata	test_8021qvs_ngroups_cross_vlan_ctl4
11593446dcd7SPetr Machata}
11603446dcd7SPetr Machata
11613446dcd7SPetr Machatatest_8021qvs_ngroups_cfg6()
11623446dcd7SPetr Machata{
11633446dcd7SPetr Machata	test_8021qvs_ngroups_reporting_cfg6
11643446dcd7SPetr Machata	test_8021qvs_ngroups_cross_vlan_cfg6
11653446dcd7SPetr Machata}
11663446dcd7SPetr Machata
11673446dcd7SPetr Machatatest_8021qvs_ngroups_ctl6()
11683446dcd7SPetr Machata{
11693446dcd7SPetr Machata	test_8021qvs_ngroups_reporting_ctl6
11703446dcd7SPetr Machata	test_8021qvs_ngroups_cross_vlan_ctl6
11713446dcd7SPetr Machata}
11723446dcd7SPetr Machata
11733446dcd7SPetr Machata# maxgroups test suites
11743446dcd7SPetr Machata
11753446dcd7SPetr Machatatest_8021d_maxgroups_cfg4()
11763446dcd7SPetr Machata{
11773446dcd7SPetr Machata	test_8021d_maxgroups_zero_cfg4
11783446dcd7SPetr Machata	test_8021d_maxgroups_too_low_cfg4
11793446dcd7SPetr Machata	test_8021d_maxgroups_too_many_entries_cfg4
11803446dcd7SPetr Machata}
11813446dcd7SPetr Machata
11823446dcd7SPetr Machatatest_8021d_maxgroups_ctl4()
11833446dcd7SPetr Machata{
11843446dcd7SPetr Machata	test_8021d_maxgroups_zero_ctl4
11853446dcd7SPetr Machata	test_8021d_maxgroups_too_low_ctl4
11863446dcd7SPetr Machata	test_8021d_maxgroups_too_many_entries_ctl4
11873446dcd7SPetr Machata}
11883446dcd7SPetr Machata
11893446dcd7SPetr Machatatest_8021d_maxgroups_cfg6()
11903446dcd7SPetr Machata{
11913446dcd7SPetr Machata	test_8021d_maxgroups_zero_cfg6
11923446dcd7SPetr Machata	test_8021d_maxgroups_too_low_cfg6
11933446dcd7SPetr Machata	test_8021d_maxgroups_too_many_entries_cfg6
11943446dcd7SPetr Machata}
11953446dcd7SPetr Machata
11963446dcd7SPetr Machatatest_8021d_maxgroups_ctl6()
11973446dcd7SPetr Machata{
11983446dcd7SPetr Machata	test_8021d_maxgroups_zero_ctl6
11993446dcd7SPetr Machata	test_8021d_maxgroups_too_low_ctl6
12003446dcd7SPetr Machata	test_8021d_maxgroups_too_many_entries_ctl6
12013446dcd7SPetr Machata}
12023446dcd7SPetr Machata
12033446dcd7SPetr Machatatest_8021q_maxgroups_cfg4()
12043446dcd7SPetr Machata{
12053446dcd7SPetr Machata	test_8021q_maxgroups_zero_cfg4
12063446dcd7SPetr Machata	test_8021q_maxgroups_too_low_cfg4
12073446dcd7SPetr Machata	test_8021q_maxgroups_too_many_entries_cfg4
12083446dcd7SPetr Machata}
12093446dcd7SPetr Machata
12103446dcd7SPetr Machatatest_8021q_maxgroups_ctl4()
12113446dcd7SPetr Machata{
12123446dcd7SPetr Machata	test_8021q_maxgroups_zero_ctl4
12133446dcd7SPetr Machata	test_8021q_maxgroups_too_low_ctl4
12143446dcd7SPetr Machata	test_8021q_maxgroups_too_many_entries_ctl4
12153446dcd7SPetr Machata}
12163446dcd7SPetr Machata
12173446dcd7SPetr Machatatest_8021q_maxgroups_cfg6()
12183446dcd7SPetr Machata{
12193446dcd7SPetr Machata	test_8021q_maxgroups_zero_cfg6
12203446dcd7SPetr Machata	test_8021q_maxgroups_too_low_cfg6
12213446dcd7SPetr Machata	test_8021q_maxgroups_too_many_entries_cfg6
12223446dcd7SPetr Machata}
12233446dcd7SPetr Machata
12243446dcd7SPetr Machatatest_8021q_maxgroups_ctl6()
12253446dcd7SPetr Machata{
12263446dcd7SPetr Machata	test_8021q_maxgroups_zero_ctl6
12273446dcd7SPetr Machata	test_8021q_maxgroups_too_low_ctl6
12283446dcd7SPetr Machata	test_8021q_maxgroups_too_many_entries_ctl6
12293446dcd7SPetr Machata}
12303446dcd7SPetr Machata
12313446dcd7SPetr Machatatest_8021qvs_maxgroups_cfg4()
12323446dcd7SPetr Machata{
12333446dcd7SPetr Machata	test_8021qvs_maxgroups_zero_cfg4
12343446dcd7SPetr Machata	test_8021qvs_maxgroups_zero_cross_vlan_cfg4
12353446dcd7SPetr Machata	test_8021qvs_maxgroups_too_low_cfg4
12363446dcd7SPetr Machata	test_8021qvs_maxgroups_too_many_entries_cfg4
12373446dcd7SPetr Machata	test_8021qvs_maxgroups_too_many_cross_vlan_cfg4
12383446dcd7SPetr Machata}
12393446dcd7SPetr Machata
12403446dcd7SPetr Machatatest_8021qvs_maxgroups_ctl4()
12413446dcd7SPetr Machata{
12423446dcd7SPetr Machata	test_8021qvs_maxgroups_zero_ctl4
12433446dcd7SPetr Machata	test_8021qvs_maxgroups_zero_cross_vlan_ctl4
12443446dcd7SPetr Machata	test_8021qvs_maxgroups_too_low_ctl4
12453446dcd7SPetr Machata	test_8021qvs_maxgroups_too_many_entries_ctl4
12463446dcd7SPetr Machata	test_8021qvs_maxgroups_too_many_cross_vlan_ctl4
12473446dcd7SPetr Machata}
12483446dcd7SPetr Machata
12493446dcd7SPetr Machatatest_8021qvs_maxgroups_cfg6()
12503446dcd7SPetr Machata{
12513446dcd7SPetr Machata	test_8021qvs_maxgroups_zero_cfg6
12523446dcd7SPetr Machata	test_8021qvs_maxgroups_zero_cross_vlan_cfg6
12533446dcd7SPetr Machata	test_8021qvs_maxgroups_too_low_cfg6
12543446dcd7SPetr Machata	test_8021qvs_maxgroups_too_many_entries_cfg6
12553446dcd7SPetr Machata	test_8021qvs_maxgroups_too_many_cross_vlan_cfg6
12563446dcd7SPetr Machata}
12573446dcd7SPetr Machata
12583446dcd7SPetr Machatatest_8021qvs_maxgroups_ctl6()
12593446dcd7SPetr Machata{
12603446dcd7SPetr Machata	test_8021qvs_maxgroups_zero_ctl6
12613446dcd7SPetr Machata	test_8021qvs_maxgroups_zero_cross_vlan_ctl6
12623446dcd7SPetr Machata	test_8021qvs_maxgroups_too_low_ctl6
12633446dcd7SPetr Machata	test_8021qvs_maxgroups_too_many_entries_ctl6
12643446dcd7SPetr Machata	test_8021qvs_maxgroups_too_many_cross_vlan_ctl6
12653446dcd7SPetr Machata}
12663446dcd7SPetr Machata
12673446dcd7SPetr Machata# other test suites
12683446dcd7SPetr Machata
12693446dcd7SPetr Machatatest_8021qvs_toggle_vlan_snooping()
12703446dcd7SPetr Machata{
12713446dcd7SPetr Machata	test_toggle_vlan_snooping_temp
12723446dcd7SPetr Machata	test_toggle_vlan_snooping_permanent
12733446dcd7SPetr Machata}
12743446dcd7SPetr Machata
12753446dcd7SPetr Machata# test groups
12763446dcd7SPetr Machata
12773446dcd7SPetr Machatatest_8021d()
12783446dcd7SPetr Machata{
12793446dcd7SPetr Machata	# Tests for vlan_filtering 0 mcast_vlan_snooping 0.
12803446dcd7SPetr Machata
12813446dcd7SPetr Machata	switch_create_8021d
12823446dcd7SPetr Machata	setup_wait
12833446dcd7SPetr Machata
12843446dcd7SPetr Machata	test_8021d_ngroups_cfg4
12853446dcd7SPetr Machata	test_8021d_ngroups_ctl4
12863446dcd7SPetr Machata	test_8021d_ngroups_cfg6
12873446dcd7SPetr Machata	test_8021d_ngroups_ctl6
12883446dcd7SPetr Machata	test_8021d_maxgroups_cfg4
12893446dcd7SPetr Machata	test_8021d_maxgroups_ctl4
12903446dcd7SPetr Machata	test_8021d_maxgroups_cfg6
12913446dcd7SPetr Machata	test_8021d_maxgroups_ctl6
12923446dcd7SPetr Machata
12933446dcd7SPetr Machata	switch_destroy
12943446dcd7SPetr Machata}
12953446dcd7SPetr Machata
12963446dcd7SPetr Machatatest_8021q()
12973446dcd7SPetr Machata{
12983446dcd7SPetr Machata	# Tests for vlan_filtering 1 mcast_vlan_snooping 0.
12993446dcd7SPetr Machata
13003446dcd7SPetr Machata	switch_create_8021q
13013446dcd7SPetr Machata	setup_wait
13023446dcd7SPetr Machata
13033446dcd7SPetr Machata	test_8021q_vlan_attributes
13043446dcd7SPetr Machata	test_8021q_ngroups_cfg4
13053446dcd7SPetr Machata	test_8021q_ngroups_ctl4
13063446dcd7SPetr Machata	test_8021q_ngroups_cfg6
13073446dcd7SPetr Machata	test_8021q_ngroups_ctl6
13083446dcd7SPetr Machata	test_8021q_maxgroups_cfg4
13093446dcd7SPetr Machata	test_8021q_maxgroups_ctl4
13103446dcd7SPetr Machata	test_8021q_maxgroups_cfg6
13113446dcd7SPetr Machata	test_8021q_maxgroups_ctl6
13123446dcd7SPetr Machata
13133446dcd7SPetr Machata	switch_destroy
13143446dcd7SPetr Machata}
13153446dcd7SPetr Machata
13163446dcd7SPetr Machatatest_8021qvs()
13173446dcd7SPetr Machata{
13183446dcd7SPetr Machata	# Tests for vlan_filtering 1 mcast_vlan_snooping 1.
13193446dcd7SPetr Machata
13203446dcd7SPetr Machata	switch_create_8021qvs
13213446dcd7SPetr Machata	setup_wait
13223446dcd7SPetr Machata
13233446dcd7SPetr Machata	test_8021qvs_vlan_attributes
13243446dcd7SPetr Machata	test_8021qvs_ngroups_cfg4
13253446dcd7SPetr Machata	test_8021qvs_ngroups_ctl4
13263446dcd7SPetr Machata	test_8021qvs_ngroups_cfg6
13273446dcd7SPetr Machata	test_8021qvs_ngroups_ctl6
13283446dcd7SPetr Machata	test_8021qvs_maxgroups_cfg4
13293446dcd7SPetr Machata	test_8021qvs_maxgroups_ctl4
13303446dcd7SPetr Machata	test_8021qvs_maxgroups_cfg6
13313446dcd7SPetr Machata	test_8021qvs_maxgroups_ctl6
13323446dcd7SPetr Machata	test_8021qvs_toggle_vlan_snooping
13333446dcd7SPetr Machata
13343446dcd7SPetr Machata	switch_destroy
13353446dcd7SPetr Machata}
13363446dcd7SPetr Machata
13376bdf3d97SIdo Schimmelif ! bridge link help 2>&1 | grep -q "mcast_max_groups"; then
13386bdf3d97SIdo Schimmel	echo "SKIP: iproute2 too old, missing bridge \"mcast_max_groups\" support"
13396bdf3d97SIdo Schimmel	exit $ksft_skip
13406bdf3d97SIdo Schimmelfi
13416bdf3d97SIdo Schimmel
13423446dcd7SPetr Machatatrap cleanup EXIT
13433446dcd7SPetr Machata
13443446dcd7SPetr Machatasetup_prepare
13453446dcd7SPetr Machatatests_run
13463446dcd7SPetr Machata
13473446dcd7SPetr Machataexit $EXIT_STATUS
1348