1 1.21 ozaki # $NetBSD: t_bridge.sh,v 1.21 2024/09/03 08:01:38 ozaki-r Exp $ 2 1.1 ozaki # 3 1.1 ozaki # Copyright (c) 2014 The NetBSD Foundation, Inc. 4 1.1 ozaki # All rights reserved. 5 1.1 ozaki # 6 1.1 ozaki # Redistribution and use in source and binary forms, with or without 7 1.1 ozaki # modification, are permitted provided that the following conditions 8 1.1 ozaki # are met: 9 1.1 ozaki # 1. Redistributions of source code must retain the above copyright 10 1.1 ozaki # notice, this list of conditions and the following disclaimer. 11 1.1 ozaki # 2. Redistributions in binary form must reproduce the above copyright 12 1.1 ozaki # notice, this list of conditions and the following disclaimer in the 13 1.1 ozaki # documentation and/or other materials provided with the distribution. 14 1.1 ozaki # 15 1.1 ozaki # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 16 1.1 ozaki # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 17 1.1 ozaki # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 18 1.1 ozaki # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 19 1.1 ozaki # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20 1.1 ozaki # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21 1.1 ozaki # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22 1.1 ozaki # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23 1.1 ozaki # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24 1.1 ozaki # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25 1.1 ozaki # POSSIBILITY OF SUCH DAMAGE. 26 1.1 ozaki # 27 1.1 ozaki 28 1.1 ozaki SOCK1=unix://commsock1 29 1.1 ozaki SOCK2=unix://commsock2 30 1.1 ozaki SOCK3=unix://commsock3 31 1.1 ozaki IP1=10.0.0.1 32 1.1 ozaki IP2=10.0.0.2 33 1.1 ozaki IP61=fc00::1 34 1.1 ozaki IP62=fc00::2 35 1.8 ozaki IPBR1=10.0.0.11 36 1.8 ozaki IPBR2=10.0.0.12 37 1.8 ozaki IP6BR1=fc00::11 38 1.8 ozaki IP6BR2=fc00::12 39 1.1 ozaki 40 1.15 ozaki DEBUG=${DEBUG:-false} 41 1.6 ozaki TIMEOUT=5 42 1.6 ozaki 43 1.1 ozaki setup_endpoint() 44 1.1 ozaki { 45 1.1 ozaki sock=${1} 46 1.1 ozaki addr=${2} 47 1.1 ozaki bus=${3} 48 1.1 ozaki mode=${4} 49 1.1 ozaki 50 1.16 ozaki rump_server_add_iface $sock shmif0 $bus 51 1.1 ozaki export RUMP_SERVER=${sock} 52 1.1 ozaki if [ $mode = "ipv6" ]; then 53 1.1 ozaki atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${addr} 54 1.1 ozaki else 55 1.1 ozaki atf_check -s exit:0 rump.ifconfig shmif0 inet ${addr} netmask 0xffffff00 56 1.1 ozaki fi 57 1.1 ozaki 58 1.1 ozaki atf_check -s exit:0 rump.ifconfig shmif0 up 59 1.15 ozaki $DEBUG && rump.ifconfig shmif0 60 1.1 ozaki } 61 1.1 ozaki 62 1.1 ozaki test_endpoint() 63 1.1 ozaki { 64 1.1 ozaki sock=${1} 65 1.1 ozaki addr=${2} 66 1.1 ozaki bus=${3} 67 1.1 ozaki mode=${4} 68 1.1 ozaki 69 1.1 ozaki export RUMP_SERVER=${sock} 70 1.1 ozaki atf_check -s exit:0 -o match:shmif0 rump.ifconfig 71 1.1 ozaki if [ $mode = "ipv6" ]; then 72 1.11 ozaki atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT ${addr} 73 1.1 ozaki else 74 1.6 ozaki atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 ${addr} 75 1.1 ozaki fi 76 1.1 ozaki } 77 1.1 ozaki 78 1.1 ozaki test_setup() 79 1.1 ozaki { 80 1.1 ozaki test_endpoint $SOCK1 $IP1 bus1 ipv4 81 1.1 ozaki test_endpoint $SOCK3 $IP2 bus2 ipv4 82 1.1 ozaki 83 1.1 ozaki export RUMP_SERVER=$SOCK2 84 1.1 ozaki atf_check -s exit:0 -o match:shmif0 rump.ifconfig 85 1.1 ozaki atf_check -s exit:0 -o match:shmif1 rump.ifconfig 86 1.1 ozaki } 87 1.1 ozaki 88 1.1 ozaki test_setup6() 89 1.1 ozaki { 90 1.1 ozaki test_endpoint $SOCK1 $IP61 bus1 ipv6 91 1.1 ozaki test_endpoint $SOCK3 $IP62 bus2 ipv6 92 1.1 ozaki 93 1.1 ozaki export RUMP_SERVER=$SOCK2 94 1.1 ozaki atf_check -s exit:0 -o match:shmif0 rump.ifconfig 95 1.1 ozaki atf_check -s exit:0 -o match:shmif1 rump.ifconfig 96 1.1 ozaki } 97 1.1 ozaki 98 1.1 ozaki setup_bridge_server() 99 1.1 ozaki { 100 1.16 ozaki 101 1.16 ozaki rump_server_add_iface $SOCK2 shmif0 bus1 102 1.16 ozaki rump_server_add_iface $SOCK2 shmif1 bus2 103 1.1 ozaki export RUMP_SERVER=$SOCK2 104 1.1 ozaki atf_check -s exit:0 rump.ifconfig shmif0 up 105 1.1 ozaki atf_check -s exit:0 rump.ifconfig shmif1 up 106 1.1 ozaki } 107 1.1 ozaki 108 1.1 ozaki setup() 109 1.1 ozaki { 110 1.16 ozaki 111 1.16 ozaki rump_server_start $SOCK1 bridge 112 1.16 ozaki rump_server_start $SOCK2 bridge 113 1.16 ozaki rump_server_start $SOCK3 bridge 114 1.1 ozaki 115 1.1 ozaki setup_endpoint $SOCK1 $IP1 bus1 ipv4 116 1.1 ozaki setup_endpoint $SOCK3 $IP2 bus2 ipv4 117 1.1 ozaki setup_bridge_server 118 1.1 ozaki } 119 1.1 ozaki 120 1.1 ozaki setup6() 121 1.1 ozaki { 122 1.16 ozaki 123 1.16 ozaki rump_server_start $SOCK1 netinet6 bridge 124 1.16 ozaki rump_server_start $SOCK2 netinet6 bridge 125 1.16 ozaki rump_server_start $SOCK3 netinet6 bridge 126 1.1 ozaki 127 1.1 ozaki setup_endpoint $SOCK1 $IP61 bus1 ipv6 128 1.1 ozaki setup_endpoint $SOCK3 $IP62 bus2 ipv6 129 1.1 ozaki setup_bridge_server 130 1.1 ozaki } 131 1.1 ozaki 132 1.1 ozaki setup_bridge() 133 1.1 ozaki { 134 1.1 ozaki export RUMP_SERVER=$SOCK2 135 1.19 ozaki rump_server_add_iface $SOCK2 bridge0 136 1.1 ozaki atf_check -s exit:0 rump.ifconfig bridge0 up 137 1.1 ozaki 138 1.1 ozaki export LD_PRELOAD=/usr/lib/librumphijack.so 139 1.1 ozaki atf_check -s exit:0 /sbin/brconfig bridge0 add shmif0 140 1.1 ozaki atf_check -s exit:0 /sbin/brconfig bridge0 add shmif1 141 1.1 ozaki /sbin/brconfig bridge0 142 1.1 ozaki unset LD_PRELOAD 143 1.1 ozaki rump.ifconfig shmif0 144 1.1 ozaki rump.ifconfig shmif1 145 1.1 ozaki } 146 1.1 ozaki 147 1.8 ozaki setup_member_ip() 148 1.8 ozaki { 149 1.8 ozaki export RUMP_SERVER=$SOCK2 150 1.8 ozaki export LD_PRELOAD=/usr/lib/librumphijack.so 151 1.8 ozaki atf_check -s exit:0 rump.ifconfig shmif0 $IPBR1/24 152 1.8 ozaki atf_check -s exit:0 rump.ifconfig shmif1 $IPBR2/24 153 1.8 ozaki atf_check -s exit:0 rump.ifconfig -w 10 154 1.8 ozaki /sbin/brconfig bridge0 155 1.8 ozaki unset LD_PRELOAD 156 1.8 ozaki rump.ifconfig shmif0 157 1.8 ozaki rump.ifconfig shmif1 158 1.8 ozaki } 159 1.8 ozaki 160 1.8 ozaki setup_member_ip6() 161 1.8 ozaki { 162 1.8 ozaki export RUMP_SERVER=$SOCK2 163 1.8 ozaki export LD_PRELOAD=/usr/lib/librumphijack.so 164 1.8 ozaki atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6BR1 165 1.8 ozaki atf_check -s exit:0 rump.ifconfig shmif1 inet6 $IP6BR2 166 1.8 ozaki atf_check -s exit:0 rump.ifconfig -w 10 167 1.8 ozaki /sbin/brconfig bridge0 168 1.8 ozaki unset LD_PRELOAD 169 1.8 ozaki rump.ifconfig shmif0 170 1.8 ozaki rump.ifconfig shmif1 171 1.8 ozaki } 172 1.8 ozaki 173 1.1 ozaki teardown_bridge() 174 1.1 ozaki { 175 1.1 ozaki export RUMP_SERVER=$SOCK2 176 1.1 ozaki export LD_PRELOAD=/usr/lib/librumphijack.so 177 1.1 ozaki /sbin/brconfig bridge0 178 1.1 ozaki atf_check -s exit:0 /sbin/brconfig bridge0 delete shmif0 179 1.1 ozaki atf_check -s exit:0 /sbin/brconfig bridge0 delete shmif1 180 1.1 ozaki /sbin/brconfig bridge0 181 1.1 ozaki unset LD_PRELOAD 182 1.1 ozaki rump.ifconfig shmif0 183 1.1 ozaki rump.ifconfig shmif1 184 1.1 ozaki } 185 1.1 ozaki 186 1.1 ozaki test_setup_bridge() 187 1.1 ozaki { 188 1.1 ozaki export RUMP_SERVER=$SOCK2 189 1.1 ozaki export LD_PRELOAD=/usr/lib/librumphijack.so 190 1.1 ozaki atf_check -s exit:0 -o match:shmif0 /sbin/brconfig bridge0 191 1.1 ozaki atf_check -s exit:0 -o match:shmif1 /sbin/brconfig bridge0 192 1.1 ozaki /sbin/brconfig bridge0 193 1.1 ozaki unset LD_PRELOAD 194 1.1 ozaki } 195 1.1 ozaki 196 1.1 ozaki down_up_interfaces() 197 1.1 ozaki { 198 1.1 ozaki export RUMP_SERVER=$SOCK1 199 1.1 ozaki rump.ifconfig shmif0 down 200 1.1 ozaki rump.ifconfig shmif0 up 201 1.1 ozaki export RUMP_SERVER=$SOCK3 202 1.1 ozaki rump.ifconfig shmif0 down 203 1.1 ozaki rump.ifconfig shmif0 up 204 1.1 ozaki } 205 1.1 ozaki 206 1.1 ozaki test_ping_failure() 207 1.1 ozaki { 208 1.1 ozaki export RUMP_SERVER=$SOCK1 209 1.6 ozaki atf_check -s not-exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP2 210 1.1 ozaki export RUMP_SERVER=$SOCK3 211 1.6 ozaki atf_check -s not-exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP1 212 1.1 ozaki } 213 1.1 ozaki 214 1.1 ozaki test_ping_success() 215 1.1 ozaki { 216 1.1 ozaki export RUMP_SERVER=$SOCK1 217 1.1 ozaki rump.ifconfig -v shmif0 218 1.6 ozaki atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP2 219 1.1 ozaki rump.ifconfig -v shmif0 220 1.1 ozaki 221 1.1 ozaki export RUMP_SERVER=$SOCK3 222 1.1 ozaki rump.ifconfig -v shmif0 223 1.6 ozaki atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP1 224 1.1 ozaki rump.ifconfig -v shmif0 225 1.1 ozaki } 226 1.1 ozaki 227 1.1 ozaki test_ping6_failure() 228 1.1 ozaki { 229 1.1 ozaki export RUMP_SERVER=$SOCK1 230 1.11 ozaki atf_check -s not-exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP62 231 1.1 ozaki export RUMP_SERVER=$SOCK3 232 1.11 ozaki atf_check -s not-exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP61 233 1.1 ozaki } 234 1.1 ozaki 235 1.1 ozaki test_ping6_success() 236 1.1 ozaki { 237 1.1 ozaki export RUMP_SERVER=$SOCK1 238 1.1 ozaki rump.ifconfig -v shmif0 239 1.11 ozaki atf_check -s exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP62 240 1.1 ozaki rump.ifconfig -v shmif0 241 1.1 ozaki 242 1.1 ozaki export RUMP_SERVER=$SOCK3 243 1.1 ozaki rump.ifconfig -v shmif0 244 1.11 ozaki atf_check -s exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP61 245 1.1 ozaki rump.ifconfig -v shmif0 246 1.1 ozaki } 247 1.1 ozaki 248 1.8 ozaki test_ping_member() 249 1.8 ozaki { 250 1.8 ozaki export RUMP_SERVER=$SOCK1 251 1.8 ozaki rump.ifconfig -v shmif0 252 1.8 ozaki atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IPBR1 253 1.8 ozaki rump.ifconfig -v shmif0 254 1.10 ozaki # Test for PR#48104 255 1.10 ozaki atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IPBR2 256 1.8 ozaki rump.ifconfig -v shmif0 257 1.8 ozaki 258 1.8 ozaki export RUMP_SERVER=$SOCK3 259 1.8 ozaki rump.ifconfig -v shmif0 260 1.10 ozaki # Test for PR#48104 261 1.10 ozaki atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IPBR1 262 1.8 ozaki rump.ifconfig -v shmif0 263 1.8 ozaki atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IPBR2 264 1.8 ozaki rump.ifconfig -v shmif0 265 1.8 ozaki } 266 1.8 ozaki 267 1.8 ozaki test_ping6_member() 268 1.8 ozaki { 269 1.8 ozaki export RUMP_SERVER=$SOCK1 270 1.8 ozaki rump.ifconfig -v shmif0 271 1.11 ozaki atf_check -s exit:0 -o ignore rump.ping6 -q -n -X $TIMEOUT -c 1 $IP6BR1 272 1.8 ozaki rump.ifconfig -v shmif0 273 1.10 ozaki # Test for PR#48104 274 1.11 ozaki atf_check -s exit:0 -o ignore rump.ping6 -q -n -X $TIMEOUT -c 1 $IP6BR2 275 1.8 ozaki rump.ifconfig -v shmif0 276 1.8 ozaki 277 1.8 ozaki export RUMP_SERVER=$SOCK3 278 1.8 ozaki rump.ifconfig -v shmif0 279 1.10 ozaki # Test for PR#48104 280 1.11 ozaki atf_check -s exit:0 -o ignore rump.ping6 -q -n -X $TIMEOUT -c 1 $IP6BR1 281 1.8 ozaki rump.ifconfig -v shmif0 282 1.11 ozaki atf_check -s exit:0 -o ignore rump.ping6 -q -n -X $TIMEOUT -c 1 $IP6BR2 283 1.8 ozaki rump.ifconfig -v shmif0 284 1.8 ozaki } 285 1.8 ozaki 286 1.20 ozaki test_create_destroy() 287 1.18 ozaki { 288 1.18 ozaki 289 1.18 ozaki rump_server_start $SOCK1 bridge 290 1.18 ozaki 291 1.18 ozaki test_create_destroy_common $SOCK1 bridge0 292 1.18 ozaki } 293 1.18 ozaki 294 1.20 ozaki test_ipv4() 295 1.1 ozaki { 296 1.1 ozaki setup 297 1.1 ozaki test_setup 298 1.1 ozaki 299 1.7 ozaki # Enable once PR kern/49219 is fixed 300 1.7 ozaki #test_ping_failure 301 1.4 ozaki 302 1.1 ozaki setup_bridge 303 1.4 ozaki sleep 1 304 1.1 ozaki test_setup_bridge 305 1.1 ozaki test_ping_success 306 1.1 ozaki 307 1.1 ozaki teardown_bridge 308 1.1 ozaki test_ping_failure 309 1.16 ozaki 310 1.16 ozaki rump_server_destroy_ifaces 311 1.1 ozaki } 312 1.1 ozaki 313 1.20 ozaki test_ipv6() 314 1.1 ozaki { 315 1.1 ozaki setup6 316 1.1 ozaki test_setup6 317 1.1 ozaki 318 1.4 ozaki test_ping6_failure 319 1.1 ozaki 320 1.1 ozaki setup_bridge 321 1.4 ozaki sleep 1 322 1.1 ozaki test_setup_bridge 323 1.1 ozaki test_ping6_success 324 1.1 ozaki 325 1.1 ozaki teardown_bridge 326 1.4 ozaki test_ping6_failure 327 1.16 ozaki 328 1.16 ozaki rump_server_destroy_ifaces 329 1.1 ozaki } 330 1.1 ozaki 331 1.20 ozaki test_member_ipv4() 332 1.8 ozaki { 333 1.8 ozaki setup 334 1.8 ozaki test_setup 335 1.8 ozaki 336 1.8 ozaki # Enable once PR kern/49219 is fixed 337 1.8 ozaki #test_ping_failure 338 1.8 ozaki 339 1.8 ozaki setup_bridge 340 1.8 ozaki sleep 1 341 1.8 ozaki test_setup_bridge 342 1.8 ozaki test_ping_success 343 1.8 ozaki 344 1.8 ozaki setup_member_ip 345 1.8 ozaki test_ping_member 346 1.8 ozaki 347 1.8 ozaki teardown_bridge 348 1.8 ozaki test_ping_failure 349 1.16 ozaki 350 1.16 ozaki rump_server_destroy_ifaces 351 1.8 ozaki } 352 1.8 ozaki 353 1.20 ozaki test_member_ipv6() 354 1.8 ozaki { 355 1.8 ozaki setup6 356 1.8 ozaki test_setup6 357 1.8 ozaki 358 1.8 ozaki test_ping6_failure 359 1.8 ozaki 360 1.8 ozaki setup_bridge 361 1.8 ozaki sleep 1 362 1.8 ozaki test_setup_bridge 363 1.8 ozaki test_ping6_success 364 1.8 ozaki 365 1.8 ozaki setup_member_ip6 366 1.8 ozaki test_ping6_member 367 1.8 ozaki 368 1.8 ozaki teardown_bridge 369 1.8 ozaki test_ping6_failure 370 1.16 ozaki 371 1.16 ozaki rump_server_destroy_ifaces 372 1.8 ozaki } 373 1.8 ozaki 374 1.21 ozaki BUS_SHMIF0=./bus0 375 1.21 ozaki BUS_SHMIF1=./bus1 376 1.21 ozaki BUS_SHMIF2=./bus2 377 1.21 ozaki 378 1.21 ozaki unpack_file() 379 1.21 ozaki { 380 1.21 ozaki 381 1.21 ozaki atf_check -s exit:0 uudecode $(atf_get_srcdir)/${1}.uue 382 1.21 ozaki } 383 1.21 ozaki 384 1.21 ozaki reset_if_stats() 385 1.21 ozaki { 386 1.21 ozaki 387 1.21 ozaki for ifname in shmif0 shmif1 shmif2 388 1.21 ozaki do 389 1.21 ozaki atf_check -s exit:0 -o ignore rump.ifconfig -z $ifname 390 1.21 ozaki done 391 1.21 ozaki } 392 1.21 ozaki 393 1.21 ozaki test_protection() 394 1.21 ozaki { 395 1.21 ozaki 396 1.21 ozaki unpack_file unicast.pcap 397 1.21 ozaki unpack_file broadcast.pcap 398 1.21 ozaki 399 1.21 ozaki rump_server_start $SOCK1 bridge 400 1.21 ozaki rump_server_add_iface $SOCK1 shmif0 $BUS_SHMIF0 401 1.21 ozaki rump_server_add_iface $SOCK1 shmif1 $BUS_SHMIF1 402 1.21 ozaki rump_server_add_iface $SOCK1 shmif2 $BUS_SHMIF2 403 1.21 ozaki 404 1.21 ozaki export RUMP_SERVER=$SOCK1 405 1.21 ozaki atf_check -s exit:0 rump.ifconfig shmif0 up 406 1.21 ozaki atf_check -s exit:0 rump.ifconfig shmif1 up 407 1.21 ozaki atf_check -s exit:0 rump.ifconfig shmif2 up 408 1.21 ozaki 409 1.21 ozaki atf_check -s exit:0 rump.ifconfig bridge0 create 410 1.21 ozaki atf_check -s exit:0 rump.ifconfig bridge0 up 411 1.21 ozaki 412 1.21 ozaki atf_check -s exit:0 $HIJACKING brconfig bridge0 add shmif0 add shmif1 add shmif2 413 1.21 ozaki $DEBUG && rump.ifconfig 414 1.21 ozaki 415 1.21 ozaki # Protected interfaces: - 416 1.21 ozaki # Learning: - 417 1.21 ozaki # Input: unicast through shmif0 418 1.21 ozaki # Output: shmif1, shmif2 419 1.21 ozaki reset_if_stats 420 1.21 ozaki atf_check -s exit:0 -o ignore shmif_pcapin unicast.pcap ${BUS_SHMIF0} 421 1.21 ozaki atf_check -s exit:0 -o match:"input: 1 packet" rump.ifconfig -v shmif0 422 1.21 ozaki atf_check -s exit:0 -o match:"output: 1 packet" rump.ifconfig -v shmif1 423 1.21 ozaki atf_check -s exit:0 -o match:"output: 1 packet" rump.ifconfig -v shmif2 424 1.21 ozaki $DEBUG && rump.ifconfig -v bridge0 425 1.21 ozaki 426 1.21 ozaki # Protected interfaces: - 427 1.21 ozaki # Learning: - 428 1.21 ozaki # Input: broadcast through shmif0 429 1.21 ozaki # Output: shmif1, shmif2 430 1.21 ozaki reset_if_stats 431 1.21 ozaki atf_check -s exit:0 -o ignore shmif_pcapin broadcast.pcap ${BUS_SHMIF0} 432 1.21 ozaki atf_check -s exit:0 -o match:"input: 1 packet" rump.ifconfig -v shmif0 433 1.21 ozaki atf_check -s exit:0 -o match:"output: 1 packet" rump.ifconfig -v shmif1 434 1.21 ozaki atf_check -s exit:0 -o match:"output: 1 packet" rump.ifconfig -v shmif2 435 1.21 ozaki $DEBUG && rump.ifconfig -v bridge0 436 1.21 ozaki 437 1.21 ozaki # Protect shmif0 and shmif2 438 1.21 ozaki atf_check -s exit:0 $HIJACKING brconfig bridge0 protect shmif0 439 1.21 ozaki atf_check -s exit:0 $HIJACKING brconfig bridge0 protect shmif2 440 1.21 ozaki atf_check -s exit:0 \ 441 1.21 ozaki -o match:"shmif0.+PROTECTED" \ 442 1.21 ozaki -o match:"shmif2.+PROTECTED" \ 443 1.21 ozaki -o not-match:"shmif1.+PROTECTED" \ 444 1.21 ozaki $HIJACKING brconfig bridge0 445 1.21 ozaki 446 1.21 ozaki # Protected interfaces: shmif0 shmif2 447 1.21 ozaki # Learning: - 448 1.21 ozaki # Input: unicast through shmif0 449 1.21 ozaki # Output: shmif1 450 1.21 ozaki reset_if_stats 451 1.21 ozaki atf_check -s exit:0 -o ignore shmif_pcapin unicast.pcap ${BUS_SHMIF0} 452 1.21 ozaki atf_check -s exit:0 -o match:"input: 1 packet" rump.ifconfig -v shmif0 453 1.21 ozaki atf_check -s exit:0 -o match:"output: 1 packet" rump.ifconfig -v shmif1 454 1.21 ozaki atf_check -s exit:0 -o match:"output: 0 packet" rump.ifconfig -v shmif2 455 1.21 ozaki $DEBUG && rump.ifconfig -v bridge0 456 1.21 ozaki 457 1.21 ozaki # Protected interfaces: shmif0 shmif2 458 1.21 ozaki # Learning: - 459 1.21 ozaki # Input: broadcast through shmif0 460 1.21 ozaki # Output: shmif1 461 1.21 ozaki reset_if_stats 462 1.21 ozaki atf_check -s exit:0 -o ignore shmif_pcapin broadcast.pcap ${BUS_SHMIF0} 463 1.21 ozaki atf_check -s exit:0 -o match:"input: 1 packet" rump.ifconfig -v shmif0 464 1.21 ozaki atf_check -s exit:0 -o match:"output: 1 packet" rump.ifconfig -v shmif1 465 1.21 ozaki atf_check -s exit:0 -o match:"output: 0 packet" rump.ifconfig -v shmif2 466 1.21 ozaki $DEBUG && rump.ifconfig -v bridge0 467 1.21 ozaki 468 1.21 ozaki # Insert a route 00:aa:aa:aa:aa:aa shmif2 to test forwarding path of known-unicast-frame 469 1.21 ozaki atf_check -s exit:0 $HIJACKING brconfig bridge0 static shmif2 00:aa:aa:aa:aa:aa 470 1.21 ozaki atf_check -s exit:0 -o match:'00:aa:aa:aa:aa:aa shmif2 0 flags=1<STATIC>' \ 471 1.21 ozaki $HIJACKING brconfig bridge0 472 1.21 ozaki $DEBUG && $HIJACKING brconfig bridge0 473 1.21 ozaki 474 1.21 ozaki # Protected interfaces: shmif0 shmif2 475 1.21 ozaki # Learning: 00:aa:aa:aa:aa:aa shmif2 476 1.21 ozaki # Input: broadcast through shmif0 477 1.21 ozaki # Output: - 478 1.21 ozaki reset_if_stats 479 1.21 ozaki atf_check -s exit:0 -o ignore shmif_pcapin unicast.pcap ${BUS_SHMIF0} 480 1.21 ozaki atf_check -s exit:0 -o match:"input: 1 packet" rump.ifconfig -v shmif0 481 1.21 ozaki atf_check -s exit:0 -o match:"output: 0 packet" rump.ifconfig -v shmif1 482 1.21 ozaki atf_check -s exit:0 -o match:"output: 0 packet" rump.ifconfig -v shmif2 483 1.21 ozaki $DEBUG && rump.ifconfig -v bridge0 484 1.21 ozaki 485 1.21 ozaki # Unprotect shmif2 486 1.21 ozaki atf_check -s exit:0 $HIJACKING brconfig bridge0 -protect shmif2 487 1.21 ozaki atf_check -s exit:0 \ 488 1.21 ozaki -o match:"shmif0.+PROTECTED" \ 489 1.21 ozaki -o not-match:"shmif2.+PROTECTED" \ 490 1.21 ozaki -o not-match:"shmif1.+PROTECTED" \ 491 1.21 ozaki $HIJACKING brconfig bridge0 492 1.21 ozaki 493 1.21 ozaki # Protected interfaces: shmif0 494 1.21 ozaki # Learning: 00:aa:aa:aa:aa:aa shmif2 495 1.21 ozaki # Input: broadcast through shmif0 496 1.21 ozaki # Output: shmif2 497 1.21 ozaki reset_if_stats 498 1.21 ozaki atf_check -s exit:0 -o ignore shmif_pcapin unicast.pcap ${BUS_SHMIF0} 499 1.21 ozaki atf_check -s exit:0 -o match:"input: 1 packet" rump.ifconfig -v shmif0 500 1.21 ozaki atf_check -s exit:0 -o match:"output: 0 packet" rump.ifconfig -v shmif1 501 1.21 ozaki atf_check -s exit:0 -o match:"output: 1 packet" rump.ifconfig -v shmif2 502 1.21 ozaki $DEBUG && rump.ifconfig -v bridge0 503 1.21 ozaki 504 1.21 ozaki rump_server_destroy_ifaces 505 1.21 ozaki } 506 1.21 ozaki 507 1.20 ozaki add_test() 508 1.8 ozaki { 509 1.20 ozaki local name=$1 510 1.20 ozaki local desc="$2" 511 1.16 ozaki 512 1.20 ozaki atf_test_case "bridge_${name}" cleanup 513 1.20 ozaki eval "bridge_${name}_head() { 514 1.20 ozaki atf_set descr \"${desc}\" 515 1.20 ozaki atf_set require.progs rump_server 516 1.20 ozaki } 517 1.20 ozaki bridge_${name}_body() { 518 1.20 ozaki test_${name} 519 1.20 ozaki } 520 1.20 ozaki bridge_${name}_cleanup() { 521 1.20 ozaki \$DEBUG && dump 522 1.20 ozaki cleanup 523 1.20 ozaki }" 524 1.20 ozaki atf_add_test_case "bridge_${name}" 525 1.8 ozaki } 526 1.8 ozaki 527 1.1 ozaki atf_init_test_cases() 528 1.1 ozaki { 529 1.18 ozaki 530 1.20 ozaki add_test create_destroy "Tests creating/destroying bridge interfaces" 531 1.20 ozaki add_test ipv4 "Does basic if_bridge tests (IPv4)" 532 1.20 ozaki add_test ipv6 "Does basic if_bridge tests (IPv6)" 533 1.20 ozaki add_test member_ipv4 "Tests if_bridge with members with an IP address (IPv4)" 534 1.20 ozaki add_test member_ipv6 "Tests if_bridge with members with an IP address (IPv6)" 535 1.21 ozaki add_test protection "Tests interface protection" 536 1.1 ozaki } 537