Back to home page

OSCL-LXR

 
 

    


0001 #!/bin/bash
0002 # SPDX-License-Identifier: GPL-2.0
0003 
0004 ALL_TESTS="v2reportleave_test v3include_test v3inc_allow_test v3inc_is_include_test \
0005            v3inc_is_exclude_test v3inc_to_exclude_test v3exc_allow_test v3exc_is_include_test \
0006            v3exc_is_exclude_test v3exc_to_exclude_test v3inc_block_test v3exc_block_test \
0007            v3exc_timeout_test v3star_ex_auto_add_test"
0008 NUM_NETIFS=4
0009 CHECK_TC="yes"
0010 TEST_GROUP="239.10.10.10"
0011 TEST_GROUP_MAC="01:00:5e:0a:0a:0a"
0012 
0013 ALL_GROUP="224.0.0.1"
0014 ALL_MAC="01:00:5e:00:00:01"
0015 
0016 # IGMPv3 is_in report: grp 239.10.10.10 is_include 192.0.2.1,192.0.2.2,192.0.2.3
0017 MZPKT_IS_INC="22:00:9d:de:00:00:00:01:01:00:00:03:ef:0a:0a:0a:c0:00:02:01:c0:00:02:02:c0:00:02:03"
0018 # IGMPv3 is_in report: grp 239.10.10.10 is_include 192.0.2.10,192.0.2.11,192.0.2.12
0019 MZPKT_IS_INC2="22:00:9d:c3:00:00:00:01:01:00:00:03:ef:0a:0a:0a:c0:00:02:0a:c0:00:02:0b:c0:00:02:0c"
0020 # IGMPv3 is_in report: grp 239.10.10.10 is_include 192.0.2.20,192.0.2.30
0021 MZPKT_IS_INC3="22:00:5f:b4:00:00:00:01:01:00:00:02:ef:0a:0a:0a:c0:00:02:14:c0:00:02:1e"
0022 # IGMPv3 allow report: grp 239.10.10.10 allow 192.0.2.10,192.0.2.11,192.0.2.12
0023 MZPKT_ALLOW="22:00:99:c3:00:00:00:01:05:00:00:03:ef:0a:0a:0a:c0:00:02:0a:c0:00:02:0b:c0:00:02:0c"
0024 # IGMPv3 allow report: grp 239.10.10.10 allow 192.0.2.20,192.0.2.30
0025 MZPKT_ALLOW2="22:00:5b:b4:00:00:00:01:05:00:00:02:ef:0a:0a:0a:c0:00:02:14:c0:00:02:1e"
0026 # IGMPv3 is_ex report: grp 239.10.10.10 is_exclude 192.0.2.1,192.0.2.2,192.0.2.20,192.0.2.21
0027 MZPKT_IS_EXC="22:00:da:b6:00:00:00:01:02:00:00:04:ef:0a:0a:0a:c0:00:02:01:c0:00:02:02:c0:00:02:14:c0:00:02:15"
0028 # IGMPv3 is_ex report: grp 239.10.10.10 is_exclude 192.0.2.20,192.0.2.30
0029 MZPKT_IS_EXC2="22:00:5e:b4:00:00:00:01:02:00:00:02:ef:0a:0a:0a:c0:00:02:14:c0:00:02:1e"
0030 # IGMPv3 to_ex report: grp 239.10.10.10 to_exclude 192.0.2.1,192.0.2.20,192.0.2.30
0031 MZPKT_TO_EXC="22:00:9a:b1:00:00:00:01:04:00:00:03:ef:0a:0a:0a:c0:00:02:01:c0:00:02:14:c0:00:02:1e"
0032 # IGMPv3 block report: grp 239.10.10.10 block 192.0.2.1,192.0.2.20,192.0.2.30
0033 MZPKT_BLOCK="22:00:98:b1:00:00:00:01:06:00:00:03:ef:0a:0a:0a:c0:00:02:01:c0:00:02:14:c0:00:02:1e"
0034 
0035 source lib.sh
0036 
0037 h1_create()
0038 {
0039         simple_if_init $h1 192.0.2.1/24 2001:db8:1::1/64
0040 }
0041 
0042 h1_destroy()
0043 {
0044         simple_if_fini $h1 192.0.2.1/24 2001:db8:1::1/64
0045 }
0046 
0047 h2_create()
0048 {
0049         simple_if_init $h2 192.0.2.2/24 2001:db8:1::2/64
0050 }
0051 
0052 h2_destroy()
0053 {
0054         simple_if_fini $h2 192.0.2.2/24 2001:db8:1::2/64
0055 }
0056 
0057 switch_create()
0058 {
0059         ip link add dev br0 type bridge mcast_snooping 1 mcast_querier 1
0060 
0061         ip link set dev $swp1 master br0
0062         ip link set dev $swp2 master br0
0063 
0064         ip link set dev br0 up
0065         ip link set dev $swp1 up
0066         ip link set dev $swp2 up
0067 }
0068 
0069 switch_destroy()
0070 {
0071         ip link set dev $swp2 down
0072         ip link set dev $swp1 down
0073 
0074         ip link del dev br0
0075 }
0076 
0077 setup_prepare()
0078 {
0079         h1=${NETIFS[p1]}
0080         swp1=${NETIFS[p2]}
0081 
0082         swp2=${NETIFS[p3]}
0083         h2=${NETIFS[p4]}
0084 
0085         vrf_prepare
0086 
0087         h1_create
0088         h2_create
0089 
0090         switch_create
0091 }
0092 
0093 cleanup()
0094 {
0095         pre_cleanup
0096 
0097         switch_destroy
0098 
0099         # Always cleanup the mcast group
0100         ip address del dev $h2 $TEST_GROUP/32 2>&1 1>/dev/null
0101 
0102         h2_destroy
0103         h1_destroy
0104 
0105         vrf_cleanup
0106 }
0107 
0108 v2reportleave_test()
0109 {
0110         RET=0
0111         ip address add dev $h2 $TEST_GROUP/32 autojoin
0112         check_err $? "Could not join $TEST_GROUP"
0113 
0114         sleep 5
0115         bridge mdb show dev br0 | grep $TEST_GROUP 1>/dev/null
0116         check_err $? "IGMPv2 report didn't create mdb entry for $TEST_GROUP"
0117 
0118         mcast_packet_test $TEST_GROUP_MAC 192.0.2.1 $TEST_GROUP $h1 $h2
0119         check_fail $? "Traffic to $TEST_GROUP wasn't forwarded"
0120 
0121         log_test "IGMPv2 report $TEST_GROUP"
0122 
0123         RET=0
0124         bridge mdb show dev br0 | grep $TEST_GROUP 1>/dev/null
0125         check_err $? "mdb entry for $TEST_GROUP is missing"
0126 
0127         ip address del dev $h2 $TEST_GROUP/32
0128         check_err $? "Could not leave $TEST_GROUP"
0129 
0130         sleep 5
0131         bridge mdb show dev br0 | grep $TEST_GROUP 1>/dev/null
0132         check_fail $? "Leave didn't delete mdb entry for $TEST_GROUP"
0133 
0134         mcast_packet_test $TEST_GROUP_MAC 192.0.2.1 $TEST_GROUP $h1 $h2
0135         check_err $? "Traffic to $TEST_GROUP was forwarded without mdb entry"
0136 
0137         log_test "IGMPv2 leave $TEST_GROUP"
0138 }
0139 
0140 v3include_prepare()
0141 {
0142         local host1_if=$1
0143         local mac=$2
0144         local group=$3
0145         local X=("192.0.2.1" "192.0.2.2" "192.0.2.3")
0146 
0147         ip link set dev br0 type bridge mcast_igmp_version 3
0148         check_err $? "Could not change bridge IGMP version to 3"
0149 
0150         $MZ $host1_if -b $mac -c 1 -B $group -t ip "proto=2,p=$MZPKT_IS_INC" -q
0151         sleep 1
0152         bridge -j -d -s mdb show dev br0 \
0153                 | jq -e ".[].mdb[] | \
0154                          select(.grp == \"$TEST_GROUP\" and .source_list != null)" &>/dev/null
0155         check_err $? "Missing *,G entry with source list"
0156         bridge -j -d -s mdb show dev br0 \
0157                 | jq -e ".[].mdb[] | \
0158                          select(.grp == \"$TEST_GROUP\" and \
0159                                 .source_list != null and .filter_mode == \"include\")" &>/dev/null
0160         check_err $? "Wrong *,G entry filter mode"
0161         brmcast_check_sg_entries "is_include" "${X[@]}"
0162 }
0163 
0164 v3exclude_prepare()
0165 {
0166         local host1_if=$1
0167         local mac=$2
0168         local group=$3
0169         local pkt=$4
0170         local X=("192.0.2.1" "192.0.2.2")
0171         local Y=("192.0.2.20" "192.0.2.21")
0172 
0173         v3include_prepare $host1_if $mac $group
0174 
0175         $MZ $host1_if -c 1 -b $mac -B $group -t ip "proto=2,p=$MZPKT_IS_EXC" -q
0176         sleep 1
0177         bridge -j -d -s mdb show dev br0 \
0178                 | jq -e ".[].mdb[] | \
0179                          select(.grp == \"$TEST_GROUP\" and \
0180                                 .source_list != null and .filter_mode == \"exclude\")" &>/dev/null
0181         check_err $? "Wrong *,G entry filter mode"
0182 
0183         brmcast_check_sg_entries "is_exclude" "${X[@]}" "${Y[@]}"
0184 
0185         brmcast_check_sg_state 0 "${X[@]}"
0186         brmcast_check_sg_state 1 "${Y[@]}"
0187 
0188         bridge -j -d -s mdb show dev br0 \
0189                 | jq -e ".[].mdb[] | \
0190                          select(.grp == \"$TEST_GROUP\" and \
0191                                 .source_list != null and
0192                                 .source_list[].address == \"192.0.2.3\")" &>/dev/null
0193         check_fail $? "Wrong *,G entry source list, 192.0.2.3 entry still exists"
0194 }
0195 
0196 v3cleanup()
0197 {
0198         local port=$1
0199         local group=$2
0200 
0201         bridge mdb del dev br0 port $port grp $group
0202         ip link set dev br0 type bridge mcast_igmp_version 2
0203 }
0204 
0205 v3include_test()
0206 {
0207         RET=0
0208         local X=("192.0.2.1" "192.0.2.2" "192.0.2.3")
0209 
0210         v3include_prepare $h1 $ALL_MAC $ALL_GROUP
0211 
0212         brmcast_check_sg_state 0 "${X[@]}"
0213 
0214         brmcast_check_sg_fwding 1 "${X[@]}"
0215         brmcast_check_sg_fwding 0 "192.0.2.100"
0216 
0217         log_test "IGMPv3 report $TEST_GROUP is_include"
0218 
0219         v3cleanup $swp1 $TEST_GROUP
0220 }
0221 
0222 v3inc_allow_test()
0223 {
0224         RET=0
0225         local X=("192.0.2.10" "192.0.2.11" "192.0.2.12")
0226 
0227         v3include_prepare $h1 $ALL_MAC $ALL_GROUP
0228 
0229         $MZ $h1 -c 1 -b $ALL_MAC -B $ALL_GROUP -t ip "proto=2,p=$MZPKT_ALLOW" -q
0230         sleep 1
0231         brmcast_check_sg_entries "allow" "${X[@]}"
0232 
0233         brmcast_check_sg_state 0 "${X[@]}"
0234 
0235         brmcast_check_sg_fwding 1 "${X[@]}"
0236         brmcast_check_sg_fwding 0 "192.0.2.100"
0237 
0238         log_test "IGMPv3 report $TEST_GROUP include -> allow"
0239 
0240         v3cleanup $swp1 $TEST_GROUP
0241 }
0242 
0243 v3inc_is_include_test()
0244 {
0245         RET=0
0246         local X=("192.0.2.10" "192.0.2.11" "192.0.2.12")
0247 
0248         v3include_prepare $h1 $ALL_MAC $ALL_GROUP
0249 
0250         $MZ $h1 -c 1 -b $ALL_MAC -B $ALL_GROUP -t ip "proto=2,p=$MZPKT_IS_INC2" -q
0251         sleep 1
0252         brmcast_check_sg_entries "is_include" "${X[@]}"
0253 
0254         brmcast_check_sg_state 0 "${X[@]}"
0255 
0256         brmcast_check_sg_fwding 1 "${X[@]}"
0257         brmcast_check_sg_fwding 0 "192.0.2.100"
0258 
0259         log_test "IGMPv3 report $TEST_GROUP include -> is_include"
0260 
0261         v3cleanup $swp1 $TEST_GROUP
0262 }
0263 
0264 v3inc_is_exclude_test()
0265 {
0266         RET=0
0267 
0268         v3exclude_prepare $h1 $ALL_MAC $ALL_GROUP
0269 
0270         brmcast_check_sg_fwding 1 "${X[@]}" 192.0.2.100
0271         brmcast_check_sg_fwding 0 "${Y[@]}"
0272 
0273         log_test "IGMPv3 report $TEST_GROUP include -> is_exclude"
0274 
0275         v3cleanup $swp1 $TEST_GROUP
0276 }
0277 
0278 v3inc_to_exclude_test()
0279 {
0280         RET=0
0281         local X=("192.0.2.1")
0282         local Y=("192.0.2.20" "192.0.2.30")
0283 
0284         v3include_prepare $h1 $ALL_MAC $ALL_GROUP
0285 
0286         ip link set dev br0 type bridge mcast_last_member_interval 500
0287         check_err $? "Could not change mcast_last_member_interval to 5s"
0288 
0289         $MZ $h1 -c 1 -b $ALL_MAC -B $ALL_GROUP -t ip "proto=2,p=$MZPKT_TO_EXC" -q
0290         sleep 1
0291         bridge -j -d -s mdb show dev br0 \
0292                 | jq -e ".[].mdb[] | \
0293                          select(.grp == \"$TEST_GROUP\" and \
0294                                 .source_list != null and .filter_mode == \"exclude\")" &>/dev/null
0295         check_err $? "Wrong *,G entry filter mode"
0296 
0297         brmcast_check_sg_entries "to_exclude" "${X[@]}" "${Y[@]}"
0298 
0299         brmcast_check_sg_state 0 "${X[@]}"
0300         brmcast_check_sg_state 1 "${Y[@]}"
0301 
0302         bridge -j -d -s mdb show dev br0 \
0303                 | jq -e ".[].mdb[] | \
0304                          select(.grp == \"$TEST_GROUP\" and \
0305                                 .source_list != null and
0306                                 .source_list[].address == \"192.0.2.2\")" &>/dev/null
0307         check_fail $? "Wrong *,G entry source list, 192.0.2.2 entry still exists"
0308         bridge -j -d -s mdb show dev br0 \
0309                 | jq -e ".[].mdb[] | \
0310                          select(.grp == \"$TEST_GROUP\" and \
0311                                 .source_list != null and
0312                                 .source_list[].address == \"192.0.2.21\")" &>/dev/null
0313         check_fail $? "Wrong *,G entry source list, 192.0.2.21 entry still exists"
0314 
0315         brmcast_check_sg_fwding 1 "${X[@]}" 192.0.2.100
0316         brmcast_check_sg_fwding 0 "${Y[@]}"
0317 
0318         log_test "IGMPv3 report $TEST_GROUP include -> to_exclude"
0319 
0320         ip link set dev br0 type bridge mcast_last_member_interval 100
0321 
0322         v3cleanup $swp1 $TEST_GROUP
0323 }
0324 
0325 v3exc_allow_test()
0326 {
0327         RET=0
0328         local X=("192.0.2.1" "192.0.2.2" "192.0.2.20" "192.0.2.30")
0329         local Y=("192.0.2.21")
0330 
0331         v3exclude_prepare $h1 $ALL_MAC $ALL_GROUP
0332 
0333         $MZ $h1 -c 1 -b $ALL_MAC -B $ALL_GROUP -t ip "proto=2,p=$MZPKT_ALLOW2" -q
0334         sleep 1
0335         brmcast_check_sg_entries "allow" "${X[@]}" "${Y[@]}"
0336 
0337         brmcast_check_sg_state 0 "${X[@]}"
0338         brmcast_check_sg_state 1 "${Y[@]}"
0339 
0340         brmcast_check_sg_fwding 1 "${X[@]}" 192.0.2.100
0341         brmcast_check_sg_fwding 0 "${Y[@]}"
0342 
0343         log_test "IGMPv3 report $TEST_GROUP exclude -> allow"
0344 
0345         v3cleanup $swp1 $TEST_GROUP
0346 }
0347 
0348 v3exc_is_include_test()
0349 {
0350         RET=0
0351         local X=("192.0.2.1" "192.0.2.2" "192.0.2.20" "192.0.2.30")
0352         local Y=("192.0.2.21")
0353 
0354         v3exclude_prepare $h1 $ALL_MAC $ALL_GROUP
0355 
0356         $MZ $h1 -c 1 -b $ALL_MAC -B $ALL_GROUP -t ip "proto=2,p=$MZPKT_IS_INC3" -q
0357         sleep 1
0358         brmcast_check_sg_entries "is_include" "${X[@]}" "${Y[@]}"
0359 
0360         brmcast_check_sg_state 0 "${X[@]}"
0361         brmcast_check_sg_state 1 "${Y[@]}"
0362 
0363         brmcast_check_sg_fwding 1 "${X[@]}" 192.0.2.100
0364         brmcast_check_sg_fwding 0 "${Y[@]}"
0365 
0366         log_test "IGMPv3 report $TEST_GROUP exclude -> is_include"
0367 
0368         v3cleanup $swp1 $TEST_GROUP
0369 }
0370 
0371 v3exc_is_exclude_test()
0372 {
0373         RET=0
0374         local X=("192.0.2.30")
0375         local Y=("192.0.2.20")
0376 
0377         v3exclude_prepare $h1 $ALL_MAC $ALL_GROUP
0378 
0379         $MZ $h1 -c 1 -b $ALL_MAC -B $ALL_GROUP -t ip "proto=2,p=$MZPKT_IS_EXC2" -q
0380         sleep 1
0381         brmcast_check_sg_entries "is_exclude" "${X[@]}" "${Y[@]}"
0382 
0383         brmcast_check_sg_state 0 "${X[@]}"
0384         brmcast_check_sg_state 1 "${Y[@]}"
0385 
0386         brmcast_check_sg_fwding 1 "${X[@]}" 192.0.2.100
0387         brmcast_check_sg_fwding 0 "${Y[@]}"
0388 
0389         log_test "IGMPv3 report $TEST_GROUP exclude -> is_exclude"
0390 
0391         v3cleanup $swp1 $TEST_GROUP
0392 }
0393 
0394 v3exc_to_exclude_test()
0395 {
0396         RET=0
0397         local X=("192.0.2.1" "192.0.2.30")
0398         local Y=("192.0.2.20")
0399 
0400         v3exclude_prepare $h1 $ALL_MAC $ALL_GROUP
0401 
0402         ip link set dev br0 type bridge mcast_last_member_interval 500
0403         check_err $? "Could not change mcast_last_member_interval to 5s"
0404 
0405         $MZ $h1 -c 1 -b $ALL_MAC -B $ALL_GROUP -t ip "proto=2,p=$MZPKT_TO_EXC" -q
0406         sleep 1
0407         brmcast_check_sg_entries "to_exclude" "${X[@]}" "${Y[@]}"
0408 
0409         brmcast_check_sg_state 0 "${X[@]}"
0410         brmcast_check_sg_state 1 "${Y[@]}"
0411 
0412         brmcast_check_sg_fwding 1 "${X[@]}" 192.0.2.100
0413         brmcast_check_sg_fwding 0 "${Y[@]}"
0414 
0415         log_test "IGMPv3 report $TEST_GROUP exclude -> to_exclude"
0416 
0417         ip link set dev br0 type bridge mcast_last_member_interval 100
0418 
0419         v3cleanup $swp1 $TEST_GROUP
0420 }
0421 
0422 v3inc_block_test()
0423 {
0424         RET=0
0425         local X=("192.0.2.2" "192.0.2.3")
0426 
0427         v3include_prepare $h1 $ALL_MAC $ALL_GROUP
0428 
0429         $MZ $h1 -c 1 -b $ALL_MAC -B $ALL_GROUP -t ip "proto=2,p=$MZPKT_BLOCK" -q
0430         # make sure the lowered timers have expired (by default 2 seconds)
0431         sleep 3
0432         brmcast_check_sg_entries "block" "${X[@]}"
0433 
0434         brmcast_check_sg_state 0 "${X[@]}"
0435 
0436         bridge -j -d -s mdb show dev br0 \
0437                 | jq -e ".[].mdb[] | \
0438                          select(.grp == \"$TEST_GROUP\" and \
0439                                 .source_list != null and
0440                                 .source_list[].address == \"192.0.2.1\")" &>/dev/null
0441         check_fail $? "Wrong *,G entry source list, 192.0.2.1 entry still exists"
0442 
0443         brmcast_check_sg_fwding 1 "${X[@]}"
0444         brmcast_check_sg_fwding 0 "192.0.2.100"
0445 
0446         log_test "IGMPv3 report $TEST_GROUP include -> block"
0447 
0448         v3cleanup $swp1 $TEST_GROUP
0449 }
0450 
0451 v3exc_block_test()
0452 {
0453         RET=0
0454         local X=("192.0.2.1" "192.0.2.2" "192.0.2.30")
0455         local Y=("192.0.2.20" "192.0.2.21")
0456 
0457         v3exclude_prepare $h1 $ALL_MAC $ALL_GROUP
0458 
0459         ip link set dev br0 type bridge mcast_last_member_interval 500
0460         check_err $? "Could not change mcast_last_member_interval to 5s"
0461 
0462         $MZ $h1 -c 1 -b $ALL_MAC -B $ALL_GROUP -t ip "proto=2,p=$MZPKT_BLOCK" -q
0463         sleep 1
0464         brmcast_check_sg_entries "block" "${X[@]}" "${Y[@]}"
0465 
0466         brmcast_check_sg_state 0 "${X[@]}"
0467         brmcast_check_sg_state 1 "${Y[@]}"
0468 
0469         brmcast_check_sg_fwding 1 "${X[@]}" 192.0.2.100
0470         brmcast_check_sg_fwding 0 "${Y[@]}"
0471 
0472         log_test "IGMPv3 report $TEST_GROUP exclude -> block"
0473 
0474         ip link set dev br0 type bridge mcast_last_member_interval 100
0475 
0476         v3cleanup $swp1 $TEST_GROUP
0477 }
0478 
0479 v3exc_timeout_test()
0480 {
0481         RET=0
0482         local X=("192.0.2.20" "192.0.2.30")
0483 
0484         # GMI should be 3 seconds
0485         ip link set dev br0 type bridge mcast_query_interval 100 \
0486                                         mcast_query_response_interval 100 \
0487                                         mcast_membership_interval 300
0488 
0489         v3exclude_prepare $h1 $ALL_MAC $ALL_GROUP
0490         ip link set dev br0 type bridge mcast_query_interval 500 \
0491                                         mcast_query_response_interval 500 \
0492                                         mcast_membership_interval 1500
0493 
0494         $MZ $h1 -c 1 -b $ALL_MAC -B $ALL_GROUP -t ip "proto=2,p=$MZPKT_ALLOW2" -q
0495         sleep 3
0496         bridge -j -d -s mdb show dev br0 \
0497                 | jq -e ".[].mdb[] | \
0498                          select(.grp == \"$TEST_GROUP\" and \
0499                                 .source_list != null and .filter_mode == \"include\")" &>/dev/null
0500         check_err $? "Wrong *,G entry filter mode"
0501 
0502         bridge -j -d -s mdb show dev br0 \
0503                 | jq -e ".[].mdb[] | \
0504                          select(.grp == \"$TEST_GROUP\" and \
0505                                 .source_list != null and
0506                                 .source_list[].address == \"192.0.2.1\")" &>/dev/null
0507         check_fail $? "Wrong *,G entry source list, 192.0.2.1 entry still exists"
0508         bridge -j -d -s mdb show dev br0 \
0509                 | jq -e ".[].mdb[] | \
0510                          select(.grp == \"$TEST_GROUP\" and \
0511                                 .source_list != null and
0512                                 .source_list[].address == \"192.0.2.2\")" &>/dev/null
0513         check_fail $? "Wrong *,G entry source list, 192.0.2.2 entry still exists"
0514 
0515         brmcast_check_sg_entries "allow" "${X[@]}"
0516 
0517         brmcast_check_sg_state 0 "${X[@]}"
0518 
0519         brmcast_check_sg_fwding 1 "${X[@]}"
0520         brmcast_check_sg_fwding 0 192.0.2.100
0521 
0522         log_test "IGMPv3 group $TEST_GROUP exclude timeout"
0523 
0524         ip link set dev br0 type bridge mcast_query_interval 12500 \
0525                                         mcast_query_response_interval 1000 \
0526                                         mcast_membership_interval 26000
0527 
0528         v3cleanup $swp1 $TEST_GROUP
0529 }
0530 
0531 v3star_ex_auto_add_test()
0532 {
0533         RET=0
0534 
0535         v3exclude_prepare $h1 $ALL_MAC $ALL_GROUP
0536 
0537         $MZ $h2 -c 1 -b $ALL_MAC -B $ALL_GROUP -t ip "proto=2,p=$MZPKT_IS_INC" -q
0538         sleep 1
0539         bridge -j -d -s mdb show dev br0 \
0540                 | jq -e ".[].mdb[] | \
0541                          select(.grp == \"$TEST_GROUP\" and .src == \"192.0.2.3\" and \
0542                                 .port == \"$swp1\")" &>/dev/null
0543         check_err $? "S,G entry for *,G port doesn't exist"
0544 
0545         bridge -j -d -s mdb show dev br0 \
0546                 | jq -e ".[].mdb[] | \
0547                          select(.grp == \"$TEST_GROUP\" and .src == \"192.0.2.3\" and \
0548                                 .port == \"$swp1\" and \
0549                                 .flags[] == \"added_by_star_ex\")" &>/dev/null
0550         check_err $? "Auto-added S,G entry doesn't have added_by_star_ex flag"
0551 
0552         brmcast_check_sg_fwding 1 192.0.2.3
0553 
0554         log_test "IGMPv3 S,G port entry automatic add to a *,G port"
0555 
0556         v3cleanup $swp1 $TEST_GROUP
0557         v3cleanup $swp2 $TEST_GROUP
0558 }
0559 
0560 trap cleanup EXIT
0561 
0562 setup_prepare
0563 setup_wait
0564 
0565 tests_run
0566 
0567 exit $EXIT_STATUS