1 1.8 andvar # $NetBSD: t_rtable.sh,v 1.8 2023/03/26 19:10:34 andvar Exp $ 2 1.1 ozaki # 3 1.1 ozaki # Copyright (c) 2017 Internet Initiative Japan 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 34 1.1 ozaki DEBUG=${DEBUG:-false} 35 1.1 ozaki TIMEOUT=5 36 1.1 ozaki 37 1.1 ozaki setup_endpoint() 38 1.1 ozaki { 39 1.1 ozaki local sock=${1} 40 1.1 ozaki local addr=${2} 41 1.1 ozaki local bus=${3} 42 1.1 ozaki local mode=${4} 43 1.1 ozaki 44 1.1 ozaki rump_server_add_iface $sock shmif0 $bus 45 1.1 ozaki export RUMP_SERVER=${sock} 46 1.1 ozaki if [ $mode = "ipv6" ]; then 47 1.1 ozaki atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${addr} 48 1.1 ozaki else 49 1.1 ozaki atf_check -s exit:0 rump.ifconfig shmif0 inet ${addr} netmask 0xffffff00 50 1.1 ozaki fi 51 1.1 ozaki 52 1.1 ozaki atf_check -s exit:0 rump.ifconfig shmif0 up 53 1.1 ozaki $DEBUG && rump.ifconfig shmif0 54 1.1 ozaki } 55 1.1 ozaki 56 1.1 ozaki setup_bridge_server() 57 1.1 ozaki { 58 1.1 ozaki 59 1.1 ozaki rump_server_add_iface $SOCK2 shmif0 bus1 60 1.1 ozaki rump_server_add_iface $SOCK2 shmif1 bus2 61 1.1 ozaki export RUMP_SERVER=$SOCK2 62 1.1 ozaki atf_check -s exit:0 rump.ifconfig shmif0 up 63 1.1 ozaki atf_check -s exit:0 rump.ifconfig shmif1 up 64 1.1 ozaki } 65 1.1 ozaki 66 1.1 ozaki setup() 67 1.1 ozaki { 68 1.1 ozaki 69 1.1 ozaki rump_server_start $SOCK1 bridge 70 1.1 ozaki rump_server_start $SOCK2 bridge 71 1.1 ozaki rump_server_start $SOCK3 bridge 72 1.1 ozaki 73 1.1 ozaki setup_endpoint $SOCK1 $IP1 bus1 ipv4 74 1.1 ozaki setup_endpoint $SOCK3 $IP2 bus2 ipv4 75 1.1 ozaki setup_bridge_server 76 1.1 ozaki } 77 1.1 ozaki 78 1.1 ozaki setup_bridge() 79 1.1 ozaki { 80 1.1 ozaki 81 1.1 ozaki export RUMP_SERVER=$SOCK2 82 1.7 ozaki rump_server_add_iface $SOCK2 bridge0 83 1.1 ozaki atf_check -s exit:0 rump.ifconfig bridge0 up 84 1.1 ozaki 85 1.1 ozaki export LD_PRELOAD=/usr/lib/librumphijack.so 86 1.1 ozaki atf_check -s exit:0 /sbin/brconfig bridge0 add shmif0 87 1.1 ozaki atf_check -s exit:0 /sbin/brconfig bridge0 add shmif1 88 1.1 ozaki /sbin/brconfig bridge0 89 1.1 ozaki unset LD_PRELOAD 90 1.1 ozaki rump.ifconfig shmif0 91 1.1 ozaki rump.ifconfig shmif1 92 1.1 ozaki } 93 1.1 ozaki 94 1.1 ozaki get_number_of_caches() 95 1.1 ozaki { 96 1.1 ozaki 97 1.1 ozaki export RUMP_SERVER=$SOCK2 98 1.1 ozaki export LD_PRELOAD=/usr/lib/librumphijack.so 99 1.4 ozaki echo $(/sbin/brconfig bridge0 addr |wc -l) 100 1.1 ozaki unset LD_PRELOAD 101 1.1 ozaki } 102 1.1 ozaki 103 1.1 ozaki 104 1.1 ozaki atf_test_case bridge_rtable_basic cleanup 105 1.1 ozaki bridge_rtable_basic_head() 106 1.1 ozaki { 107 1.1 ozaki 108 1.8 andvar atf_set "descr" "Tests basic operations of bridge's learning table" 109 1.1 ozaki atf_set "require.progs" "rump_server" 110 1.1 ozaki } 111 1.1 ozaki 112 1.1 ozaki bridge_rtable_basic_body() 113 1.1 ozaki { 114 1.1 ozaki local addr1= addr3= 115 1.1 ozaki 116 1.1 ozaki setup 117 1.1 ozaki setup_bridge 118 1.1 ozaki 119 1.1 ozaki # Get MAC addresses of the endpoints. 120 1.1 ozaki addr1=$(get_macaddr $SOCK1 shmif0) 121 1.1 ozaki addr3=$(get_macaddr $SOCK3 shmif0) 122 1.1 ozaki 123 1.1 ozaki # Confirm there is no MAC address caches. 124 1.1 ozaki export RUMP_SERVER=$SOCK2 125 1.1 ozaki export LD_PRELOAD=/usr/lib/librumphijack.so 126 1.1 ozaki $DEBUG && /sbin/brconfig bridge0 127 1.1 ozaki atf_check -s exit:0 -o not-match:"$addr1" /sbin/brconfig bridge0 128 1.1 ozaki atf_check -s exit:0 -o not-match:"$addr3" /sbin/brconfig bridge0 129 1.1 ozaki unset LD_PRELOAD 130 1.1 ozaki 131 1.1 ozaki # Make the bridge learn the MAC addresses of the endpoints. 132 1.1 ozaki export RUMP_SERVER=$SOCK1 133 1.1 ozaki atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP2 134 1.1 ozaki unset RUMP_SERVER 135 1.1 ozaki 136 1.1 ozaki # Tests the addresses are in the cache. 137 1.1 ozaki export RUMP_SERVER=$SOCK2 138 1.1 ozaki export LD_PRELOAD=/usr/lib/librumphijack.so 139 1.1 ozaki $DEBUG && /sbin/brconfig bridge0 140 1.1 ozaki atf_check -s exit:0 -o match:"$addr1 shmif0" /sbin/brconfig bridge0 141 1.1 ozaki atf_check -s exit:0 -o match:"$addr3 shmif1" /sbin/brconfig bridge0 142 1.1 ozaki 143 1.1 ozaki # Tests brconfig deladdr 144 1.1 ozaki atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 deladdr "$addr1" 145 1.1 ozaki atf_check -s exit:0 -o not-match:"$addr1 shmif0" /sbin/brconfig bridge0 146 1.1 ozaki atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 deladdr "$addr3" 147 1.1 ozaki atf_check -s exit:0 -o not-match:"$addr3 shmif1" /sbin/brconfig bridge0 148 1.1 ozaki unset LD_PRELOAD 149 1.1 ozaki 150 1.1 ozaki rump_server_destroy_ifaces 151 1.1 ozaki } 152 1.1 ozaki 153 1.1 ozaki bridge_rtable_basic_cleanup() 154 1.1 ozaki { 155 1.1 ozaki 156 1.1 ozaki $DEBUG && dump 157 1.1 ozaki cleanup 158 1.1 ozaki } 159 1.1 ozaki 160 1.1 ozaki 161 1.1 ozaki atf_test_case bridge_rtable_flush cleanup 162 1.1 ozaki bridge_rtable_flush_head() 163 1.1 ozaki { 164 1.1 ozaki 165 1.1 ozaki atf_set "descr" "Tests brconfig flush" 166 1.1 ozaki atf_set "require.progs" "rump_server" 167 1.1 ozaki } 168 1.1 ozaki 169 1.1 ozaki bridge_rtable_flush_body() 170 1.1 ozaki { 171 1.1 ozaki local addr1= addr3= 172 1.3 ozaki local n= 173 1.1 ozaki 174 1.1 ozaki setup 175 1.1 ozaki setup_bridge 176 1.1 ozaki 177 1.1 ozaki # Get MAC addresses of the endpoints. 178 1.1 ozaki addr1=$(get_macaddr $SOCK1 shmif0) 179 1.1 ozaki addr3=$(get_macaddr $SOCK3 shmif0) 180 1.1 ozaki 181 1.1 ozaki # Make the bridge learn the MAC addresses of the endpoints. 182 1.1 ozaki export RUMP_SERVER=$SOCK1 183 1.1 ozaki atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP2 184 1.1 ozaki unset RUMP_SERVER 185 1.1 ozaki 186 1.1 ozaki # Tests the addresses are in the cache. 187 1.1 ozaki export RUMP_SERVER=$SOCK2 188 1.1 ozaki export LD_PRELOAD=/usr/lib/librumphijack.so 189 1.1 ozaki $DEBUG && /sbin/brconfig bridge0 190 1.1 ozaki atf_check -s exit:0 -o match:"$addr1 shmif0" /sbin/brconfig bridge0 191 1.1 ozaki atf_check -s exit:0 -o match:"$addr3 shmif1" /sbin/brconfig bridge0 192 1.1 ozaki 193 1.1 ozaki # Tests brconfig flush. 194 1.1 ozaki atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 flush 195 1.1 ozaki atf_check -s exit:0 -o not-match:"$addr1 shmif0" /sbin/brconfig bridge0 196 1.1 ozaki atf_check -s exit:0 -o not-match:"$addr3 shmif1" /sbin/brconfig bridge0 197 1.1 ozaki unset LD_PRELOAD 198 1.1 ozaki 199 1.3 ozaki # Add extra interfaces and addresses 200 1.3 ozaki export RUMP_SERVER=$SOCK1 201 1.3 ozaki rump_server_add_iface $SOCK1 shmif1 bus1 202 1.3 ozaki atf_check -s exit:0 rump.ifconfig shmif1 10.0.0.11/24 203 1.3 ozaki atf_check -s exit:0 rump.ifconfig -w 10 204 1.3 ozaki 205 1.3 ozaki export RUMP_SERVER=$SOCK3 206 1.3 ozaki rump_server_add_iface $SOCK3 shmif1 bus2 207 1.3 ozaki atf_check -s exit:0 rump.ifconfig shmif1 10.0.0.12/24 208 1.3 ozaki atf_check -s exit:0 rump.ifconfig -w 10 209 1.3 ozaki 210 1.3 ozaki # Let cache entries 211 1.3 ozaki export RUMP_SERVER=$SOCK1 212 1.3 ozaki atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 10.0.0.12 213 1.3 ozaki export RUMP_SERVER=$SOCK3 214 1.3 ozaki atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 10.0.0.11 215 1.3 ozaki 216 1.3 ozaki export RUMP_SERVER=$SOCK2 217 1.3 ozaki export LD_PRELOAD=/usr/lib/librumphijack.so 218 1.3 ozaki $DEBUG && /sbin/brconfig bridge0 219 1.3 ozaki n=$(get_number_of_caches) 220 1.3 ozaki atf_check_equal $n 4 221 1.3 ozaki 222 1.3 ozaki atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 flush 223 1.3 ozaki n=$(get_number_of_caches) 224 1.3 ozaki atf_check_equal $n 0 225 1.3 ozaki unset LD_PRELOAD 226 1.3 ozaki 227 1.1 ozaki rump_server_destroy_ifaces 228 1.1 ozaki } 229 1.1 ozaki 230 1.1 ozaki bridge_rtable_flush_cleanup() 231 1.1 ozaki { 232 1.1 ozaki 233 1.1 ozaki $DEBUG && dump 234 1.1 ozaki cleanup 235 1.1 ozaki } 236 1.1 ozaki 237 1.1 ozaki 238 1.1 ozaki atf_test_case bridge_rtable_timeout cleanup 239 1.1 ozaki bridge_rtable_timeout_head() 240 1.1 ozaki { 241 1.1 ozaki 242 1.1 ozaki atf_set "descr" "Tests cache timeout of bridge's learning table" 243 1.1 ozaki atf_set "require.progs" "rump_server" 244 1.1 ozaki } 245 1.1 ozaki 246 1.1 ozaki bridge_rtable_timeout_body() 247 1.1 ozaki { 248 1.1 ozaki local addr1= addr3= 249 1.1 ozaki local timeout=5 250 1.1 ozaki 251 1.1 ozaki setup 252 1.1 ozaki setup_bridge 253 1.1 ozaki 254 1.1 ozaki # Get MAC addresses of the endpoints. 255 1.1 ozaki addr1=$(get_macaddr $SOCK1 shmif0) 256 1.1 ozaki addr3=$(get_macaddr $SOCK3 shmif0) 257 1.1 ozaki 258 1.1 ozaki # Tests brconfig timeout. 259 1.1 ozaki export RUMP_SERVER=$SOCK2 260 1.1 ozaki export LD_PRELOAD=/usr/lib/librumphijack.so 261 1.1 ozaki atf_check -s exit:0 -o match:"timeout: 1200" /sbin/brconfig bridge0 262 1.1 ozaki atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 timeout $timeout 263 1.1 ozaki atf_check -s exit:0 -o match:"timeout: $timeout" /sbin/brconfig bridge0 264 1.1 ozaki unset LD_PRELOAD 265 1.1 ozaki 266 1.1 ozaki # Make the bridge learn the MAC addresses of the endpoints. 267 1.1 ozaki export RUMP_SERVER=$SOCK1 268 1.1 ozaki atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP2 269 1.1 ozaki unset RUMP_SERVER 270 1.1 ozaki 271 1.1 ozaki # Tests the addresses are in the cache. 272 1.1 ozaki export RUMP_SERVER=$SOCK2 273 1.1 ozaki export LD_PRELOAD=/usr/lib/librumphijack.so 274 1.1 ozaki $DEBUG && /sbin/brconfig bridge0 275 1.1 ozaki atf_check -s exit:0 -o match:"$addr1 shmif0" /sbin/brconfig bridge0 276 1.1 ozaki atf_check -s exit:0 -o match:"$addr3 shmif1" /sbin/brconfig bridge0 277 1.1 ozaki 278 1.1 ozaki # TODO: cache expiration 279 1.1 ozaki # The initial timeout value of a cache is changed to $timeout and 280 1.1 ozaki # after $timeout elapsed the cache is ready to be sweeped. However, 281 1.1 ozaki # the GC of rtable runs every 5 minutes and the cache remains until 282 1.1 ozaki # then. Should we have a sysctl to change the period? 283 1.1 ozaki 284 1.1 ozaki #sleep $(($timeout + 2)) 285 1.1 ozaki # 286 1.1 ozaki ## Tests the addresses are not in the cache. 287 1.1 ozaki #export RUMP_SERVER=$SOCK2 288 1.1 ozaki #export LD_PRELOAD=/usr/lib/librumphijack.so 289 1.1 ozaki #$DEBUG && /sbin/brconfig bridge0 290 1.1 ozaki #atf_check -s exit:0 -o not-match:"$addr1 shmif0" /sbin/brconfig bridge0 291 1.1 ozaki #atf_check -s exit:0 -o not-match:"$addr3 shmif1" /sbin/brconfig bridge0 292 1.1 ozaki 293 1.1 ozaki rump_server_destroy_ifaces 294 1.1 ozaki } 295 1.1 ozaki 296 1.1 ozaki bridge_rtable_timeout_cleanup() 297 1.1 ozaki { 298 1.1 ozaki 299 1.1 ozaki $DEBUG && dump 300 1.1 ozaki cleanup 301 1.1 ozaki } 302 1.1 ozaki 303 1.1 ozaki 304 1.1 ozaki atf_test_case bridge_rtable_maxaddr cleanup 305 1.1 ozaki bridge_rtable_maxaddr_head() 306 1.1 ozaki { 307 1.1 ozaki 308 1.1 ozaki atf_set "descr" "Tests brconfig maxaddr" 309 1.1 ozaki atf_set "require.progs" "rump_server" 310 1.1 ozaki } 311 1.1 ozaki 312 1.1 ozaki bridge_rtable_maxaddr_body() 313 1.1 ozaki { 314 1.1 ozaki local addr1= addr3= 315 1.1 ozaki 316 1.1 ozaki setup 317 1.1 ozaki setup_bridge 318 1.1 ozaki 319 1.1 ozaki # Get MAC addresses of the endpoints. 320 1.1 ozaki addr1=$(get_macaddr $SOCK1 shmif0) 321 1.1 ozaki addr3=$(get_macaddr $SOCK3 shmif0) 322 1.1 ozaki 323 1.1 ozaki # Fill the MAC addresses of the endpoints. 324 1.1 ozaki export RUMP_SERVER=$SOCK1 325 1.1 ozaki atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP2 326 1.1 ozaki export RUMP_SERVER=$SOCK2 327 1.1 ozaki export LD_PRELOAD=/usr/lib/librumphijack.so 328 1.1 ozaki /sbin/brconfig bridge0 329 1.1 ozaki atf_check -s exit:0 -o match:"$addr1 shmif0" /sbin/brconfig bridge0 330 1.1 ozaki atf_check -s exit:0 -o match:"$addr3 shmif1" /sbin/brconfig bridge0 331 1.1 ozaki 332 1.1 ozaki # Check the default # of caches is 100 333 1.1 ozaki atf_check -s exit:0 -o match:"max cache: 100" /sbin/brconfig bridge0 334 1.1 ozaki 335 1.1 ozaki # Test two MAC addresses are cached 336 1.1 ozaki n=$(get_number_of_caches) 337 1.1 ozaki atf_check_equal $n 2 338 1.1 ozaki 339 1.1 ozaki # Limit # of caches to one 340 1.1 ozaki atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 maxaddr 1 341 1.1 ozaki atf_check -s exit:0 -o match:"max cache: 1" /sbin/brconfig bridge0 342 1.1 ozaki /sbin/brconfig bridge0 343 1.1 ozaki 344 1.6 ozaki # Check a cache is flushed out 345 1.6 ozaki n=$(get_number_of_caches) 346 1.6 ozaki atf_check_equal $n 1 347 1.6 ozaki 348 1.6 ozaki # Test a new address cache is not created 349 1.6 ozaki export RUMP_SERVER=$SOCK1 350 1.6 ozaki atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP2 351 1.6 ozaki export RUMP_SERVER=$SOCK2 352 1.1 ozaki n=$(get_number_of_caches) 353 1.1 ozaki atf_check_equal $n 1 354 1.1 ozaki 355 1.1 ozaki # Increase # of caches to two 356 1.1 ozaki atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 maxaddr 2 357 1.1 ozaki atf_check -s exit:0 -o match:"max cache: 2" /sbin/brconfig bridge0 358 1.1 ozaki unset LD_PRELOAD 359 1.1 ozaki 360 1.1 ozaki # Test we can cache two addresses again 361 1.1 ozaki export RUMP_SERVER=$SOCK1 362 1.1 ozaki atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP2 363 1.1 ozaki export RUMP_SERVER=$SOCK2 364 1.1 ozaki export LD_PRELOAD=/usr/lib/librumphijack.so 365 1.1 ozaki /sbin/brconfig bridge0 366 1.1 ozaki atf_check -s exit:0 -o match:"$addr1 shmif0" /sbin/brconfig bridge0 367 1.1 ozaki atf_check -s exit:0 -o match:"$addr3 shmif1" /sbin/brconfig bridge0 368 1.1 ozaki unset LD_PRELOAD 369 1.1 ozaki 370 1.1 ozaki rump_server_destroy_ifaces 371 1.1 ozaki } 372 1.1 ozaki 373 1.1 ozaki bridge_rtable_maxaddr_cleanup() 374 1.1 ozaki { 375 1.1 ozaki 376 1.1 ozaki $DEBUG && dump 377 1.1 ozaki cleanup 378 1.1 ozaki } 379 1.1 ozaki 380 1.1 ozaki 381 1.2 ozaki atf_test_case bridge_rtable_delete_member cleanup 382 1.2 ozaki bridge_rtable_delete_member_head() 383 1.2 ozaki { 384 1.2 ozaki 385 1.2 ozaki atf_set "descr" "Tests belonging rtable entries are removed on deleting an interface" 386 1.2 ozaki atf_set "require.progs" "rump_server" 387 1.2 ozaki } 388 1.2 ozaki 389 1.2 ozaki bridge_rtable_delete_member_body() 390 1.2 ozaki { 391 1.2 ozaki local addr10= addr30= addr11= addr31= 392 1.2 ozaki local n= 393 1.2 ozaki 394 1.2 ozaki setup 395 1.2 ozaki setup_bridge 396 1.2 ozaki 397 1.2 ozaki # Add extra interfaces and addresses 398 1.2 ozaki export RUMP_SERVER=$SOCK1 399 1.2 ozaki rump_server_add_iface $SOCK1 shmif1 bus1 400 1.2 ozaki atf_check -s exit:0 rump.ifconfig shmif1 10.0.0.11/24 401 1.2 ozaki atf_check -s exit:0 rump.ifconfig -w 10 402 1.2 ozaki 403 1.2 ozaki export RUMP_SERVER=$SOCK3 404 1.2 ozaki rump_server_add_iface $SOCK3 shmif1 bus2 405 1.2 ozaki atf_check -s exit:0 rump.ifconfig shmif1 10.0.0.12/24 406 1.2 ozaki atf_check -s exit:0 rump.ifconfig -w 10 407 1.2 ozaki 408 1.2 ozaki # Get MAC addresses of the endpoints. 409 1.2 ozaki addr10=$(get_macaddr $SOCK1 shmif0) 410 1.2 ozaki addr30=$(get_macaddr $SOCK3 shmif0) 411 1.2 ozaki addr11=$(get_macaddr $SOCK1 shmif1) 412 1.2 ozaki addr31=$(get_macaddr $SOCK3 shmif1) 413 1.2 ozaki 414 1.2 ozaki # Make the bridge learn the MAC addresses of the endpoints. 415 1.2 ozaki export RUMP_SERVER=$SOCK1 416 1.2 ozaki atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 10.0.0.12 417 1.2 ozaki export RUMP_SERVER=$SOCK3 418 1.2 ozaki atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 10.0.0.11 419 1.2 ozaki 420 1.2 ozaki export RUMP_SERVER=$SOCK2 421 1.2 ozaki export LD_PRELOAD=/usr/lib/librumphijack.so 422 1.2 ozaki $DEBUG && /sbin/brconfig bridge0 423 1.2 ozaki atf_check -s exit:0 -o match:"$addr10 shmif0" /sbin/brconfig bridge0 424 1.2 ozaki atf_check -s exit:0 -o match:"$addr11 shmif0" /sbin/brconfig bridge0 425 1.2 ozaki atf_check -s exit:0 -o match:"$addr30 shmif1" /sbin/brconfig bridge0 426 1.2 ozaki atf_check -s exit:0 -o match:"$addr31 shmif1" /sbin/brconfig bridge0 427 1.2 ozaki 428 1.2 ozaki atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 delete shmif0 429 1.2 ozaki atf_check -s exit:0 -o not-match:"$addr10 shmif0" /sbin/brconfig bridge0 430 1.2 ozaki atf_check -s exit:0 -o not-match:"$addr11 shmif0" /sbin/brconfig bridge0 431 1.2 ozaki atf_check -s exit:0 -o match:"$addr30 shmif1" /sbin/brconfig bridge0 432 1.2 ozaki atf_check -s exit:0 -o match:"$addr31 shmif1" /sbin/brconfig bridge0 433 1.2 ozaki 434 1.2 ozaki atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 delete shmif1 435 1.2 ozaki atf_check -s exit:0 -o not-match:"$addr10 shmif0" /sbin/brconfig bridge0 436 1.2 ozaki atf_check -s exit:0 -o not-match:"$addr11 shmif0" /sbin/brconfig bridge0 437 1.2 ozaki atf_check -s exit:0 -o not-match:"$addr30 shmif1" /sbin/brconfig bridge0 438 1.2 ozaki atf_check -s exit:0 -o not-match:"$addr31 shmif1" /sbin/brconfig bridge0 439 1.2 ozaki 440 1.2 ozaki rump_server_destroy_ifaces 441 1.2 ozaki } 442 1.2 ozaki 443 1.2 ozaki bridge_rtable_delete_member_cleanup() 444 1.2 ozaki { 445 1.2 ozaki 446 1.2 ozaki $DEBUG && dump 447 1.2 ozaki cleanup 448 1.2 ozaki } 449 1.2 ozaki 450 1.2 ozaki 451 1.4 ozaki atf_test_case bridge_rtable_manyaddrs cleanup 452 1.4 ozaki bridge_rtable_manyaddrs_head() 453 1.4 ozaki { 454 1.4 ozaki 455 1.4 ozaki atf_set "descr" "Tests brconfig addr under many MAC addresses" 456 1.4 ozaki atf_set "require.progs" "rump_server" 457 1.5 gson atf_set "timeout" "1200" 458 1.4 ozaki } 459 1.4 ozaki 460 1.4 ozaki bridge_rtable_manyaddrs_body() 461 1.4 ozaki { 462 1.4 ozaki local addr= 463 1.4 ozaki 464 1.4 ozaki setup 465 1.4 ozaki setup_bridge 466 1.4 ozaki 467 1.4 ozaki export RUMP_SERVER=$SOCK2 468 1.4 ozaki export LD_PRELOAD=/usr/lib/librumphijack.so 469 1.4 ozaki atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 maxaddr 1024 470 1.4 ozaki 471 1.4 ozaki # Fill the MAC addresses 472 1.4 ozaki for i in 1 2 3 4; do 473 1.4 ozaki for j in $(seq 0 255); do 474 1.4 ozaki addr="00:11:22:33:4$i:$(printf "%02x" $j)" 475 1.4 ozaki atf_check -s exit:0 -o empty \ 476 1.4 ozaki /sbin/brconfig bridge0 static shmif0 $addr 477 1.4 ozaki done 478 1.4 ozaki 479 1.4 ozaki n=$(get_number_of_caches) 480 1.4 ozaki atf_check_equal $n $((i * 256)) 481 1.4 ozaki done 482 1.4 ozaki 483 1.4 ozaki 484 1.4 ozaki rump_server_destroy_ifaces 485 1.4 ozaki } 486 1.4 ozaki 487 1.4 ozaki bridge_rtable_manyaddrs_cleanup() 488 1.4 ozaki { 489 1.4 ozaki 490 1.4 ozaki $DEBUG && dump 491 1.4 ozaki cleanup 492 1.4 ozaki } 493 1.4 ozaki 494 1.4 ozaki 495 1.1 ozaki atf_init_test_cases() 496 1.1 ozaki { 497 1.1 ozaki 498 1.1 ozaki atf_add_test_case bridge_rtable_basic 499 1.1 ozaki atf_add_test_case bridge_rtable_flush 500 1.1 ozaki atf_add_test_case bridge_rtable_timeout 501 1.1 ozaki atf_add_test_case bridge_rtable_maxaddr 502 1.2 ozaki atf_add_test_case bridge_rtable_delete_member 503 1.4 ozaki atf_add_test_case bridge_rtable_manyaddrs 504 1.1 ozaki # TODO: brconfig static/flushall/discover/learn 505 1.1 ozaki } 506