| #!/bin/bash | |
| # SPDX-License-Identifier: GPL-2.0 | |
| # +-----------------------+ +------------------------+ | |
| # | H1 (vrf) | | H2 (vrf) | | |
| # | + $h1.10 | | + $h2.10 | | |
| # | | 192.0.2.1/28 | | | 192.0.2.2/28 | | |
| # | | 2001:db8:1::1/64 | | | 2001:db8:1::2/64 | | |
| # | | | | | | | |
| # | | + $h1.20 | | | + $h2.20 | | |
| # | \ | 198.51.100.1/24 | | \ | 198.51.100.2/24 | | |
| # | \ | 2001:db8:2::1/64 | | \ | 2001:db8:2::2/64 | | |
| # | \| | | \| | | |
| # | + $h1 | | + $h2 | | |
| # +----|------------------+ +----|-------------------+ | |
| # | | | |
| # +----|--------------------------------------------------|-------------------+ | |
| # | SW | | | | |
| # | +--|--------------------------------------------------|-----------------+ | | |
| # | | + $swp1 BR0 (802.1q) + $swp2 | | | |
| # | | vid 10 vid 10 | | | |
| # | | vid 20 vid 20 | | | |
| # | | | | | |
| # | +-----------------------------------------------------------------------+ | | |
| # +---------------------------------------------------------------------------+ | |
| ALL_TESTS=" | |
| test_8021d | |
| test_8021q | |
| test_8021qvs | |
| test_mdb_count_warning | |
| " | |
| NUM_NETIFS=4 | |
| source lib.sh | |
| source tc_common.sh | |
| h1_create() | |
| { | |
| simple_if_init $h1 | |
| vlan_create $h1 10 v$h1 192.0.2.1/28 2001:db8:1::1/64 | |
| vlan_create $h1 20 v$h1 198.51.100.1/24 2001:db8:2::1/64 | |
| } | |
| h1_destroy() | |
| { | |
| vlan_destroy $h1 20 | |
| vlan_destroy $h1 10 | |
| simple_if_fini $h1 | |
| } | |
| h2_create() | |
| { | |
| simple_if_init $h2 | |
| vlan_create $h2 10 v$h2 192.0.2.2/28 | |
| vlan_create $h2 20 v$h2 198.51.100.2/24 | |
| } | |
| h2_destroy() | |
| { | |
| vlan_destroy $h2 20 | |
| vlan_destroy $h2 10 | |
| simple_if_fini $h2 | |
| } | |
| switch_create_8021d() | |
| { | |
| log_info "802.1d tests" | |
| ip link add name br0 type bridge vlan_filtering 0 \ | |
| mcast_snooping 1 \ | |
| mcast_igmp_version 3 mcast_mld_version 2 | |
| ip link set dev br0 up | |
| ip link set dev $swp1 master br0 | |
| ip link set dev $swp1 up | |
| bridge link set dev $swp1 fastleave on | |
| ip link set dev $swp2 master br0 | |
| ip link set dev $swp2 up | |
| } | |
| switch_create_8021q() | |
| { | |
| local br_flags=$1; shift | |
| ip link add name br0 type bridge vlan_filtering 1 vlan_default_pvid 0 \ | |
| mcast_snooping 1 $br_flags \ | |
| mcast_igmp_version 3 mcast_mld_version 2 | |
| bridge vlan add vid 10 dev br0 self | |
| bridge vlan add vid 20 dev br0 self | |
| ip link set dev br0 up | |
| ip link set dev $swp1 master br0 | |
| ip link set dev $swp1 up | |
| bridge link set dev $swp1 fastleave on | |
| bridge vlan add vid 10 dev $swp1 | |
| bridge vlan add vid 20 dev $swp1 | |
| ip link set dev $swp2 master br0 | |
| ip link set dev $swp2 up | |
| bridge vlan add vid 10 dev $swp2 | |
| bridge vlan add vid 20 dev $swp2 | |
| } | |
| switch_create_8021qvs() | |
| { | |
| log_info "802.1q mcast_vlan_snooping 1 tests" | |
| switch_create_8021q "mcast_vlan_snooping 1" | |
| bridge vlan global set dev br0 vid 10 mcast_igmp_version 3 | |
| bridge vlan global set dev br0 vid 10 mcast_mld_version 2 | |
| bridge vlan global set dev br0 vid 20 mcast_igmp_version 3 | |
| bridge vlan global set dev br0 vid 20 mcast_mld_version 2 | |
| } | |
| switch_destroy() | |
| { | |
| ip link set dev $swp2 down | |
| ip link set dev $swp2 nomaster | |
| ip link set dev $swp1 down | |
| ip link set dev $swp1 nomaster | |
| ip link set dev br0 down | |
| ip link del dev br0 | |
| } | |
| setup_prepare() | |
| { | |
| h1=${NETIFS[p1]} | |
| swp1=${NETIFS[p2]} | |
| swp2=${NETIFS[p3]} | |
| h2=${NETIFS[p4]} | |
| vrf_prepare | |
| forwarding_enable | |
| h1_create | |
| h2_create | |
| } | |
| cleanup() | |
| { | |
| pre_cleanup | |
| switch_destroy 2>/dev/null | |
| h2_destroy | |
| h1_destroy | |
| forwarding_restore | |
| vrf_cleanup | |
| } | |
| cfg_src_list() | |
| { | |
| local IPs=("$@") | |
| local IPstr=$(echo ${IPs[@]} | tr '[:space:]' , | sed 's/,$//') | |
| echo ${IPstr:+source_list }${IPstr} | |
| } | |
| cfg_group_op() | |
| { | |
| local op=$1; shift | |
| local locus=$1; shift | |
| local GRP=$1; shift | |
| local state=$1; shift | |
| local IPs=("$@") | |
| local source_list=$(cfg_src_list ${IPs[@]}) | |
| # Everything besides `bridge mdb' uses the "dev X vid Y" syntax, | |
| # so we use it here as well and convert. | |
| local br_locus=$(echo "$locus" | sed 's/^dev /port /') | |
| bridge mdb $op dev br0 $br_locus grp $GRP $state \ | |
| filter_mode include $source_list | |
| } | |
| cfg4_entries_op() | |
| { | |
| local op=$1; shift | |
| local locus=$1; shift | |
| local state=$1; shift | |
| local n=$1; shift | |
| local grp=${1:-1}; shift | |
| local GRP=239.1.1.${grp} | |
| local IPs=$(seq -f 192.0.2.%g 1 $((n - 1))) | |
| cfg_group_op "$op" "$locus" "$GRP" "$state" ${IPs[@]} | |
| } | |
| cfg4_entries_add() | |
| { | |
| cfg4_entries_op add "$@" | |
| } | |
| cfg4_entries_del() | |
| { | |
| cfg4_entries_op del "$@" | |
| } | |
| cfg6_entries_op() | |
| { | |
| local op=$1; shift | |
| local locus=$1; shift | |
| local state=$1; shift | |
| local n=$1; shift | |
| local grp=${1:-1}; shift | |
| local GRP=ff0e::${grp} | |
| local IPs=$(printf "2001:db8:1::%x\n" $(seq 1 $((n - 1)))) | |
| cfg_group_op "$op" "$locus" "$GRP" "$state" ${IPs[@]} | |
| } | |
| cfg6_entries_add() | |
| { | |
| cfg6_entries_op add "$@" | |
| } | |
| cfg6_entries_del() | |
| { | |
| cfg6_entries_op del "$@" | |
| } | |
| locus_dev_peer() | |
| { | |
| local dev_kw=$1; shift | |
| local dev=$1; shift | |
| local vid_kw=$1; shift | |
| local vid=$1; shift | |
| echo "$h1.${vid:-10}" | |
| } | |
| locus_dev() | |
| { | |
| local dev_kw=$1; shift | |
| local dev=$1; shift | |
| echo $dev | |
| } | |
| ctl4_entries_add() | |
| { | |
| local locus=$1; shift | |
| local state=$1; shift | |
| local n=$1; shift | |
| local grp=${1:-1}; shift | |
| local IPs=$(seq -f 192.0.2.%g 1 $((n - 1))) | |
| local peer=$(locus_dev_peer $locus) | |
| local GRP=239.1.1.${grp} | |
| local dmac=01:00:5e:01:01:$(printf "%02x" $grp) | |
| $MZ $peer -a own -b $dmac -c 1 -A 192.0.2.1 -B $GRP \ | |
| -t ip proto=2,p=$(igmpv3_is_in_get $GRP $IPs) -q | |
| sleep 1 | |
| local nn=$(bridge mdb show dev br0 | grep $GRP | wc -l) | |
| if ((nn != n)); then | |
| echo mcast_max_groups > /dev/stderr | |
| false | |
| fi | |
| } | |
| ctl4_entries_del() | |
| { | |
| local locus=$1; shift | |
| local state=$1; shift | |
| local n=$1; shift | |
| local grp=${1:-1}; shift | |
| local peer=$(locus_dev_peer $locus) | |
| local GRP=239.1.1.${grp} | |
| local dmac=01:00:5e:00:00:02 | |
| $MZ $peer -a own -b $dmac -c 1 -A 192.0.2.1 -B 224.0.0.2 \ | |
| -t ip proto=2,p=$(igmpv2_leave_get $GRP) -q | |
| sleep 1 | |
| ! bridge mdb show dev br0 | grep -q $GRP | |
| } | |
| ctl6_entries_add() | |
| { | |
| local locus=$1; shift | |
| local state=$1; shift | |
| local n=$1; shift | |
| local grp=${1:-1}; shift | |
| local IPs=$(printf "2001:db8:1::%x\n" $(seq 1 $((n - 1)))) | |
| local peer=$(locus_dev_peer $locus) | |
| local SIP=fe80::1 | |
| local GRP=ff0e::${grp} | |
| local dmac=33:33:00:00:00:$(printf "%02x" $grp) | |
| local p=$(mldv2_is_in_get $SIP $GRP $IPs) | |
| $MZ -6 $peer -a own -b $dmac -c 1 -A $SIP -B $GRP \ | |
| -t ip hop=1,next=0,p="$p" -q | |
| sleep 1 | |
| local nn=$(bridge mdb show dev br0 | grep $GRP | wc -l) | |
| if ((nn != n)); then | |
| echo mcast_max_groups > /dev/stderr | |
| false | |
| fi | |
| } | |
| ctl6_entries_del() | |
| { | |
| local locus=$1; shift | |
| local state=$1; shift | |
| local n=$1; shift | |
| local grp=${1:-1}; shift | |
| local peer=$(locus_dev_peer $locus) | |
| local SIP=fe80::1 | |
| local GRP=ff0e::${grp} | |
| local dmac=33:33:00:00:00:$(printf "%02x" $grp) | |
| local p=$(mldv1_done_get $SIP $GRP) | |
| $MZ -6 $peer -a own -b $dmac -c 1 -A $SIP -B $GRP \ | |
| -t ip hop=1,next=0,p="$p" -q | |
| sleep 1 | |
| ! bridge mdb show dev br0 | grep -q $GRP | |
| } | |
| bridge_maxgroups_errmsg_check_cfg() | |
| { | |
| local msg=$1; shift | |
| local needle=$1; shift | |
| echo "$msg" | grep -q mcast_max_groups | |
| check_err $? "Adding MDB entries failed for the wrong reason: $msg" | |
| } | |
| bridge_maxgroups_errmsg_check_cfg4() | |
| { | |
| bridge_maxgroups_errmsg_check_cfg "$@" | |
| } | |
| bridge_maxgroups_errmsg_check_cfg6() | |
| { | |
| bridge_maxgroups_errmsg_check_cfg "$@" | |
| } | |
| bridge_maxgroups_errmsg_check_ctl4() | |
| { | |
| : | |
| } | |
| bridge_maxgroups_errmsg_check_ctl6() | |
| { | |
| : | |
| } | |
| bridge_port_ngroups_get() | |
| { | |
| local locus=$1; shift | |
| bridge -j -d link show $locus | | |
| jq '.[].mcast_n_groups' | |
| } | |
| bridge_port_maxgroups_get() | |
| { | |
| local locus=$1; shift | |
| bridge -j -d link show $locus | | |
| jq '.[].mcast_max_groups' | |
| } | |
| bridge_port_maxgroups_set() | |
| { | |
| local locus=$1; shift | |
| local max=$1; shift | |
| bridge link set dev $(locus_dev $locus) mcast_max_groups $max | |
| } | |
| bridge_port_vlan_ngroups_get() | |
| { | |
| local locus=$1; shift | |
| bridge -j -d vlan show $locus | | |
| jq '.[].vlans[].mcast_n_groups' | |
| } | |
| bridge_port_vlan_maxgroups_get() | |
| { | |
| local locus=$1; shift | |
| bridge -j -d vlan show $locus | | |
| jq '.[].vlans[].mcast_max_groups' | |
| } | |
| bridge_port_vlan_maxgroups_set() | |
| { | |
| local locus=$1; shift | |
| local max=$1; shift | |
| bridge vlan set $locus mcast_max_groups $max | |
| } | |
| test_ngroups_reporting() | |
| { | |
| local CFG=$1; shift | |
| local context=$1; shift | |
| local locus=$1; shift | |
| RET=0 | |
| local n0=$(bridge_${context}_ngroups_get "$locus") | |
| ${CFG}_entries_add "$locus" temp 5 | |
| check_err $? "Couldn't add MDB entries" | |
| local n1=$(bridge_${context}_ngroups_get "$locus") | |
| ((n1 == n0 + 5)) | |
| check_err $? "Number of groups was $n0, now is $n1, but $((n0 + 5)) expected" | |
| ${CFG}_entries_del "$locus" temp 5 | |
| check_err $? "Couldn't delete MDB entries" | |
| local n2=$(bridge_${context}_ngroups_get "$locus") | |
| ((n2 == n0)) | |
| check_err $? "Number of groups was $n0, now is $n2, but should be back to $n0" | |
| log_test "$CFG: $context: ngroups reporting" | |
| } | |
| test_8021d_ngroups_reporting_cfg4() | |
| { | |
| test_ngroups_reporting cfg4 port "dev $swp1" | |
| } | |
| test_8021d_ngroups_reporting_ctl4() | |
| { | |
| test_ngroups_reporting ctl4 port "dev $swp1" | |
| } | |
| test_8021d_ngroups_reporting_cfg6() | |
| { | |
| test_ngroups_reporting cfg6 port "dev $swp1" | |
| } | |
| test_8021d_ngroups_reporting_ctl6() | |
| { | |
| test_ngroups_reporting ctl6 port "dev $swp1" | |
| } | |
| test_8021q_ngroups_reporting_cfg4() | |
| { | |
| test_ngroups_reporting cfg4 port "dev $swp1 vid 10" | |
| } | |
| test_8021q_ngroups_reporting_ctl4() | |
| { | |
| test_ngroups_reporting ctl4 port "dev $swp1 vid 10" | |
| } | |
| test_8021q_ngroups_reporting_cfg6() | |
| { | |
| test_ngroups_reporting cfg6 port "dev $swp1 vid 10" | |
| } | |
| test_8021q_ngroups_reporting_ctl6() | |
| { | |
| test_ngroups_reporting ctl6 port "dev $swp1 vid 10" | |
| } | |
| test_8021qvs_ngroups_reporting_cfg4() | |
| { | |
| test_ngroups_reporting cfg4 port_vlan "dev $swp1 vid 10" | |
| } | |
| test_8021qvs_ngroups_reporting_ctl4() | |
| { | |
| test_ngroups_reporting ctl4 port_vlan "dev $swp1 vid 10" | |
| } | |
| test_8021qvs_ngroups_reporting_cfg6() | |
| { | |
| test_ngroups_reporting cfg6 port_vlan "dev $swp1 vid 10" | |
| } | |
| test_8021qvs_ngroups_reporting_ctl6() | |
| { | |
| test_ngroups_reporting ctl6 port_vlan "dev $swp1 vid 10" | |
| } | |
| test_ngroups_cross_vlan() | |
| { | |
| local CFG=$1; shift | |
| local locus1="dev $swp1 vid 10" | |
| local locus2="dev $swp1 vid 20" | |
| RET=0 | |
| local n10=$(bridge_port_vlan_ngroups_get "$locus1") | |
| local n20=$(bridge_port_vlan_ngroups_get "$locus2") | |
| ${CFG}_entries_add "$locus1" temp 5 111 | |
| check_err $? "Couldn't add MDB entries to VLAN 10" | |
| local n11=$(bridge_port_vlan_ngroups_get "$locus1") | |
| local n21=$(bridge_port_vlan_ngroups_get "$locus2") | |
| ((n11 == n10 + 5)) | |
| check_err $? "Number of groups at VLAN 10 was $n10, now is $n11, but 5 entries added on VLAN 10, $((n10 + 5)) expected" | |
| ((n21 == n20)) | |
| check_err $? "Number of groups at VLAN 20 was $n20, now is $n21, but no change expected on VLAN 20" | |
| ${CFG}_entries_add "$locus2" temp 5 112 | |
| check_err $? "Couldn't add MDB entries to VLAN 20" | |
| local n12=$(bridge_port_vlan_ngroups_get "$locus1") | |
| local n22=$(bridge_port_vlan_ngroups_get "$locus2") | |
| ((n12 == n11)) | |
| check_err $? "Number of groups at VLAN 10 was $n11, now is $n12, but no change expected on VLAN 10" | |
| ((n22 == n21 + 5)) | |
| check_err $? "Number of groups at VLAN 20 was $n21, now is $n22, but 5 entries added on VLAN 20, $((n21 + 5)) expected" | |
| ${CFG}_entries_del "$locus1" temp 5 111 | |
| check_err $? "Couldn't delete MDB entries from VLAN 10" | |
| ${CFG}_entries_del "$locus2" temp 5 112 | |
| check_err $? "Couldn't delete MDB entries from VLAN 20" | |
| local n13=$(bridge_port_vlan_ngroups_get "$locus1") | |
| local n23=$(bridge_port_vlan_ngroups_get "$locus2") | |
| ((n13 == n10)) | |
| check_err $? "Number of groups at VLAN 10 was $n10, now is $n13, but should be back to $n10" | |
| ((n23 == n20)) | |
| check_err $? "Number of groups at VLAN 20 was $n20, now is $n23, but should be back to $n20" | |
| log_test "$CFG: port_vlan: isolation of port and per-VLAN ngroups" | |
| } | |
| test_8021qvs_ngroups_cross_vlan_cfg4() | |
| { | |
| test_ngroups_cross_vlan cfg4 | |
| } | |
| test_8021qvs_ngroups_cross_vlan_ctl4() | |
| { | |
| test_ngroups_cross_vlan ctl4 | |
| } | |
| test_8021qvs_ngroups_cross_vlan_cfg6() | |
| { | |
| test_ngroups_cross_vlan cfg6 | |
| } | |
| test_8021qvs_ngroups_cross_vlan_ctl6() | |
| { | |
| test_ngroups_cross_vlan ctl6 | |
| } | |
| test_maxgroups_zero() | |
| { | |
| local CFG=$1; shift | |
| local context=$1; shift | |
| local locus=$1; shift | |
| RET=0 | |
| local max | |
| max=$(bridge_${context}_maxgroups_get "$locus") | |
| ((max == 0)) | |
| check_err $? "Max groups on $locus should be 0, but $max reported" | |
| bridge_${context}_maxgroups_set "$locus" 100 | |
| check_err $? "Failed to set max to 100" | |
| max=$(bridge_${context}_maxgroups_get "$locus") | |
| ((max == 100)) | |
| check_err $? "Max groups expected to be 100, but $max reported" | |
| bridge_${context}_maxgroups_set "$locus" 0 | |
| check_err $? "Couldn't set maximum to 0" | |
| # Test that setting 0 explicitly still serves as infinity. | |
| ${CFG}_entries_add "$locus" temp 5 | |
| check_err $? "Adding 5 MDB entries failed but should have passed" | |
| ${CFG}_entries_del "$locus" temp 5 | |
| check_err $? "Couldn't delete MDB entries" | |
| log_test "$CFG: $context maxgroups: reporting and treatment of 0" | |
| } | |
| test_8021d_maxgroups_zero_cfg4() | |
| { | |
| test_maxgroups_zero cfg4 port "dev $swp1" | |
| } | |
| test_8021d_maxgroups_zero_ctl4() | |
| { | |
| test_maxgroups_zero ctl4 port "dev $swp1" | |
| } | |
| test_8021d_maxgroups_zero_cfg6() | |
| { | |
| test_maxgroups_zero cfg6 port "dev $swp1" | |
| } | |
| test_8021d_maxgroups_zero_ctl6() | |
| { | |
| test_maxgroups_zero ctl6 port "dev $swp1" | |
| } | |
| test_8021q_maxgroups_zero_cfg4() | |
| { | |
| test_maxgroups_zero cfg4 port "dev $swp1 vid 10" | |
| } | |
| test_8021q_maxgroups_zero_ctl4() | |
| { | |
| test_maxgroups_zero ctl4 port "dev $swp1 vid 10" | |
| } | |
| test_8021q_maxgroups_zero_cfg6() | |
| { | |
| test_maxgroups_zero cfg6 port "dev $swp1 vid 10" | |
| } | |
| test_8021q_maxgroups_zero_ctl6() | |
| { | |
| test_maxgroups_zero ctl6 port "dev $swp1 vid 10" | |
| } | |
| test_8021qvs_maxgroups_zero_cfg4() | |
| { | |
| test_maxgroups_zero cfg4 port_vlan "dev $swp1 vid 10" | |
| } | |
| test_8021qvs_maxgroups_zero_ctl4() | |
| { | |
| test_maxgroups_zero ctl4 port_vlan "dev $swp1 vid 10" | |
| } | |
| test_8021qvs_maxgroups_zero_cfg6() | |
| { | |
| test_maxgroups_zero cfg6 port_vlan "dev $swp1 vid 10" | |
| } | |
| test_8021qvs_maxgroups_zero_ctl6() | |
| { | |
| test_maxgroups_zero ctl6 port_vlan "dev $swp1 vid 10" | |
| } | |
| test_maxgroups_zero_cross_vlan() | |
| { | |
| local CFG=$1; shift | |
| local locus0="dev $swp1" | |
| local locus1="dev $swp1 vid 10" | |
| local locus2="dev $swp1 vid 20" | |
| local max | |
| RET=0 | |
| bridge_port_vlan_maxgroups_set "$locus1" 100 | |
| check_err $? "$locus1: Failed to set max to 100" | |
| max=$(bridge_port_maxgroups_get "$locus0") | |
| ((max == 0)) | |
| check_err $? "$locus0: Max groups expected to be 0, but $max reported" | |
| max=$(bridge_port_vlan_maxgroups_get "$locus2") | |
| ((max == 0)) | |
| check_err $? "$locus2: Max groups expected to be 0, but $max reported" | |
| bridge_port_vlan_maxgroups_set "$locus2" 100 | |
| check_err $? "$locus2: Failed to set max to 100" | |
| max=$(bridge_port_maxgroups_get "$locus0") | |
| ((max == 0)) | |
| check_err $? "$locus0: Max groups expected to be 0, but $max reported" | |
| max=$(bridge_port_vlan_maxgroups_get "$locus2") | |
| ((max == 100)) | |
| check_err $? "$locus2: Max groups expected to be 100, but $max reported" | |
| bridge_port_maxgroups_set "$locus0" 100 | |
| check_err $? "$locus0: Failed to set max to 100" | |
| max=$(bridge_port_maxgroups_get "$locus0") | |
| ((max == 100)) | |
| check_err $? "$locus0: Max groups expected to be 100, but $max reported" | |
| max=$(bridge_port_vlan_maxgroups_get "$locus2") | |
| ((max == 100)) | |
| check_err $? "$locus2: Max groups expected to be 100, but $max reported" | |
| bridge_port_vlan_maxgroups_set "$locus1" 0 | |
| check_err $? "$locus1: Failed to set max to 0" | |
| max=$(bridge_port_maxgroups_get "$locus0") | |
| ((max == 100)) | |
| check_err $? "$locus0: Max groups expected to be 100, but $max reported" | |
| max=$(bridge_port_vlan_maxgroups_get "$locus2") | |
| ((max == 100)) | |
| check_err $? "$locus2: Max groups expected to be 100, but $max reported" | |
| bridge_port_vlan_maxgroups_set "$locus2" 0 | |
| check_err $? "$locus2: Failed to set max to 0" | |
| max=$(bridge_port_maxgroups_get "$locus0") | |
| ((max == 100)) | |
| check_err $? "$locus0: Max groups expected to be 100, but $max reported" | |
| max=$(bridge_port_vlan_maxgroups_get "$locus2") | |
| ((max == 0)) | |
| check_err $? "$locus2: Max groups expected to be 0 but $max reported" | |
| bridge_port_maxgroups_set "$locus0" 0 | |
| check_err $? "$locus0: Failed to set max to 0" | |
| max=$(bridge_port_maxgroups_get "$locus0") | |
| ((max == 0)) | |
| check_err $? "$locus0: Max groups expected to be 0, but $max reported" | |
| max=$(bridge_port_vlan_maxgroups_get "$locus2") | |
| ((max == 0)) | |
| check_err $? "$locus2: Max groups expected to be 0, but $max reported" | |
| log_test "$CFG: port_vlan maxgroups: isolation of port and per-VLAN maximums" | |
| } | |
| test_8021qvs_maxgroups_zero_cross_vlan_cfg4() | |
| { | |
| test_maxgroups_zero_cross_vlan cfg4 | |
| } | |
| test_8021qvs_maxgroups_zero_cross_vlan_ctl4() | |
| { | |
| test_maxgroups_zero_cross_vlan ctl4 | |
| } | |
| test_8021qvs_maxgroups_zero_cross_vlan_cfg6() | |
| { | |
| test_maxgroups_zero_cross_vlan cfg6 | |
| } | |
| test_8021qvs_maxgroups_zero_cross_vlan_ctl6() | |
| { | |
| test_maxgroups_zero_cross_vlan ctl6 | |
| } | |
| test_maxgroups_too_low() | |
| { | |
| local CFG=$1; shift | |
| local context=$1; shift | |
| local locus=$1; shift | |
| RET=0 | |
| local n=$(bridge_${context}_ngroups_get "$locus") | |
| local msg | |
| ${CFG}_entries_add "$locus" temp 5 111 | |
| check_err $? "$locus: Couldn't add MDB entries" | |
| bridge_${context}_maxgroups_set "$locus" $((n+2)) | |
| check_err $? "$locus: Setting maxgroups to $((n+2)) failed" | |
| msg=$(${CFG}_entries_add "$locus" temp 2 112 2>&1) | |
| check_fail $? "$locus: Adding more entries passed when max<n" | |
| bridge_maxgroups_errmsg_check_cfg "$msg" | |
| ${CFG}_entries_del "$locus" temp 5 111 | |
| check_err $? "$locus: Couldn't delete MDB entries" | |
| ${CFG}_entries_add "$locus" temp 2 112 | |
| check_err $? "$locus: Adding more entries failed" | |
| ${CFG}_entries_del "$locus" temp 2 112 | |
| check_err $? "$locus: Deleting more entries failed" | |
| bridge_${context}_maxgroups_set "$locus" 0 | |
| check_err $? "$locus: Couldn't set maximum to 0" | |
| log_test "$CFG: $context maxgroups: configure below ngroups" | |
| } | |
| test_8021d_maxgroups_too_low_cfg4() | |
| { | |
| test_maxgroups_too_low cfg4 port "dev $swp1" | |
| } | |
| test_8021d_maxgroups_too_low_ctl4() | |
| { | |
| test_maxgroups_too_low ctl4 port "dev $swp1" | |
| } | |
| test_8021d_maxgroups_too_low_cfg6() | |
| { | |
| test_maxgroups_too_low cfg6 port "dev $swp1" | |
| } | |
| test_8021d_maxgroups_too_low_ctl6() | |
| { | |
| test_maxgroups_too_low ctl6 port "dev $swp1" | |
| } | |
| test_8021q_maxgroups_too_low_cfg4() | |
| { | |
| test_maxgroups_too_low cfg4 port "dev $swp1 vid 10" | |
| } | |
| test_8021q_maxgroups_too_low_ctl4() | |
| { | |
| test_maxgroups_too_low ctl4 port "dev $swp1 vid 10" | |
| } | |
| test_8021q_maxgroups_too_low_cfg6() | |
| { | |
| test_maxgroups_too_low cfg6 port "dev $swp1 vid 10" | |
| } | |
| test_8021q_maxgroups_too_low_ctl6() | |
| { | |
| test_maxgroups_too_low ctl6 port "dev $swp1 vid 10" | |
| } | |
| test_8021qvs_maxgroups_too_low_cfg4() | |
| { | |
| test_maxgroups_too_low cfg4 port_vlan "dev $swp1 vid 10" | |
| } | |
| test_8021qvs_maxgroups_too_low_ctl4() | |
| { | |
| test_maxgroups_too_low ctl4 port_vlan "dev $swp1 vid 10" | |
| } | |
| test_8021qvs_maxgroups_too_low_cfg6() | |
| { | |
| test_maxgroups_too_low cfg6 port_vlan "dev $swp1 vid 10" | |
| } | |
| test_8021qvs_maxgroups_too_low_ctl6() | |
| { | |
| test_maxgroups_too_low ctl6 port_vlan "dev $swp1 vid 10" | |
| } | |
| test_maxgroups_too_many_entries() | |
| { | |
| local CFG=$1; shift | |
| local context=$1; shift | |
| local locus=$1; shift | |
| RET=0 | |
| local n=$(bridge_${context}_ngroups_get "$locus") | |
| local msg | |
| # Configure a low maximum | |
| bridge_${context}_maxgroups_set "$locus" $((n+1)) | |
| check_err $? "$locus: Couldn't set maximum" | |
| # Try to add more entries than the configured maximum | |
| msg=$(${CFG}_entries_add "$locus" temp 5 2>&1) | |
| check_fail $? "Adding 5 MDB entries passed, but should have failed" | |
| bridge_maxgroups_errmsg_check_${CFG} "$msg" | |
| # When adding entries through the control path, as many as possible | |
| # get created. That's consistent with the mcast_hash_max behavior. | |
| # So there, drop the entries explicitly. | |
| if [[ ${CFG%[46]} == ctl ]]; then | |
| ${CFG}_entries_del "$locus" temp 17 2>&1 | |
| fi | |
| local n2=$(bridge_${context}_ngroups_get "$locus") | |
| ((n2 == n)) | |
| check_err $? "Number of groups was $n, but after a failed attempt to add MDB entries it changed to $n2" | |
| bridge_${context}_maxgroups_set "$locus" 0 | |
| check_err $? "$locus: Couldn't set maximum to 0" | |
| log_test "$CFG: $context maxgroups: add too many MDB entries" | |
| } | |
| test_8021d_maxgroups_too_many_entries_cfg4() | |
| { | |
| test_maxgroups_too_many_entries cfg4 port "dev $swp1" | |
| } | |
| test_8021d_maxgroups_too_many_entries_ctl4() | |
| { | |
| test_maxgroups_too_many_entries ctl4 port "dev $swp1" | |
| } | |
| test_8021d_maxgroups_too_many_entries_cfg6() | |
| { | |
| test_maxgroups_too_many_entries cfg6 port "dev $swp1" | |
| } | |
| test_8021d_maxgroups_too_many_entries_ctl6() | |
| { | |
| test_maxgroups_too_many_entries ctl6 port "dev $swp1" | |
| } | |
| test_8021q_maxgroups_too_many_entries_cfg4() | |
| { | |
| test_maxgroups_too_many_entries cfg4 port "dev $swp1 vid 10" | |
| } | |
| test_8021q_maxgroups_too_many_entries_ctl4() | |
| { | |
| test_maxgroups_too_many_entries ctl4 port "dev $swp1 vid 10" | |
| } | |
| test_8021q_maxgroups_too_many_entries_cfg6() | |
| { | |
| test_maxgroups_too_many_entries cfg6 port "dev $swp1 vid 10" | |
| } | |
| test_8021q_maxgroups_too_many_entries_ctl6() | |
| { | |
| test_maxgroups_too_many_entries ctl6 port "dev $swp1 vid 10" | |
| } | |
| test_8021qvs_maxgroups_too_many_entries_cfg4() | |
| { | |
| test_maxgroups_too_many_entries cfg4 port_vlan "dev $swp1 vid 10" | |
| } | |
| test_8021qvs_maxgroups_too_many_entries_ctl4() | |
| { | |
| test_maxgroups_too_many_entries ctl4 port_vlan "dev $swp1 vid 10" | |
| } | |
| test_8021qvs_maxgroups_too_many_entries_cfg6() | |
| { | |
| test_maxgroups_too_many_entries cfg6 port_vlan "dev $swp1 vid 10" | |
| } | |
| test_8021qvs_maxgroups_too_many_entries_ctl6() | |
| { | |
| test_maxgroups_too_many_entries ctl6 port_vlan "dev $swp1 vid 10" | |
| } | |
| test_maxgroups_too_many_cross_vlan() | |
| { | |
| local CFG=$1; shift | |
| RET=0 | |
| local locus0="dev $swp1" | |
| local locus1="dev $swp1 vid 10" | |
| local locus2="dev $swp1 vid 20" | |
| local n1=$(bridge_port_vlan_ngroups_get "$locus1") | |
| local n2=$(bridge_port_vlan_ngroups_get "$locus2") | |
| local msg | |
| if ((n1 > n2)); then | |
| local tmp=$n1 | |
| n1=$n2 | |
| n2=$tmp | |
| tmp="$locus1" | |
| locus1="$locus2" | |
| locus2="$tmp" | |
| fi | |
| # Now 0 <= n1 <= n2. | |
| ${CFG}_entries_add "$locus2" temp 5 112 | |
| check_err $? "Couldn't add 5 entries" | |
| n2=$(bridge_port_vlan_ngroups_get "$locus2") | |
| # Now 0 <= n1 < n2-1. | |
| # Setting locus1'maxgroups to n2-1 should pass. The number is | |
| # smaller than both the absolute number of MDB entries, and in | |
| # particular than number of locus2's number of entries, but it is | |
| # large enough to cover locus1's entries. Thus we check that | |
| # individual VLAN's ngroups are independent. | |
| bridge_port_vlan_maxgroups_set "$locus1" $((n2-1)) | |
| check_err $? "Setting ${locus1}'s maxgroups to $((n2-1)) failed" | |
| msg=$(${CFG}_entries_add "$locus1" temp $n2 111 2>&1) | |
| check_fail $? "$locus1: Adding $n2 MDB entries passed, but should have failed" | |
| bridge_maxgroups_errmsg_check_${CFG} "$msg" | |
| bridge_port_maxgroups_set "$locus0" $((n1 + n2 + 2)) | |
| check_err $? "$locus0: Couldn't set maximum" | |
| msg=$(${CFG}_entries_add "$locus1" temp 5 111 2>&1) | |
| check_fail $? "$locus1: Adding 5 MDB entries passed, but should have failed" | |
| bridge_maxgroups_errmsg_check_${CFG} "$msg" | |
| # IGMP/MLD packets can cause several entries to be added, before | |
| # the maximum is hit and the rest is then bounced. Remove what was | |
| # committed, if anything. | |
| ${CFG}_entries_del "$locus1" temp 5 111 2>/dev/null | |
| ${CFG}_entries_add "$locus1" temp 2 111 | |
| check_err $? "$locus1: Adding 2 MDB entries failed, but should have passed" | |
| ${CFG}_entries_del "$locus1" temp 2 111 | |
| check_err $? "Couldn't delete MDB entries" | |
| ${CFG}_entries_del "$locus2" temp 5 112 | |
| check_err $? "Couldn't delete MDB entries" | |
| bridge_port_vlan_maxgroups_set "$locus1" 0 | |
| check_err $? "$locus1: Couldn't set maximum to 0" | |
| bridge_port_maxgroups_set "$locus0" 0 | |
| check_err $? "$locus0: Couldn't set maximum to 0" | |
| log_test "$CFG: port_vlan maxgroups: isolation of port and per-VLAN ngroups" | |
| } | |
| test_8021qvs_maxgroups_too_many_cross_vlan_cfg4() | |
| { | |
| test_maxgroups_too_many_cross_vlan cfg4 | |
| } | |
| test_8021qvs_maxgroups_too_many_cross_vlan_ctl4() | |
| { | |
| test_maxgroups_too_many_cross_vlan ctl4 | |
| } | |
| test_8021qvs_maxgroups_too_many_cross_vlan_cfg6() | |
| { | |
| test_maxgroups_too_many_cross_vlan cfg6 | |
| } | |
| test_8021qvs_maxgroups_too_many_cross_vlan_ctl6() | |
| { | |
| test_maxgroups_too_many_cross_vlan ctl6 | |
| } | |
| test_vlan_attributes() | |
| { | |
| local locus=$1; shift | |
| local expect=$1; shift | |
| RET=0 | |
| local max=$(bridge_port_vlan_maxgroups_get "$locus") | |
| local n=$(bridge_port_vlan_ngroups_get "$locus") | |
| eval "[[ $max $expect ]]" | |
| check_err $? "$locus: maxgroups attribute expected to be $expect, but was $max" | |
| eval "[[ $n $expect ]]" | |
| check_err $? "$locus: ngroups attribute expected to be $expect, but was $n" | |
| log_test "port_vlan: presence of ngroups and maxgroups attributes" | |
| } | |
| test_8021q_vlan_attributes() | |
| { | |
| test_vlan_attributes "dev $swp1 vid 10" "== null" | |
| } | |
| test_8021qvs_vlan_attributes() | |
| { | |
| test_vlan_attributes "dev $swp1 vid 10" "-ge 0" | |
| } | |
| test_toggle_vlan_snooping() | |
| { | |
| local mode=$1; shift | |
| RET=0 | |
| local CFG=cfg4 | |
| local context=port_vlan | |
| local locus="dev $swp1 vid 10" | |
| ${CFG}_entries_add "$locus" $mode 5 | |
| check_err $? "Couldn't add MDB entries" | |
| bridge_${context}_maxgroups_set "$locus" 100 | |
| check_err $? "Failed to set max to 100" | |
| ip link set dev br0 type bridge mcast_vlan_snooping 0 | |
| sleep 1 | |
| ip link set dev br0 type bridge mcast_vlan_snooping 1 | |
| local n=$(bridge_${context}_ngroups_get "$locus") | |
| local nn=$(bridge mdb show dev br0 | grep $swp1 | wc -l) | |
| ((nn == n)) | |
| check_err $? "mcast_n_groups expected to be $nn, but $n reported" | |
| local max=$(bridge_${context}_maxgroups_get "$locus") | |
| ((max == 100)) | |
| check_err $? "Max groups expected to be 100 but $max reported" | |
| bridge_${context}_maxgroups_set "$locus" 0 | |
| check_err $? "Failed to set max to 0" | |
| log_test "$CFG: $context: $mode: mcast_vlan_snooping toggle" | |
| } | |
| test_toggle_vlan_snooping_temp() | |
| { | |
| test_toggle_vlan_snooping temp | |
| } | |
| test_toggle_vlan_snooping_permanent() | |
| { | |
| test_toggle_vlan_snooping permanent | |
| } | |
| # ngroup test suites | |
| test_8021d_ngroups_cfg4() | |
| { | |
| test_8021d_ngroups_reporting_cfg4 | |
| } | |
| test_8021d_ngroups_ctl4() | |
| { | |
| test_8021d_ngroups_reporting_ctl4 | |
| } | |
| test_8021d_ngroups_cfg6() | |
| { | |
| test_8021d_ngroups_reporting_cfg6 | |
| } | |
| test_8021d_ngroups_ctl6() | |
| { | |
| test_8021d_ngroups_reporting_ctl6 | |
| } | |
| test_8021q_ngroups_cfg4() | |
| { | |
| test_8021q_ngroups_reporting_cfg4 | |
| } | |
| test_8021q_ngroups_ctl4() | |
| { | |
| test_8021q_ngroups_reporting_ctl4 | |
| } | |
| test_8021q_ngroups_cfg6() | |
| { | |
| test_8021q_ngroups_reporting_cfg6 | |
| } | |
| test_8021q_ngroups_ctl6() | |
| { | |
| test_8021q_ngroups_reporting_ctl6 | |
| } | |
| test_8021qvs_ngroups_cfg4() | |
| { | |
| test_8021qvs_ngroups_reporting_cfg4 | |
| test_8021qvs_ngroups_cross_vlan_cfg4 | |
| } | |
| test_8021qvs_ngroups_ctl4() | |
| { | |
| test_8021qvs_ngroups_reporting_ctl4 | |
| test_8021qvs_ngroups_cross_vlan_ctl4 | |
| } | |
| test_8021qvs_ngroups_cfg6() | |
| { | |
| test_8021qvs_ngroups_reporting_cfg6 | |
| test_8021qvs_ngroups_cross_vlan_cfg6 | |
| } | |
| test_8021qvs_ngroups_ctl6() | |
| { | |
| test_8021qvs_ngroups_reporting_ctl6 | |
| test_8021qvs_ngroups_cross_vlan_ctl6 | |
| } | |
| # maxgroups test suites | |
| test_8021d_maxgroups_cfg4() | |
| { | |
| test_8021d_maxgroups_zero_cfg4 | |
| test_8021d_maxgroups_too_low_cfg4 | |
| test_8021d_maxgroups_too_many_entries_cfg4 | |
| } | |
| test_8021d_maxgroups_ctl4() | |
| { | |
| test_8021d_maxgroups_zero_ctl4 | |
| test_8021d_maxgroups_too_low_ctl4 | |
| test_8021d_maxgroups_too_many_entries_ctl4 | |
| } | |
| test_8021d_maxgroups_cfg6() | |
| { | |
| test_8021d_maxgroups_zero_cfg6 | |
| test_8021d_maxgroups_too_low_cfg6 | |
| test_8021d_maxgroups_too_many_entries_cfg6 | |
| } | |
| test_8021d_maxgroups_ctl6() | |
| { | |
| test_8021d_maxgroups_zero_ctl6 | |
| test_8021d_maxgroups_too_low_ctl6 | |
| test_8021d_maxgroups_too_many_entries_ctl6 | |
| } | |
| test_8021q_maxgroups_cfg4() | |
| { | |
| test_8021q_maxgroups_zero_cfg4 | |
| test_8021q_maxgroups_too_low_cfg4 | |
| test_8021q_maxgroups_too_many_entries_cfg4 | |
| } | |
| test_8021q_maxgroups_ctl4() | |
| { | |
| test_8021q_maxgroups_zero_ctl4 | |
| test_8021q_maxgroups_too_low_ctl4 | |
| test_8021q_maxgroups_too_many_entries_ctl4 | |
| } | |
| test_8021q_maxgroups_cfg6() | |
| { | |
| test_8021q_maxgroups_zero_cfg6 | |
| test_8021q_maxgroups_too_low_cfg6 | |
| test_8021q_maxgroups_too_many_entries_cfg6 | |
| } | |
| test_8021q_maxgroups_ctl6() | |
| { | |
| test_8021q_maxgroups_zero_ctl6 | |
| test_8021q_maxgroups_too_low_ctl6 | |
| test_8021q_maxgroups_too_many_entries_ctl6 | |
| } | |
| test_8021qvs_maxgroups_cfg4() | |
| { | |
| test_8021qvs_maxgroups_zero_cfg4 | |
| test_8021qvs_maxgroups_zero_cross_vlan_cfg4 | |
| test_8021qvs_maxgroups_too_low_cfg4 | |
| test_8021qvs_maxgroups_too_many_entries_cfg4 | |
| test_8021qvs_maxgroups_too_many_cross_vlan_cfg4 | |
| } | |
| test_8021qvs_maxgroups_ctl4() | |
| { | |
| test_8021qvs_maxgroups_zero_ctl4 | |
| test_8021qvs_maxgroups_zero_cross_vlan_ctl4 | |
| test_8021qvs_maxgroups_too_low_ctl4 | |
| test_8021qvs_maxgroups_too_many_entries_ctl4 | |
| test_8021qvs_maxgroups_too_many_cross_vlan_ctl4 | |
| } | |
| test_8021qvs_maxgroups_cfg6() | |
| { | |
| test_8021qvs_maxgroups_zero_cfg6 | |
| test_8021qvs_maxgroups_zero_cross_vlan_cfg6 | |
| test_8021qvs_maxgroups_too_low_cfg6 | |
| test_8021qvs_maxgroups_too_many_entries_cfg6 | |
| test_8021qvs_maxgroups_too_many_cross_vlan_cfg6 | |
| } | |
| test_8021qvs_maxgroups_ctl6() | |
| { | |
| test_8021qvs_maxgroups_zero_ctl6 | |
| test_8021qvs_maxgroups_zero_cross_vlan_ctl6 | |
| test_8021qvs_maxgroups_too_low_ctl6 | |
| test_8021qvs_maxgroups_too_many_entries_ctl6 | |
| test_8021qvs_maxgroups_too_many_cross_vlan_ctl6 | |
| } | |
| # other test suites | |
| test_8021qvs_toggle_vlan_snooping() | |
| { | |
| test_toggle_vlan_snooping_temp | |
| test_toggle_vlan_snooping_permanent | |
| } | |
| mdb_count_check_warn() | |
| { | |
| local msg=$1; shift | |
| dmesg | grep -q "WARNING:.*br_multicast_port_ngroups_dec.*" | |
| check_fail $? "$msg" | |
| } | |
| test_mdb_count_mcast_vlan_snooping_flush() | |
| { | |
| RET=0 | |
| # check if we already have a warning | |
| mdb_count_check_warn "Check MDB entries count warning before test" | |
| bridge mdb add dev br0 port "$swp1" grp 239.0.0.1 permanent vid 10 | |
| ip link set dev br0 down | |
| ip link set dev br0 type bridge mcast_vlan_snooping 1 | |
| bridge mdb flush dev br0 | |
| mdb_count_check_warn "Check MDB entries count warning after test" | |
| ip link set dev br0 type bridge mcast_vlan_snooping 0 | |
| ip link set dev br0 up | |
| log_test "MDB count warning: mcast_vlan_snooping and MDB flush" | |
| } | |
| test_mdb_count_mcast_snooping_flush() | |
| { | |
| RET=0 | |
| # check if we already have a warning | |
| mdb_count_check_warn "Check MDB entries count warning before test" | |
| bridge mdb add dev br0 port "$swp1" grp 239.0.0.1 permanent vid 10 | |
| ip link set dev br0 type bridge mcast_snooping 0 | |
| ip link set dev br0 type bridge mcast_vlan_snooping 1 | |
| bridge mdb flush dev br0 | |
| mdb_count_check_warn "Check MDB entries count warning after test" | |
| ip link set dev br0 type bridge mcast_vlan_snooping 0 | |
| ip link set dev br0 type bridge mcast_snooping 1 | |
| log_test "MDB count warning: mcast_snooping and MDB flush" | |
| } | |
| test_mdb_count_vlan_state_flush() | |
| { | |
| RET=0 | |
| # check if we already have a warning | |
| mdb_count_check_warn "Check MDB entries count warning before test" | |
| bridge mdb add dev br0 port "$swp1" grp 239.0.0.1 permanent vid 10 | |
| ip link set dev br0 down | |
| bridge vlan set vid 10 dev "$swp1" state blocking | |
| ip link set dev br0 type bridge mcast_vlan_snooping 1 | |
| ip link set dev br0 up | |
| bridge mdb flush dev br0 | |
| mdb_count_check_warn "Check MDB entries count warning after test" | |
| bridge vlan set vid 10 dev "$swp1" state forwarding | |
| ip link set dev br0 type bridge mcast_vlan_snooping 0 | |
| log_test "MDB count warning: disabled vlan state and MDB flush" | |
| } | |
| # test groups | |
| test_8021d() | |
| { | |
| # Tests for vlan_filtering 0 mcast_vlan_snooping 0. | |
| switch_create_8021d | |
| setup_wait | |
| test_8021d_ngroups_cfg4 | |
| test_8021d_ngroups_ctl4 | |
| test_8021d_ngroups_cfg6 | |
| test_8021d_ngroups_ctl6 | |
| test_8021d_maxgroups_cfg4 | |
| test_8021d_maxgroups_ctl4 | |
| test_8021d_maxgroups_cfg6 | |
| test_8021d_maxgroups_ctl6 | |
| switch_destroy | |
| } | |
| test_8021q() | |
| { | |
| # Tests for vlan_filtering 1 mcast_vlan_snooping 0. | |
| log_info "802.1q tests" | |
| switch_create_8021q | |
| setup_wait | |
| test_8021q_vlan_attributes | |
| test_8021q_ngroups_cfg4 | |
| test_8021q_ngroups_ctl4 | |
| test_8021q_ngroups_cfg6 | |
| test_8021q_ngroups_ctl6 | |
| test_8021q_maxgroups_cfg4 | |
| test_8021q_maxgroups_ctl4 | |
| test_8021q_maxgroups_cfg6 | |
| test_8021q_maxgroups_ctl6 | |
| switch_destroy | |
| } | |
| test_8021qvs() | |
| { | |
| # Tests for vlan_filtering 1 mcast_vlan_snooping 1. | |
| switch_create_8021qvs | |
| setup_wait | |
| test_8021qvs_vlan_attributes | |
| test_8021qvs_ngroups_cfg4 | |
| test_8021qvs_ngroups_ctl4 | |
| test_8021qvs_ngroups_cfg6 | |
| test_8021qvs_ngroups_ctl6 | |
| test_8021qvs_maxgroups_cfg4 | |
| test_8021qvs_maxgroups_ctl4 | |
| test_8021qvs_maxgroups_cfg6 | |
| test_8021qvs_maxgroups_ctl6 | |
| test_8021qvs_toggle_vlan_snooping | |
| switch_destroy | |
| } | |
| test_mdb_count_warning() | |
| { | |
| # Tests for mdb_n_entries warning | |
| log_info "MDB count warning tests" | |
| switch_create_8021q | |
| setup_wait | |
| test_mdb_count_mcast_vlan_snooping_flush | |
| test_mdb_count_mcast_snooping_flush | |
| test_mdb_count_vlan_state_flush | |
| switch_destroy | |
| } | |
| if ! bridge link help 2>&1 | grep -q "mcast_max_groups"; then | |
| echo "SKIP: iproute2 too old, missing bridge \"mcast_max_groups\" support" | |
| exit $ksft_skip | |
| fi | |
| trap cleanup EXIT | |
| setup_prepare | |
| tests_run | |
| exit $EXIT_STATUS |