Home | History | Annotate | Line # | Download | only in if_vlan
t_vlan.sh revision 1.15
      1 #	$NetBSD: t_vlan.sh,v 1.15 2018/12/11 03:47:51 ozaki-r Exp $
      2 #
      3 # Copyright (c) 2016 Internet Initiative Japan Inc.
      4 # All rights reserved.
      5 #
      6 # Redistribution and use in source and binary forms, with or without
      7 # modification, are permitted provided that the following conditions
      8 # are met:
      9 # 1. Redistributions of source code must retain the above copyright
     10 #    notice, this list of conditions and the following disclaimer.
     11 # 2. Redistributions in binary form must reproduce the above copyright
     12 #    notice, this list of conditions and the following disclaimer in the
     13 #    documentation and/or other materials provided with the distribution.
     14 #
     15 # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     16 # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     17 # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     18 # PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     19 # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     20 # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     21 # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     22 # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     23 # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     24 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     25 # POSSIBILITY OF SUCH DAMAGE.
     26 #
     27 
     28 BUS=bus
     29 SOCK_LOCAL=unix://commsock1
     30 SOCK_REMOTE=unix://commsock2
     31 IP_LOCAL0=10.0.0.1
     32 IP_LOCAL1=10.0.1.1
     33 IP_REMOTE0=10.0.0.2
     34 IP_REMOTE1=10.0.1.2
     35 IP_MCADDR0=224.0.0.10
     36 IP6_LOCAL0=fc00:0::1
     37 IP6_LOCAL1=fc00:1::1
     38 IP6_REMOTE0=fc00:0::2
     39 IP6_REMOTE1=fc00:1::2
     40 IP6_MCADDR0=ff11::10
     41 ETH_IP_MCADDR0=01:00:5e:00:00:0a
     42 ETH_IP6_MCADDR0=33:33:00:00:00:10
     43 
     44 DEBUG=${DEBUG:-false}
     45 
     46 vlan_create_destroy_body_common()
     47 {
     48 	local atf_ifconfig="atf_check -s exit:0 rump.ifconfig"
     49 
     50 	export RUMP_SERVER=${SOCK_LOCAL}
     51 
     52 	$atf_ifconfig vlan0 create
     53 	$atf_ifconfig vlan0 destroy
     54 
     55 	$atf_ifconfig vlan0 create
     56 	$atf_ifconfig vlan0 up
     57 	$atf_ifconfig vlan0 down
     58 	$atf_ifconfig vlan0 destroy
     59 
     60 	$atf_ifconfig shmif0 create
     61 	$atf_ifconfig vlan0 create
     62 	$atf_ifconfig vlan0 vlan 1 vlanif shmif0
     63 	$atf_ifconfig vlan0 up
     64 	$atf_ifconfig vlan0 destroy
     65 
     66 	# more than one vlan interface with a same parent interface
     67 	$atf_ifconfig shmif1 create
     68 	$atf_ifconfig vlan0 create
     69 	$atf_ifconfig vlan0 vlan 10 vlanif shmif0
     70 	$atf_ifconfig vlan1 create
     71 	$atf_ifconfig vlan1 vlan 11 vlanif shmif0
     72 
     73 	# more than one interface with another parent interface
     74 	$atf_ifconfig vlan2 create
     75 	$atf_ifconfig vlan2 vlan 12 vlanif shmif1
     76 	$atf_ifconfig vlan3 create
     77 	$atf_ifconfig vlan3 vlan 13 vlanif shmif1
     78 	$atf_ifconfig shmif0 destroy
     79 	atf_check -s exit:0 -o not-match:'shmif0' rump.ifconfig vlan0
     80 	atf_check -s exit:0 -o not-match:'shmif0' rump.ifconfig vlan1
     81 	atf_check -s exit:0 -o match:'shmif1' rump.ifconfig vlan2
     82 	atf_check -s exit:0 -o match:'shmif1' rump.ifconfig vlan3
     83 	$atf_ifconfig vlan0 destroy
     84 	$atf_ifconfig vlan1 destroy
     85 	$atf_ifconfig vlan2 destroy
     86 	$atf_ifconfig vlan3 destroy
     87 
     88 }
     89 
     90 atf_test_case vlan_create_destroy cleanup
     91 vlan_create_destroy_head()
     92 {
     93 
     94 	atf_set "descr" "tests of creation and deletion of vlan interface"
     95 	atf_set "require.progs" "rump_server"
     96 }
     97 
     98 vlan_create_destroy_body()
     99 {
    100 	rump_server_start $SOCK_LOCAL vlan
    101 
    102 	vlan_create_destroy_body_common
    103 }
    104 
    105 
    106 vlan_create_destroy_cleanup()
    107 {
    108 
    109 	$DEBUG && dump
    110 	cleanup
    111 }
    112 
    113 atf_test_case vlan_create_destroy6 cleanup
    114 vlan_create_destroy6_head()
    115 {
    116 
    117 	atf_set "descr" "tests of creation and deletion of vlan interface with IPv6"
    118 	atf_set "require.progs" "rump_server"
    119 }
    120 
    121 vlan_create_destroy6_body()
    122 {
    123 
    124 	rump_server_start $SOCK_LOCAL vlan netinet6
    125 
    126 	vlan_create_destroy_body_common
    127 }
    128 
    129 vlan_create_destroy6_cleanup()
    130 {
    131 
    132 	$DEBUG && dump
    133 	cleanup
    134 }
    135 
    136 vlan_basic_body_common()
    137 {
    138 	local atf_ifconfig="atf_check -s exit:0 rump.ifconfig"
    139 	local outfile=./out
    140 	local af=inet
    141 	local prefix=24
    142 	local local0=$IP_LOCAL0
    143 	local remote0=$IP_REMOTE0
    144 	local ping_cmd="rump.ping -n -w 1 -c 1"
    145 
    146 	if [ x"$1" = x"inet6" ]; then
    147 		af="inet6"
    148 		prefix=64
    149 		local0=$IP6_LOCAL0
    150 		remote0=$IP6_REMOTE0
    151 		ping_cmd="rump.ping6 -n -c 1"
    152 	fi
    153 
    154 	rump_server_add_iface $SOCK_LOCAL shmif0 $BUS
    155 	rump_server_add_iface $SOCK_REMOTE shmif0 $BUS
    156 
    157 	export RUMP_SERVER=$SOCK_LOCAL
    158 	$atf_ifconfig shmif0 up
    159 	export RUMP_SERVER=$SOCK_REMOTE
    160 	$atf_ifconfig shmif0 up
    161 
    162 	export RUMP_SERVER=$SOCK_LOCAL
    163 	$atf_ifconfig vlan0 create
    164 	$atf_ifconfig vlan0 vlan 10 vlanif shmif0
    165 	$atf_ifconfig vlan0 $af $local0/$prefix
    166 	$atf_ifconfig vlan0 up
    167 	$atf_ifconfig -w 10
    168 
    169 	export RUMP_SERVER=$SOCK_REMOTE
    170 	$atf_ifconfig vlan0 create
    171 	$atf_ifconfig vlan0 vlan 10 vlanif shmif0
    172 	$atf_ifconfig vlan0 $af $remote0/$prefix
    173 	$atf_ifconfig vlan0 up
    174 	$atf_ifconfig -w 10
    175 
    176 	extract_new_packets $BUS > $outfile
    177 
    178 	export RUMP_SERVER=$SOCK_LOCAL
    179 	atf_check -s exit:0 -o ignore $ping_cmd $remote0
    180 
    181 	extract_new_packets $BUS > $outfile
    182 	atf_check -s exit:0 -o match:'vlan 10' cat $outfile
    183 
    184 	$atf_ifconfig vlan0 -vlanif
    185 	$atf_ifconfig vlan0 vlan 20 vlanif shmif0
    186 	$atf_ifconfig vlan0 $af $local0/$prefix
    187 	$atf_ifconfig vlan0 up
    188 	$atf_ifconfig -w 10
    189 
    190 	extract_new_packets $BUS > $outfile
    191 	atf_check -s not-exit:0 -o ignore $ping_cmd $remote0
    192 
    193 	extract_new_packets $BUS > $outfile
    194 	atf_check -s exit:0 -o match:'vlan 20' cat $outfile
    195 
    196 	export RUMP_SERVER=$SOCK_LOCAL
    197 	$atf_ifconfig vlan0 -vlanif
    198 	$atf_ifconfig vlan0 vlan 10 vlanif shmif0
    199 	$atf_ifconfig vlan0 $af $local0/$prefix
    200 	$atf_ifconfig vlan0 up
    201 	$atf_ifconfig -w 10
    202 
    203 	atf_check -s exit:0 -o ignore rump.ifconfig -z vlan0
    204 	atf_check -s exit:0 -o ignore $ping_cmd $remote0
    205 	rump.ifconfig -v vlan0 > $outfile
    206 
    207 	atf_check -s exit:0 -o not-match:' 0 packets' cat $outfile
    208 	atf_check -s exit:0 -o not-match:' 0 bytes' cat $outfile
    209 }
    210 
    211 atf_test_case vlan_basic cleanup
    212 vlan_basic_head()
    213 {
    214 
    215 	atf_set "descr" "tests of communications over vlan interfaces"
    216 	atf_set "require.progs" "rump_server"
    217 }
    218 
    219 vlan_basic_body()
    220 {
    221 	rump_server_start $SOCK_LOCAL vlan
    222 	rump_server_start $SOCK_REMOTE vlan
    223 
    224 	vlan_basic_body_common inet
    225 
    226 }
    227 
    228 vlan_basic_cleanup()
    229 {
    230 
    231 	$DEBUG && dump
    232 	cleanup
    233 }
    234 
    235 atf_test_case vlan_basic6 cleanup
    236 vlan_basic6_head()
    237 {
    238 
    239 	atf_set "descr" "tests of communications over vlan interfaces using IPv6"
    240 	atf_set "require.progs" "rump_server"
    241 }
    242 
    243 vlan_basic6_body()
    244 {
    245 	rump_server_start $SOCK_LOCAL vlan netinet6
    246 	rump_server_start $SOCK_REMOTE vlan netinet6
    247 
    248 	vlan_basic_body_common inet6
    249 }
    250 
    251 vlan_basic6_cleanup()
    252 {
    253 
    254 	$DEBUG && dump
    255 	cleanup
    256 }
    257 
    258 vlanid_config_and_ping()
    259 {
    260 	local atf_ifconfig="atf_check -s exit:0 rump.ifconfig"
    261 	local vlanid=$1
    262 	shift
    263 
    264 	export RUMP_SERVER=$SOCK_LOCAL
    265 	$atf_ifconfig vlan0 vlan $vlanid vlanif shmif0
    266 	$atf_ifconfig vlan0 $IP_LOCAL0/24
    267 	$atf_ifconfig vlan0 up
    268 
    269 	export RUMP_SERVER=$SOCK_REMOTE
    270 	$atf_ifconfig vlan0 vlan $vlanid vlanif shmif0
    271 	$atf_ifconfig vlan0 $IP_REMOTE0/24
    272 	$atf_ifconfig vlan0 up
    273 
    274 	export RUMP_SERVER=$SOCK_LOCAL
    275 	atf_check -s exit:0 -o ignore rump.ping -n -w 1 -c 1 $IP_REMOTE0
    276 	$atf_ifconfig vlan0 -vlanif
    277 
    278 	export RUMP_SERVER=$SOCK_REMOTE
    279 	$atf_ifconfig vlan0 -vlanif
    280 }
    281 
    282 vlanid_config_and_ping6()
    283 {
    284 	local atf_ifconfig="atf_check -s exit:0 rump.ifconfig"
    285 	local vlanid=$1
    286 	shift
    287 
    288 	export RUMP_SERVER=$SOCK_LOCAL
    289 	$atf_ifconfig vlan0 vlan $vlanid vlanif shmif0
    290 	$atf_ifconfig vlan0 inet6 $IP6_LOCAL0/64
    291 	$atf_ifconfig vlan0 up
    292 
    293 	export RUMP_SERVER=$SOCK_REMOTE
    294 	$atf_ifconfig vlan0 vlan $vlanid vlanif shmif0
    295 	$atf_ifconfig vlan0 inet6 $IP6_REMOTE0/64
    296 	$atf_ifconfig vlan0 up
    297 
    298 	export RUMP_SERVER=$SOCK_LOCAL
    299 	atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 $IP6_REMOTE0
    300 	$atf_ifconfig vlan0 -vlanif
    301 
    302 	export RUMP_SERVER=$SOCK_REMOTE
    303 	$atf_ifconfig vlan0 -vlanif
    304 }
    305 
    306 vlan_vlanid_body_common()
    307 {
    308 	local atf_ifconfig="atf_check -s exit:0 rump.ifconfig"
    309 	local af=inet
    310 	local prefix=24
    311 	local sysctl_param="net.inet.ip.dad_count=0"
    312 	local ping_cmd="rump.ping -n -w 1 -c 1"
    313 	local config_and_ping=vlanid_config_and_ping
    314 	local local0=$IP_LOCAL0
    315 	local local1=$IP_LOCAL1
    316 	local remote0=$IP_REMOTE0
    317 	local remote1=$IP_REMOTE1
    318 
    319 	if [ x"$1" = x"inet6" ]; then
    320 		af=inet6
    321 		prefix=64
    322 		sysctl_param="net.inet6.ip6.dad_count=0"
    323 		ping_cmd="rump.ping6 -n -c 1"
    324 		config_and_ping=vlanid_config_and_ping6
    325 		local0=$IP6_LOCAL0
    326 		local1=$IP6_LOCAL1
    327 		remote0=$IP6_REMOTE0
    328 		remote1=$IP6_REMOTE1
    329 	fi
    330 
    331 	rump_server_add_iface $SOCK_LOCAL shmif0 $BUS
    332 	rump_server_add_iface $SOCK_REMOTE shmif0 $BUS
    333 
    334 	export RUMP_SERVER=$SOCK_LOCAL
    335 	atf_check -s exit:0 -o ignore rump.sysctl -w $sysctl_param
    336 	$atf_ifconfig shmif0 up
    337 	$atf_ifconfig vlan0 create
    338 
    339 	export RUMP_SERVER=$SOCK_REMOTE
    340 	atf_check -s exit:0 -o ignore rump.sysctl -w $sysctl_param
    341 	$atf_ifconfig shmif0 up
    342 	$atf_ifconfig vlan0 create
    343 
    344 	export RUMP_SERVER=$SOCK_LOCAL
    345 	atf_check -s not-exit:0 -e match:"^usage: rump.ifconfig" \
    346 	    rump.ifconfig vlan0 vlan -1 vlanif shmif0
    347 
    348 	# $config_and_ping 0 # reserved vlan id
    349 	$config_and_ping 1
    350 	$config_and_ping 4094
    351 	# $config_and_ping 4095 #reserved vlan id
    352 
    353 	if [ "${RANDOM:-0}" != "${RANDOM:-0}" ]
    354 	then
    355 		for TAG in $(( ${RANDOM:-0} % 4092 + 2 )) \
    356 			   $(( ${RANDOM:-0} % 4092 + 2 )) \
    357 			   $(( ${RANDOM:-0} % 4092 + 2 ))
    358 		do
    359 			$config_and_ping "${TAG}"
    360 		done
    361 	fi
    362 
    363 	export RUMP_SERVER=$SOCK_LOCAL
    364 	for TAG in 0 4095 4096 $((4096*4 + 1)) 65536 65537 $((65536 + 4095))
    365 	do
    366 		atf_check -s not-exit:0 -e not-empty \
    367 		    rump.ifconfig vlan0 vlan "${TAG}" vlanif shmif0
    368 	done
    369 
    370 	$atf_ifconfig vlan0 vlan 1 vlanif shmif0
    371 	atf_check -s not-exit:0 -e match:"SIOCSETVLAN: Device busy" \
    372 	    rump.ifconfig vlan0 vlan 2 vlanif shmif0
    373 
    374 	atf_check -s not-exit:0 -e match:"SIOCSETVLAN: Device busy" \
    375 	    rump.ifconfig vlan0 vlan 1 vlanif shmif1
    376 
    377 	$atf_ifconfig vlan0 -vlanif
    378 	atf_check -s not-exit:0 -e match:"Invalid argument" \
    379 	    rump.ifconfig vlan0 $af $local0/$prefix
    380 
    381 	export RUMP_SERVER=$SOCK_LOCAL
    382 	$atf_ifconfig vlan0 vlan 10 vlanif shmif0
    383 	$atf_ifconfig vlan0 $af $local0/$prefix
    384 	$atf_ifconfig vlan0 up
    385 	$atf_ifconfig vlan1 create
    386 	$atf_ifconfig vlan1 vlan 11 vlanif shmif0
    387 	$atf_ifconfig vlan1 $af $local1/$prefix
    388 	$atf_ifconfig vlan1 up
    389 
    390 	export RUMP_SERVER=$SOCK_REMOTE
    391 	$atf_ifconfig vlan0 -vlanif
    392 	$atf_ifconfig vlan0 vlan 10 vlanif shmif0
    393 	$atf_ifconfig vlan0 $af $remote0/$prefix
    394 	$atf_ifconfig vlan0 up
    395 	$atf_ifconfig vlan1 create
    396 	$atf_ifconfig vlan1 vlan 11 vlanif shmif0
    397 	$atf_ifconfig vlan1 $af $remote1/$prefix
    398 	$atf_ifconfig vlan1 up
    399 
    400 	export RUMP_SERVER=$SOCK_LOCAL
    401 	atf_check -s exit:0 -o ignore $ping_cmd $remote0
    402 	atf_check -s exit:0 -o ignore $ping_cmd $remote1
    403 }
    404 
    405 atf_test_case vlan_vlanid cleanup
    406 vlan_vlanid_head()
    407 {
    408 
    409 	atf_set "descr" "tests of configuration for vlan id"
    410 	atf_set "require.progs" "rump_server"
    411 }
    412 
    413 vlan_vlanid_body()
    414 {
    415 	rump_server_start $SOCK_LOCAL vlan
    416 	rump_server_start $SOCK_REMOTE vlan
    417 
    418 	vlan_vlanid_body_common inet
    419 }
    420 
    421 vlan_vlanid_cleanup()
    422 {
    423 
    424 	$DEBUG && dump
    425 	cleanup
    426 }
    427 
    428 atf_test_case vlan_vlanid6 cleanup
    429 vlan_vlanid6_head()
    430 {
    431 
    432 	atf_set "descr" "tests of configuration for vlan id using IPv6"
    433 	atf_set "require.progs" "rump_server"
    434 }
    435 
    436 
    437 vlan_vlanid6_body()
    438 {
    439 	rump_server_start $SOCK_LOCAL vlan netinet6
    440 	rump_server_start $SOCK_REMOTE vlan netinet6
    441 
    442 	vlan_vlanid_body_common inet6
    443 }
    444 
    445 vlan_vlanid6_cleanup()
    446 {
    447 
    448 	$DEBUG && dump
    449 	cleanup
    450 }
    451 
    452 vlan_configs_body_common()
    453 {
    454 	local atf_ifconfig="atf_check -s exit:0 rump.ifconfig"
    455 
    456 	export RUMP_SERVER=${SOCK_LOCAL}
    457 
    458 	$atf_ifconfig shmif0 create
    459 	$atf_ifconfig shmif1 create
    460 	# unset U/L bit to detect a bug fixed by if_vlan.c:r1.132
    461 	$atf_ifconfig shmif0 link b0:a0:75:00:01:00 active
    462 	$atf_ifconfig shmif1 link b0:a0:75:00:01:01 active
    463 	$atf_ifconfig vlan0 create
    464 
    465 	$atf_ifconfig vlan0 vlan 10 vlanif shmif0
    466 	$atf_ifconfig vlan0 -vlanif
    467 
    468 	$atf_ifconfig vlan0 vlan 10 vlanif shmif0
    469 	$atf_ifconfig vlan0 -vlanif shmif0
    470 
    471 	$atf_ifconfig vlan0 vlan 10 vlanif shmif0
    472 	atf_check -s exit:0 rump.ifconfig vlan0 -vlanif shmif1
    473 	atf_check -s exit:0 rump.ifconfig vlan0 -vlanif shmif2
    474 
    475 	$atf_ifconfig vlan0 -vlanif
    476 
    477 	$atf_ifconfig vlan0 vlan 10 vlanif shmif0
    478 	atf_check -s exit:0 -e match:'Invalid argument' \
    479 	    rump.ifconfig vlan0 mtu 1497
    480 	$atf_ifconfig vlan0 mtu 1496
    481 	$atf_ifconfig vlan0 mtu 42
    482 	atf_check -s exit:0 -e match:'Invalid argument' \
    483 	    rump.ifconfig vlan0 mtu 41
    484 	$atf_ifconfig vlan0 -vlanif
    485 
    486 	$atf_ifconfig vlan1 create
    487 	$atf_ifconfig vlan0 vlan 10 vlanif shmif0
    488 	atf_check -s not-exit:0 -e match:'File exists' \
    489 	    rump.ifconfig vlan1 vlan 10 vlanif shmif0
    490 	$atf_ifconfig vlan1 vlan 10 vlanif shmif1
    491 
    492 	$atf_ifconfig vlan1 -vlanif shmif1
    493 	$atf_ifconfig vlan1 vlan 10 vlanif shmif1
    494 
    495 	$atf_ifconfig vlan0 -vlanif shmif0
    496 	$atf_ifconfig vlan0 vlan 10 vlanif shmif0
    497 }
    498 
    499 atf_test_case vlan_configs cleanup
    500 vlan_configs_head()
    501 {
    502 	atf_set "descr" "tests of configuration except vlan id"
    503 	atf_set "require.progs" "rump_server"
    504 }
    505 
    506 vlan_configs_body()
    507 {
    508 
    509 	rump_server_start $SOCK_LOCAL vlan
    510 
    511 	vlan_configs_body_common
    512 
    513 }
    514 
    515 vlan_configs_cleanup()
    516 {
    517 
    518 	$DEBUG && dump
    519 	cleanup
    520 }
    521 
    522 atf_test_case vlan_configs6 cleanup
    523 vlan_configs6_head()
    524 {
    525 	atf_set "descr" "tests of configuration except vlan id using IPv6"
    526 	atf_set "require.progs" "rump_server"
    527 }
    528 
    529 vlan_configs6_body()
    530 {
    531 	rump_server_start $SOCK_LOCAL vlan netinet6
    532 
    533 	vlan_configs_body_common
    534 }
    535 
    536 vlan_configs6_cleanup()
    537 {
    538 	$DEBUG && dump
    539 	cleanup
    540 }
    541 
    542 vlan_bridge_body_common()
    543 {
    544 	local atf_ifconfig="atf_check -s exit:0 rump.ifconfig"
    545 
    546 	rump_server_add_iface $SOCK_LOCAL shmif0 $BUS
    547 
    548 	export RUMP_SERVER=$SOCK_LOCAL
    549 	$atf_ifconfig shmif0 up
    550 
    551 	$atf_ifconfig vlan0 create
    552 	$atf_ifconfig vlan0 vlan 10 vlanif shmif0
    553 	$atf_ifconfig vlan0 up
    554 	$DEBUG && rump.ifconfig vlan0
    555 
    556 	$atf_ifconfig bridge0 create
    557 	# Adjust to the MTU of a vlan on a shmif
    558 	$atf_ifconfig bridge0 mtu 1496
    559 	$atf_ifconfig bridge0 up
    560 	# Test brconfig add
    561 	atf_check -s exit:0 $HIJACKING brconfig bridge0 add vlan0
    562 	$DEBUG && brconfig bridge0
    563 	# Test brconfig delete
    564 	atf_check -s exit:0 $HIJACKING brconfig bridge0 delete vlan0
    565 
    566 	atf_check -s exit:0 $HIJACKING brconfig bridge0 add vlan0
    567 	# Test vlan destruction with bridge
    568 	$atf_ifconfig vlan0 destroy
    569 
    570 	rump_server_destroy_ifaces
    571 }
    572 
    573 atf_test_case vlan_bridge cleanup
    574 vlan_bridge_head()
    575 {
    576 
    577 	atf_set "descr" "tests of vlan interfaces with bridges (IPv4)"
    578 	atf_set "require.progs" "rump_server"
    579 }
    580 
    581 vlan_bridge_body()
    582 {
    583 
    584 	rump_server_start $SOCK_LOCAL vlan bridge
    585 	vlan_bridge_body_common
    586 }
    587 
    588 vlan_bridge_cleanup()
    589 {
    590 
    591 	$DEBUG && dump
    592 	cleanup
    593 }
    594 
    595 atf_test_case vlan_bridge6 cleanup
    596 vlan_bridge6_head()
    597 {
    598 
    599 	atf_set "descr" "tests of vlan interfaces with bridges (IPv6)"
    600 	atf_set "require.progs" "rump_server"
    601 }
    602 
    603 vlan_bridge6_body()
    604 {
    605 
    606 	rump_server_start $SOCK_LOCAL vlan netinet6 bridge
    607 	vlan_bridge_body_common
    608 }
    609 
    610 vlan_bridge6_cleanup()
    611 {
    612 
    613 	$DEBUG && dump
    614 	cleanup
    615 }
    616 
    617 vlan_multicast_body_common()
    618 {
    619 	local atf_ifconfig="atf_check -s exit:0 rump.ifconfig"
    620 	local af="inet"
    621 	local local0=$IP_LOCAL0
    622 	local local1=$IP_LOCAL1
    623 	local mcaddr=$IP_MCADDR0
    624 	local eth_mcaddr=$ETH_IP_MCADDR0
    625 	local prefix=24
    626 	local siocXmulti="$(atf_get_srcdir)/siocXmulti"
    627 	local atf_siocXmulti="atf_check -s exit:0 $HIJACKING $siocXmulti"
    628 
    629 	if [ x"$1" =  x"inet6" ]; then
    630 		af="inet6"
    631 		prefix=64
    632 		local0=$IP6_LOCAL0
    633 		local1=$IP6_LOCAL1
    634 		mcaddr=$IP6_MCADDR0
    635 		eth_mcaddr=$ETH_IP6_MCADDR0
    636 	fi
    637 
    638 	export RUMP_SERVER=$SOCK_LOCAL
    639 
    640 	$atf_ifconfig shmif0 create
    641 	$atf_ifconfig shmif0 linkstr net0 up
    642 	$atf_ifconfig vlan0 create
    643 	$atf_ifconfig vlan0 vlan 10 vlanif shmif0
    644 	$atf_ifconfig vlan0 $af $local0/$prefix up
    645 	$atf_ifconfig vlan1 create
    646 	$atf_ifconfig vlan1 vlan 11 vlanif shmif0
    647 	$atf_ifconfig vlan1 $af $local1/$prefix up
    648 	$atf_ifconfig -w 10
    649 
    650 	# check the initial state
    651 	atf_check -s exit:0 -o not-match:"$eth_mcaddr" $HIJACKING ifmcstat
    652 
    653 	# add a multicast address
    654 	$atf_siocXmulti add vlan0 $mcaddr
    655 	atf_check -s exit:0 -o match:"$eth_mcaddr" $HIJACKING ifmcstat
    656 
    657 	# delete the address
    658 	$atf_siocXmulti del vlan0 $mcaddr
    659 	atf_check -s exit:0 -o not-match:"$eth_mcaddr" $HIJACKING ifmcstat
    660 
    661 	# delete a non-existing address
    662 	atf_check -s not-exit:0 -e match:"Invalid argument" \
    663 	    $HIJACKING $siocXmulti del vlan0 $mcaddr
    664 
    665 	# add an address to different interfaces
    666 	$atf_siocXmulti add vlan0 $mcaddr
    667 	$atf_siocXmulti add vlan1 $mcaddr
    668 	atf_check -s exit:0 -o match:"${eth_mcaddr}: 2" $HIJACKING ifmcstat
    669 	$atf_siocXmulti del vlan0 $mcaddr
    670 
    671 	# delete the address with invalid interface
    672 	atf_check -s not-exit:0 -e match:"Invalid argument" \
    673 	    $HIJACKING $siocXmulti del vlan0 $mcaddr
    674 
    675 	$atf_siocXmulti del vlan1 $mcaddr
    676 
    677 	# add and delete a same address more than once
    678 	$atf_siocXmulti add vlan0 $mcaddr
    679 	$atf_siocXmulti add vlan0 $mcaddr
    680 	$atf_siocXmulti add vlan0 $mcaddr
    681 	atf_check -s exit:0 -o match:"${eth_mcaddr}: 3" $HIJACKING ifmcstat
    682 	$atf_siocXmulti del vlan0 $mcaddr
    683 	$atf_siocXmulti del vlan0 $mcaddr
    684 	$atf_siocXmulti del vlan0 $mcaddr
    685 	atf_check -s exit:0 -o not-match:"$eth_mcaddr" $HIJACKING ifmcstat
    686 
    687 	# delete all address added to parent device when remove
    688 	# the config of parent interface
    689 	$atf_siocXmulti add vlan0 $mcaddr
    690 	$atf_siocXmulti add vlan0 $mcaddr
    691 	$atf_siocXmulti add vlan0 $mcaddr
    692 	$atf_ifconfig vlan0 -vlanif shmif0
    693 	atf_check -s exit:0 -o not-match:"$eth_mcaddr" $HIJACKING ifmcstat
    694 }
    695 
    696 atf_test_case vlan_multicast cleanup
    697 vlan_multicast_head()
    698 {
    699 	atf_set "descr" "tests of multicast address adding and deleting"
    700 	atf_set "require.progs" "rump_server"
    701 }
    702 
    703 vlan_multicast_body()
    704 {
    705 	rump_server_start $SOCK_LOCAL vlan
    706 
    707 	vlan_multicast_body_common inet
    708 }
    709 
    710 vlan_multicast_cleanup()
    711 {
    712 	$DEBUG && dump
    713 	cleanup
    714 }
    715 
    716 atf_test_case vlan_multicast6 cleanup
    717 vlan_multicast6_head()
    718 {
    719 	atf_set "descr" "tests of multicast address adding and deleting with IPv6"
    720 	atf_set "require.progs" "rump_server"
    721 }
    722 
    723 vlan_multicast6_body()
    724 {
    725 	rump_server_start $SOCK_LOCAL vlan netinet6
    726 
    727 	vlan_multicast_body_common inet6
    728 }
    729 
    730 vlan_multicast6_cleanup()
    731 {
    732 	$DEBUG && dump
    733 	cleanup
    734 }
    735 
    736 atf_init_test_cases()
    737 {
    738 
    739 	atf_add_test_case vlan_create_destroy
    740 	atf_add_test_case vlan_basic
    741 	atf_add_test_case vlan_vlanid
    742 	atf_add_test_case vlan_configs
    743 	atf_add_test_case vlan_bridge
    744 	atf_add_test_case vlan_multicast
    745 
    746 	atf_add_test_case vlan_create_destroy6
    747 	atf_add_test_case vlan_basic6
    748 	atf_add_test_case vlan_vlanid6
    749 	atf_add_test_case vlan_configs6
    750 	atf_add_test_case vlan_bridge6
    751 	atf_add_test_case vlan_multicast6
    752 }
    753