1231858Sbz#!/bin/sh 2231858Sbz#- 3231858Sbz# Copyright (c) 2012 Cisco Systems, Inc. 4231858Sbz# All rights reserved. 5231858Sbz# 6231858Sbz# This software was developed by Bjoern Zeeb under contract to 7231858Sbz# Cisco Systems, Inc.. 8231858Sbz# 9231858Sbz# Redistribution and use in source and binary forms, with or without 10231858Sbz# modification, are permitted provided that the following conditions 11231858Sbz# are met: 12231858Sbz# 1. Redistributions of source code must retain the above copyright 13231858Sbz# notice, this list of conditions and the following disclaimer. 14231858Sbz# 2. Redistributions in binary form must reproduce the above copyright 15231858Sbz# notice, this list of conditions and the following disclaimer in the 16231858Sbz# documentation and/or other materials provided with the distribution. 17231858Sbz# 18231858Sbz# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 19231858Sbz# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20231858Sbz# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21231858Sbz# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 22231858Sbz# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23231858Sbz# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 24231858Sbz# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25231858Sbz# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 26231858Sbz# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 27231858Sbz# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 28231858Sbz# SUCH DAMAGE. 29231858Sbz# 30231858Sbz# $FreeBSD$ 31231858Sbz# 32231858Sbz 33231858Sbz# We will use the RFC5180 (and Errata) benchmarking working group prefix 34231858Sbz# 2001:0002::/48 for testing. 35231858SbzPREFIX="2001:2:" 36231858Sbz 37231858Sbz# Set IFACE to the real interface you want to run the test on. 38231858Sbz: ${IFACE:=lo0} 39231858Sbz 40231858Sbz# Control port we use to exchange messages between nodes to sync. tests, etc. 41231858Sbz: ${CTRLPORT:=6666} 42231858Sbz 43231858Sbz# Get the number of FIBs from the kernel. 44231858SbzRT_NUMFIBS=`sysctl -n net.fibs` 45231858Sbz 46231858SbzPEERADDR="2001:2:ff00::1" 47231858SbzOURADDR="2001:2:ff00::2" 48231858Sbz 49231858SbzOURLINKLOCAL="" 50231858SbzPEERLINKLOCAL="" 51231858Sbz 52231858Sbz# By default all commands must succeed. Individual tests may disable this 53231858Sbz# temporary. 54231858Sbzset -e 55231858Sbz 56231858Sbz# Debug magic. 57231858Sbzcase "${DEBUG}" in 58231858Sbz42) set -x ;; 59231858Sbzesac 60231858Sbz 61231858Sbz 62231858Sbz 63231858Sbz# 64231858Sbz# Helper functions. 65231858Sbz# 66231858Sbz 67231858Sbz# Function to avoid prelist races adding and deleting prefixes too quickly. 68231858Sbzdelay() 69231858Sbz{ 70231858Sbz 71231858Sbz # sleep 1 is too long. 72231858Sbz touch /tmp/foo || true 73232114Sbz stat /tmp/foo > /dev/null 2>&1 || true 74231858Sbz} 75231858Sbz 76231858Sbzcheck_rc() 77231858Sbz{ 78231858Sbz local _rc _exp _testno _testname _msg _r 79231858Sbz _rc=$1 80231858Sbz _exp=$2 81231858Sbz _testno=$3 82231858Sbz _testname="$4" 83231858Sbz _msg="$5" 84231858Sbz 85231858Sbz _r="not ok" 86231858Sbz if test ${_rc} -eq ${_exp}; then 87231858Sbz _r="ok" 88231858Sbz fi 89231858Sbz echo "${_r} ${_testno} ${_testname} # ${_msg} ${_rc}" 90231858Sbz} 91231858Sbz 92231858Sbzprint_debug() 93231858Sbz{ 94231858Sbz local _msg 95231858Sbz _msg="$*" 96231858Sbz 97231858Sbz case ${DEBUG} in 98231858Sbz ''|0) ;; 99231858Sbz *) echo "DEBUG: ${_msg}" >&2 ;; 100231858Sbz esac 101231858Sbz} 102231858Sbz 103231858Sbzdie() 104231858Sbz{ 105231858Sbz local _msg 106231858Sbz _msg="$*" 107231858Sbz 108231858Sbz echo "ERROR: ${_msg}" >&2 109231858Sbz exit 1 110231858Sbz} 111231858Sbz 112231858Sbz# 113231858Sbz# Test functions. 114231858Sbz# 115231858Sbz 116231858Sbz# Setup our side and wait for the peer to tell us that it is ready. 117231858Sbzwait_remote_ready() 118231858Sbz{ 119231858Sbz local _greeting _keyword _fibs _linklocal i 120231858Sbz 121231858Sbz print_debug "Setting up interface ${IFACE}" 122231858Sbz ifconfig ${IFACE} inet6 ${OURADDR}/64 -alias > /dev/null 2>&1 || true 123231858Sbz delay 124231858Sbz ifconfig ${IFACE} inet6 ${OURADDR}/64 alias up 125231858Sbz i=0 126231858Sbz while test ${i} -lt ${RT_NUMFIBS}; do 127231858Sbz ifconfig ${IFACE} inet6 2001:2:${i}::2/64 -alias \ 128231858Sbz > /dev/null 2>&1 || true 129231858Sbz delay 130231858Sbz i=$((i + 1)) 131231858Sbz done 132231858Sbz OURLINKLOCAL=`ifconfig ${IFACE} | awk '/inet6 fe80:/ { print $2 }'` 133231858Sbz 134231858Sbz # Let things settle. 135231858Sbz print_debug "Waiting 4 seconds for things to settle" 136231858Sbz sleep 4 137231858Sbz 138231858Sbz # Wait for the remote to connect and start things. 139231858Sbz # We tell it the magic keyword, our number of FIBs and our link-local. 140231858Sbz # It already knows our global address. 141231858Sbz _greeting=`echo "SETUP ${RT_NUMFIBS} ${OURLINKLOCAL}" | \ 142231858Sbz nc -6 -l ${CTRLPORT}` 143231858Sbz 144231858Sbz read _keyword _fibs _linklocal <<EOI 145231858Sbz${_greeting} 146231858SbzEOI 147231858Sbz print_debug "_keyword=${_keyword}" 148231858Sbz print_debug "_fibs=${_fibs}" 149231858Sbz print_debug "_linklocal=${_linklocal}" 150231858Sbz case ${_keyword} in 151231858Sbz SETUP) ;; 152231858Sbz *) die "Got invalid keyword in greeting: ${_greeting}" 153231858Sbz ;; 154231858Sbz esac 155231858Sbz if test ${_fibs} -ne ${RT_NUMFIBS}; then 156231858Sbz die "Number of FIBs not matching ours (${RT_NUMFIBS}) in" \ 157231858Sbz "greeting: ${_greeting}" 158231858Sbz fi 159231858Sbz PEERLINKLOCAL=${_linklocal} 160231858Sbz 161231858Sbz print_debug "Successfully received greeting. Peer at ${PEERLINKLOCAL}" 162231858Sbz} 163231858Sbz 164231858Sbzcleanup() 165231858Sbz{ 166231858Sbz 167231858Sbz print_debug "Removing address from interface ${IFACE}" 168231858Sbz ifconfig ${IFACE} inet6 ${OURADDR}/64 -alias 169231858Sbz delay 170231858Sbz} 171231858Sbz 172231858Sbz################################################################################ 173231858Sbz# 174231858Sbztesttx_icmp6_connected() 175231858Sbz{ 176231858Sbz local _opts 177231858Sbz 178231858Sbz _opts="" 179231858Sbz case ${DEBUG} in 180231858Sbz ''|0) ;; 181231858Sbz 42) _opts="-d -d" ;; 182231858Sbz *) _opts="-d" ;; 183231858Sbz esac 184231858Sbz print_debug "./reflect -p ${CTRLPORT} -T TCP6 " \ 185231858Sbz "-t testtx_icmp6_connected ${_opts}" 186231858Sbz ./reflect -p ${CTRLPORT} -T TCP6 -t testtx_icmp6_connected ${_opts} 187231858Sbz print_debug "reflect terminated without error." 188231858Sbz} 189231858Sbz 190231858Sbztesttx_tcp6_connected() 191231858Sbz{ 192231858Sbz local _opts 193231858Sbz 194231858Sbz _opts="" 195231858Sbz case ${DEBUG} in 196231858Sbz ''|0) ;; 197231858Sbz 42) _opts="-d -d" ;; 198231858Sbz *) _opts="-d" ;; 199231858Sbz esac 200231858Sbz print_debug "./reflect -p ${CTRLPORT} -T TCP6 " \ 201231858Sbz "-t testtx_tcp6_connected ${_opts}" 202231858Sbz ./reflect -p ${CTRLPORT} -T TCP6 -t testtx_tcp6_connected ${_opts} 203231858Sbz print_debug "reflect terminated without error." 204231858Sbz} 205231858Sbz 206231858Sbztesttx_udp6_connected() 207231858Sbz{ 208231858Sbz local _opts 209231858Sbz 210231858Sbz _opts="" 211231858Sbz case ${DEBUG} in 212231858Sbz ''|0) ;; 213231858Sbz 42) _opts="-d -d" ;; 214231858Sbz *) _opts="-d" ;; 215231858Sbz esac 216231858Sbz print_debug "./reflect -p ${CTRLPORT} -T UDP6 " \ 217231858Sbz "-t testtx_udp6_connected ${_opts}" 218231858Sbz ./reflect -p ${CTRLPORT} -T UDP6 -t testtx_udp6_connected ${_opts} 219231858Sbz print_debug "reflect terminated without error." 220231858Sbz} 221231858Sbz 222231858Sbz################################################################################ 223231858Sbz# 224231858Sbztesttx_icmp6_connected_blackhole() 225231858Sbz{ 226232114Sbz local _opts fib 227231858Sbz 228231858Sbz _opts="" 229231858Sbz case ${DEBUG} in 230231858Sbz ''|0) ;; 231231858Sbz 42) _opts="-d -d" ;; 232231858Sbz *) _opts="-d" ;; 233231858Sbz esac 234231858Sbz 235232114Sbz fib=0 236232114Sbz while test ${fib} -lt ${RT_NUMFIBS}; do 237231858Sbz print_debug "./reflect -p ${CTRLPORT} -T TCP6 " \ 238232114Sbz "-t testtx_icmp6_connected_blackhole${fib} ${_opts}" 239231858Sbz ./reflect -p ${CTRLPORT} -T TCP6 \ 240232114Sbz -t testtx_icmp6_connected_blackhole${fib} ${_opts} 241231858Sbz print_debug "reflect terminated without error." 242232114Sbz fib=$((fib + 1)) 243231858Sbz done 244231858Sbz} 245231858Sbz 246231858Sbztesttx_tcp6_connected_blackhole() 247231858Sbz{ 248232114Sbz local _opts fib 249231858Sbz 250231858Sbz _opts="" 251231858Sbz case ${DEBUG} in 252231858Sbz ''|0) ;; 253231858Sbz 42) _opts="-d -d" ;; 254231858Sbz *) _opts="-d" ;; 255231858Sbz esac 256231858Sbz 257232114Sbz fib=0 258232114Sbz while test ${fib} -lt ${RT_NUMFIBS}; do 259231858Sbz print_debug "./reflect -p ${CTRLPORT} -T TCP6 " \ 260232114Sbz "-t testtx_tcp6_connected_blackhole${fib} ${_opts}" 261231858Sbz ./reflect -p ${CTRLPORT} -T TCP6 \ 262232114Sbz -t testtx_tcp6_connected_blackhole${fib} ${_opts} 263231858Sbz print_debug "reflect terminated without error." 264232114Sbz fib=$((fib + 1)) 265231858Sbz done 266231858Sbz} 267231858Sbz 268231858Sbztesttx_udp6_connected_blackhole() 269231858Sbz{ 270232114Sbz local _opts fib 271231858Sbz 272231858Sbz _opts="" 273231858Sbz case ${DEBUG} in 274231858Sbz ''|0) ;; 275231858Sbz 42) _opts="-d -d" ;; 276231858Sbz *) _opts="-d" ;; 277231858Sbz esac 278231858Sbz 279232114Sbz fib=0 280232114Sbz while test ${fib} -lt ${RT_NUMFIBS}; do 281231858Sbz print_debug "./reflect -p ${CTRLPORT} -T UDP6 " \ 282232114Sbz "-t testtx_udp6_connected_blackhole${fib} ${_opts}" 283231858Sbz ./reflect -p ${CTRLPORT} -T UDP6 \ 284232114Sbz -t testtx_udp6_connected_blackhole${fib} ${_opts} 285231858Sbz print_debug "reflect terminated without error." 286232114Sbz fib=$((fib + 1)) 287231858Sbz done 288231858Sbz} 289231858Sbz 290231858Sbz################################################################################ 291231858Sbz# 292231858Sbztesttx_ulp6_connected_transfernets() 293231858Sbz{ 294232114Sbz local _opts fib _n _o 295231858Sbz _n="$1" 296231858Sbz _o="$2" 297231858Sbz 298231858Sbz _opts="" 299231858Sbz case ${DEBUG} in 300231858Sbz ''|0) ;; 301231858Sbz 42) _opts="-d -d" ;; 302231858Sbz *) _opts="-d" ;; 303231858Sbz esac 304231858Sbz 305231858Sbz # Setup transfer networks. 306232114Sbz fib=0 307232114Sbz while test ${fib} -lt ${RT_NUMFIBS}; do 308232114Sbz setfib -F${fib} \ 309232114Sbz ifconfig ${IFACE} inet6 2001:2:${fib}::2/64 alias 310232114Sbz fib=$((fib + 1)) 311231858Sbz done 312231858Sbz 313232114Sbz fib=0 314232114Sbz while test ${fib} -lt ${RT_NUMFIBS}; do 315232114Sbz print_debug "./reflect -p ${CTRLPORT} -T ${_o} -t ${_n}${fib} ${_opts}" 316232114Sbz ./reflect -p ${CTRLPORT} -T ${_o} -t ${_n}${fib} ${_opts} 317231858Sbz print_debug "reflect terminated without error." 318232114Sbz fib=$((fib + 1)) 319231858Sbz done 320231858Sbz 321231858Sbz # Cleanup transfer networks. 322232114Sbz fib=0 323232114Sbz while test ${fib} -lt ${RT_NUMFIBS}; do 324232114Sbz setfib -F${fib} \ 325232114Sbz ifconfig ${IFACE} inet6 2001:2:${fib}::2/64 -alias 326231858Sbz delay 327232114Sbz fib=$((fib + 1)) 328231858Sbz done 329231858Sbz} 330231858Sbz 331231858Sbztesttx_icmp6_connected_transfernets() 332231858Sbz{ 333231858Sbz 334231858Sbz testtx_ulp6_connected_transfernets \ 335231858Sbz "testtx_icmp6_connected_transfernets" "TCP6" 336231858Sbz} 337231858Sbz 338231858Sbztesttx_tcp6_connected_transfernets() 339231858Sbz{ 340231858Sbz 341231858Sbz testtx_ulp6_connected_transfernets \ 342231858Sbz "testtx_tcp6_connected_transfernets" "TCP6" 343231858Sbz} 344231858Sbz 345231858Sbztesttx_udp6_connected_transfernets() 346231858Sbz{ 347231858Sbz 348231858Sbz testtx_ulp6_connected_transfernets \ 349231858Sbz "testtx_udp6_connected_transfernets" "UDP6" 350231858Sbz} 351231858Sbz 352231858Sbztesttx_icmp6_connected_ifconfig_transfernets() 353231858Sbz{ 354231858Sbz 355231858Sbz testtx_ulp6_connected_transfernets \ 356231858Sbz "testtx_icmp6_connected_ifconfig_transfernets" "TCP6" 357231858Sbz} 358231858Sbz 359231858Sbztesttx_tcp6_connected_ifconfig_transfernets() 360231858Sbz{ 361231858Sbz 362231858Sbz testtx_ulp6_connected_transfernets \ 363231858Sbz "testtx_tcp6_connected_ifconfig_transfernets" "TCP6" 364231858Sbz} 365231858Sbz 366231858Sbztesttx_udp6_connected_ifconfig_transfernets() 367231858Sbz{ 368231858Sbz 369231858Sbz testtx_ulp6_connected_transfernets \ 370231858Sbz "testtx_udp6_connected_ifconfig_transfernets" "UDP6" 371231858Sbz} 372231858Sbz 373231858Sbz################################################################################ 374231858Sbz# 375231858Sbztesttx_ulp6_gateway() 376231858Sbz{ 377231858Sbz local _opts _n _o 378231858Sbz _n="$1" 379231858Sbz _o="$2" 380231858Sbz 381231858Sbz ifconfig lo0 inet6 2001:2:ff01::2 -alias > /dev/null 2>&1 || true 382231858Sbz delay 383231858Sbz ifconfig lo0 inet6 2001:2:ff01::2 alias 384231858Sbz 385231858Sbz _opts="" 386231858Sbz case ${DEBUG} in 387231858Sbz ''|0) ;; 388231858Sbz 42) _opts="-d -d" ;; 389231858Sbz *) _opts="-d" ;; 390231858Sbz esac 391231858Sbz 392231858Sbz print_debug "./reflect -p ${CTRLPORT} -T ${_o} " \ 393231858Sbz "-t ${_n} ${_opts} -A 2001:2:ff01::2" 394231858Sbz ./reflect -p ${CTRLPORT} -T ${_o} \ 395231858Sbz -t ${_n} ${_opts} -A 2001:2:ff01::2 396231858Sbz print_debug "reflect terminated without error." 397231858Sbz 398231858Sbz ifconfig lo0 inet6 2001:2:ff01::2 -alias 399231858Sbz delay 400231858Sbz} 401231858Sbz 402231858Sbztesttx_icmp6_gateway() 403231858Sbz{ 404231858Sbz 405231858Sbz testtx_ulp6_gateway "testtx_icmp6_gateway" "TCP6" 406231858Sbz} 407231858Sbz 408231858Sbztesttx_tcp6_gateway() 409231858Sbz{ 410231858Sbz 411231858Sbz testtx_ulp6_gateway "testtx_tcp6_gateway" "TCP6" 412231858Sbz} 413231858Sbz 414231858Sbztesttx_udp6_gateway() 415231858Sbz{ 416231858Sbz 417231858Sbz testtx_ulp6_gateway "testtx_udp6_gateway" "UDP6" 418231858Sbz} 419231858Sbz 420231858Sbz################################################################################ 421231858Sbz# 422231858Sbztesttx_ulp6_transfernets_gateways() 423231858Sbz{ 424232114Sbz local _opts fib _n _o 425231858Sbz _n="$1" 426231858Sbz _o="$2" 427231858Sbz 428231858Sbz _opts="" 429231858Sbz case ${DEBUG} in 430231858Sbz ''|0) ;; 431231858Sbz 42) _opts="-d -d" ;; 432231858Sbz *) _opts="-d" ;; 433231858Sbz esac 434231858Sbz 435231858Sbz # Setup transfer networks. 436232114Sbz fib=0 437232114Sbz while test ${fib} -lt ${RT_NUMFIBS}; do 438232114Sbz setfib -F${fib} \ 439232114Sbz ifconfig ${IFACE} inet6 2001:2:${fib}::2/64 alias 440232114Sbz fib=$((fib + 1)) 441231858Sbz done 442231858Sbz 443231858Sbz # Setup out listener IP. 444231858Sbz ifconfig lo0 inet6 2001:2:ff01::2 -alias > /dev/null 2>&1 || true 445231858Sbz delay 446231858Sbz ifconfig lo0 inet6 2001:2:ff01::2 alias 447231858Sbz 448231858Sbz # Reflect requests. 449231858Sbz print_debug "./reflect -p ${CTRLPORT} -T ${_o} " \ 450231858Sbz "-t ${_n} ${_opts} -A 2001:2:ff01::2" 451231858Sbz ./reflect -p ${CTRLPORT} -T ${_o} \ 452231858Sbz -t ${_n} ${_opts} -A 2001:2:ff01::2 453231858Sbz print_debug "reflect terminated without error." 454231858Sbz 455231858Sbz # Cleanup transfer networks and listener IP. 456232114Sbz fib=0 457232114Sbz while test ${fib} -lt ${RT_NUMFIBS}; do 458232114Sbz setfib -F${fib} \ 459232114Sbz ifconfig ${IFACE} inet6 2001:2:${fib}::2/64 -alias 460231858Sbz delay 461232114Sbz fib=$((fib + 1)) 462231858Sbz done 463231858Sbz ifconfig lo0 inet6 2001:2:ff01::2 -alias 464231858Sbz} 465231858Sbz 466231858Sbztesttx_icmp6_transfernets_gateways() 467231858Sbz{ 468231858Sbz 469231858Sbz testtx_ulp6_transfernets_gateways \ 470231858Sbz "testtx_icmp6_transfernets_gateways" "TCP6" 471231858Sbz} 472231858Sbz 473231858Sbztesttx_tcp6_transfernets_gateways() 474231858Sbz{ 475231858Sbz 476231858Sbz testtx_ulp6_transfernets_gateways \ 477231858Sbz "testtx_tcp6_transfernets_gateways" "TCP6" 478231858Sbz} 479231858Sbz 480231858Sbztesttx_udp6_transfernets_gateways() 481231858Sbz{ 482231858Sbz 483231858Sbz testtx_ulp6_transfernets_gateways \ 484231858Sbz "testtx_udp6_transfernets_gateways" "UDP6" 485231858Sbz} 486231858Sbz 487231858Sbz 488231858Sbz################################################################################ 489231858Sbz# 490231858Sbztesttx_ulp6_transfernets_gateway() 491231858Sbz{ 492232114Sbz local _opts fib _n _o 493231858Sbz _n="$1" 494231858Sbz _o="$2" 495231858Sbz 496231858Sbz _opts="" 497231858Sbz case ${DEBUG} in 498231858Sbz ''|0) ;; 499231858Sbz 42) _opts="-d -d" ;; 500231858Sbz *) _opts="-d" ;; 501231858Sbz esac 502231858Sbz 503231858Sbz # Setup transfer networks. 504232114Sbz fib=0 505232114Sbz while test ${fib} -lt ${RT_NUMFIBS}; do 506232114Sbz setfib -F${fib} \ 507232114Sbz ifconfig ${IFACE} inet6 2001:2:${fib}::2/64 alias 508232114Sbz fib=$((fib + 1)) 509231858Sbz done 510231858Sbz 511231858Sbz # Setup out listener IP. 512231858Sbz ifconfig lo0 inet6 2001:2:ff01::2 -alias > /dev/null 2>&1 || true 513231858Sbz delay 514231858Sbz ifconfig lo0 inet6 2001:2:ff01::2 alias 515231858Sbz 516231858Sbz # Reflect requests. 517232114Sbz fib=0 518232114Sbz while test ${fib} -lt ${RT_NUMFIBS}; do 519231858Sbz print_debug "./reflect -p ${CTRLPORT} -T ${_o} " \ 520232114Sbz "-t ${_n}${fib} ${_opts} -A 2001:2:ff01::2" 521231858Sbz ./reflect -p ${CTRLPORT} -T ${_o} \ 522232114Sbz -t ${_n}${fib} ${_opts} -A 2001:2:ff01::2 523231858Sbz print_debug "reflect terminated without error." 524232114Sbz fib=$((fib + 1)) 525231858Sbz done 526231858Sbz 527231858Sbz # Cleanup transfer networks and listener IP. 528232114Sbz fib=0 529232114Sbz while test ${fib} -lt ${RT_NUMFIBS}; do 530232114Sbz setfib -F${fib} \ 531232114Sbz ifconfig ${IFACE} inet6 2001:2:${fib}::2/64 -alias 532231858Sbz delay 533232114Sbz fib=$((fib + 1)) 534231858Sbz done 535231858Sbz ifconfig lo0 inet6 2001:2:ff01::2 -alias 536231858Sbz} 537231858Sbz 538231858Sbztesttx_icmp6_transfernets_gateway() 539231858Sbz{ 540231858Sbz 541231858Sbz testtx_ulp6_transfernets_gateway \ 542231858Sbz "testtx_icmp6_transfernets_gateway" "TCP6" 543231858Sbz} 544231858Sbz 545231858Sbztesttx_tcp6_transfernets_gateway() 546231858Sbz{ 547231858Sbz 548231858Sbz testtx_ulp6_transfernets_gateway \ 549231858Sbz "testtx_tcp6_transfernets_gateway" "TCP6" 550231858Sbz} 551231858Sbz 552231858Sbztesttx_udp6_transfernets_gateway() 553231858Sbz{ 554231858Sbz 555231858Sbz testtx_ulp6_transfernets_gateway \ 556231858Sbz "testtx_udp6_transfernets_gateway" "UDP6" 557231858Sbz} 558231858Sbz 559231858Sbz################################################################################ 560231858Sbz# 561231858Sbz# We are receiver, but the FIBs are with us this time. 562231858Sbz# 563231858Sbz# 564231858Sbz 565231858Sbz# # For IPFW, IFCONFIG 566231858Sbz# # For each FIB 567231858Sbz# # Send OOB well known to work START, wait for reflect 568231858Sbz# # Send probe, wait for reply with FIB# or RST/ICMP6 unreach 569231858Sbz# # (in case of ICMP6 use magic like ipfw count and OOB reply) 570231858Sbz# # Send OOB well known to work DONE, wait for reflect 571231858Sbz# # Compare real with expected results. 572231858Sbz# 573231858Sbz 574231858Sbztextrx_ipfw_setup() 575231858Sbz{ 576231858Sbz local _fib _transfer i _p _o 577231858Sbz _fib=$1 578231858Sbz _transfer=$2 579231858Sbz 580231858Sbz # ICMP6 would need content inspection to distinguish FIB, we can 581231858Sbz # only differentiate by address. 582231858Sbz # For the default single-address cases always set to current FIB. 583231858Sbz ipfw add 100 setfib ${_fib} ipv6-icmp \ 584231858Sbz from ${PEERADDR} to ${OURADDR} \ 585231858Sbz via ${IFACE} in > /dev/null 2>&1 586231858Sbz ipfw add 100 setfib ${_fib} ipv6-icmp \ 587231858Sbz from ${PEERLINKLOCAL%\%*} to ${OURLINKLOCAL%\%*} \ 588231858Sbz via ${IFACE} in > /dev/null 2>&1 589231858Sbz 590231858Sbz # Always also do a setfib for the control port so that OOB 591231858Sbz # signaling workes even if we remove connected subnets. 592231858Sbz ipfw add 200 setfib ${_fib} ip6 from ${PEERADDR} to ${OURADDR} \ 593231858Sbz dst-port ${CTRLPORT} via ${IFACE} in > /dev/null 2>&1 594231858Sbz 595231858Sbz # Save addresses 596231858Sbz _p="${PEERADDR}" 597231858Sbz _o="${OURADDR}" 598231858Sbz 599231858Sbz i=0 600231858Sbz while test ${i} -lt ${RT_NUMFIBS}; do 601231858Sbz 602231858Sbz # If doing multiple transfer networks, replace PEERADDR. 603231858Sbz case ${_transfer} in 604231858Sbz 1) PEERADDR=2001:2:${i}::1 605231858Sbz OURADDR=2001:2:${i}::2 606231858Sbz ;; 607231858Sbz esac 608231858Sbz 609231858Sbz if test ${_instances} -gt 1 -o ${_transfer} -eq 1; then 610231858Sbz ipfw add 400 setfib ${_fib} ipv6-icmp \ 611231858Sbz from ${PEERADDR} to ${OURADDR} \ 612231858Sbz icmp6types 128 \ 613231858Sbz via ${IFACE} in > /dev/null 2>&1 614231858Sbz fi 615231858Sbz 616231858Sbz case ${i} in 617231858Sbz ${_fib}) 618231858Sbz ipfw add 400 setfib ${_fib} ip6 \ 619231858Sbz from ${PEERADDR} to ${OURADDR} \ 620231858Sbz dst-port $((CTRLPORT + 1000 + i)) \ 621231858Sbz via ${IFACE} in > /dev/null 2>&1 622231858Sbz ipfw add 400 setfib ${_fib} ip6 \ 623231858Sbz from ${PEERLINKLOCAL%\%*} to ${OURLINKLOCAL%\%*} \ 624231858Sbz dst-port $((CTRLPORT + 1000 + i)) \ 625231858Sbz via ${IFACE} in > /dev/null 2>&1 626231858Sbz if test ${_instances} -le 1 -o ${_transfer} -ne 1; then 627231858Sbz ipfw add 400 setfib ${_fib} ipv6-icmp \ 628231858Sbz from ${PEERADDR} to ${OURADDR} \ 629231858Sbz icmp6types 128 \ 630231858Sbz via ${IFACE} in > /dev/null 2>&1 631231858Sbz fi 632231858Sbz ;; 633231858Sbz esac 634231858Sbz 635231858Sbz i=$((i + 1)) 636231858Sbz done 637231858Sbz 638231858Sbz # Restore addresses. 639231858Sbz PEERADDR="${_p}" 640231858Sbz OURADDR="${_o}" 641231858Sbz 642231858Sbz case ${DEBUG} in 643231858Sbz ''|0) ;; 644231858Sbz *) ipfw show ;; 645231858Sbz esac 646231858Sbz} 647231858Sbz 648231858Sbztextrx_ifconfig_setup() 649231858Sbz{ 650231858Sbz local _fib 651231858Sbz _fib=$1 652231858Sbz 653231858Sbz ifconfig ${IFACE} fib ${_fib} > /dev/null 2>&1 654231858Sbz} 655231858Sbz 656231858Sbztextrx_ipfw_cleanup() 657231858Sbz{ 658231858Sbz local i 659231858Sbz 660231858Sbz case ${DEBUG} in 661231858Sbz ''|0) ;; 662231858Sbz *) ipfw show ;; 663231858Sbz esac 664231858Sbz 665231858Sbz ipfw delete 100 > /dev/null 2>&1 || true 666231858Sbz ipfw delete 200 > /dev/null 2>&1 || true 667231858Sbz ipfw delete 400 > /dev/null 2>&1 || true 668231858Sbz 669231858Sbz i=0 670231858Sbz while test ${i} -lt ${RT_NUMFIBS}; do 671231858Sbz 672231858Sbz ipfw delete $((1000 + i)) > /dev/null 2>&1 || true 673231858Sbz i=$((i + 1)) 674231858Sbz done 675231858Sbz} 676231858Sbz 677231858Sbztextrx_ifconfig_cleanup() 678231858Sbz{ 679231858Sbz 680231858Sbz ifconfig ${IFACE} fib 0 > /dev/null 2>&1 681231858Sbz} 682231858Sbz 683231858Sbztextrx_count_setup() 684231858Sbz{ 685231858Sbz local i 686231858Sbz 687231858Sbz i=0 688231858Sbz while test ${i} -lt ${RT_NUMFIBS}; do 689231858Sbz 690231858Sbz # Count ICMP6 echo replies. 691231858Sbz ipfw add $((500 + i)) count ipv6-icmp from any to any \ 692231858Sbz icmp6types 129 fib ${i} via ${IFACE} out > /dev/null 2>&1 693231858Sbz ipfw add $((500 + i)) count tcp from any to any \ 694231858Sbz fib ${i} via ${IFACE} out > /dev/null 2>&1 695231858Sbz ipfw add $((500 + i)) count udp from any to any \ 696231858Sbz fib ${i} via ${IFACE} out > /dev/null 2>&1 697231858Sbz i=$((i + 1)) 698231858Sbz done 699231858Sbz} 700231858Sbz 701231858Sbztextrx_count_results() 702231858Sbz{ 703231858Sbz local _fib _o i _rstr _c _req _p _opts 704231858Sbz _fib=$1 705231858Sbz _o="$2" 706231858Sbz 707231858Sbz case ${DEBUG} in 708231858Sbz ''|0) ;; 709231858Sbz *) ipfw show ;; 710231858Sbz esac 711231858Sbz 712231858Sbz _rstr="" 713231858Sbz i=0 714231858Sbz while test ${i} -lt ${RT_NUMFIBS}; do 715231858Sbz 716231858Sbz case "${_o}" in 717231858Sbz "-i") _c=`ipfw show $((500 + i)) | awk '/ ipv6-icmp / { print $2 }'` ;; 718231858Sbz "-u") _c=`ipfw show $((500 + i)) | awk '/ udp / { print $2 }'` ;; 719231858Sbz *) _c=`ipfw show $((500 + i)) | awk '/ tcp / { print $2 }'` ;; 720231858Sbz esac 721231858Sbz _rstr="${_rstr}${i} ${_c}," 722231858Sbz 723231858Sbz ipfw delete $((500 + i)) > /dev/null 2>&1 || true 724231858Sbz i=$((i + 1)) 725231858Sbz done 726231858Sbz 727231858Sbz # We do not care about the request. 728231858Sbz _req=`echo "RESULT ${_rstr}" | nc -V ${_fib} -6 -l ${CTRLPORT}` 729231858Sbz print_debug "$? -- ${_req} -- RESULT ${_rstr}" 730231858Sbz} 731231858Sbz 732231858Sbztestrx_remove_connected() 733231858Sbz{ 734231858Sbz local _fib _transfer i j _prefix 735231858Sbz _fib=$1 736231858Sbz _transfer=$2 737231858Sbz 738231858Sbz if test ${_transfer} -eq 1; then 739231858Sbz i=0 740231858Sbz while test ${i} -lt ${RT_NUMFIBS}; do 741231858Sbz j=0 742231858Sbz while test ${j} -lt ${RT_NUMFIBS}; do 743231858Sbz _prefix="2001:2:${j}::" 744231858Sbz 745231858Sbz case ${j} in 746231858Sbz ${_fib});; 747231858Sbz *) print_debug "setfib -F${i} route delete" \ 748231858Sbz "-inet6 -net ${_prefix}" 749231858Sbz setfib -F${i} route delete -inet6 -net \ 750231858Sbz ${_prefix} > /dev/null 2>&1 751231858Sbz ;; 752231858Sbz esac 753231858Sbz j=$((j + 1)) 754231858Sbz done 755231858Sbz i=$((i + 1)) 756231858Sbz done 757231858Sbz 758231858Sbz else 759232114Sbz _prefix=${OURADDR%2} # Luckily we know the details. 760231858Sbz i=0 761231858Sbz while test ${i} -lt ${RT_NUMFIBS}; do 762231858Sbz 763231858Sbz case ${i} in 764231858Sbz ${_fib});; 765231858Sbz *) print_debug "setfib -F${i} route delete" \ 766231858Sbz "-inet6 -net ${_prefix}" 767231858Sbz setfib -F${i} route delete -inet6 -net \ 768231858Sbz ${_prefix} > /dev/null 2>&1 769231858Sbz ;; 770231858Sbz esac 771231858Sbz 772231858Sbz i=$((i + 1)) 773231858Sbz done 774231858Sbz fi 775231858Sbz} 776231858Sbz 777231858Sbztestrx_cleanup_connected() 778231858Sbz{ 779231858Sbz local _fib _transfer i _prefix 780231858Sbz _fib=$1 781231858Sbz _transfer=$2 782231858Sbz 783231858Sbz if test ${_transfer} -eq 1; then 784231858Sbz 785231858Sbz i=0 786231858Sbz while test ${i} -lt ${RT_NUMFIBS}; do 787231858Sbz setfib -F${i} \ 788231858Sbz ifconfig ${IFACE} inet6 2001:2:${i}::2/64 -alias \ 789231858Sbz > /dev/null 2>&1 790231858Sbz delay 791231858Sbz i=$((i + 1)) 792231858Sbz done 793231858Sbz 794231858Sbz else 795231858Sbz # Use the hammer removing the address and adding it again to get 796231858Sbz # the connected subnet back to all FIBs. Hard to do otherwise. 797231858Sbz ifconfig ${IFACE} inet6 ${OURADDR}/64 -alias || true 798231858Sbz delay 799231858Sbz ifconfig ${IFACE} inet6 ${OURADDR}/64 alias up 800231858Sbz fi 801231858Sbz} 802231858Sbz 803231858Sbztestrx_setup_transfer_networks() 804231858Sbz{ 805231858Sbz local i 806231858Sbz 807231858Sbz i=0 808231858Sbz while test ${i} -lt ${RT_NUMFIBS}; do 809231858Sbz ifconfig ${IFACE} inet6 2001:2:${i}::2/64 -alias \ 810231858Sbz > /dev/null 2>&1 || true 811231858Sbz delay 812231858Sbz ifconfig ${IFACE} inet6 2001:2:${i}::2/64 alias 813231858Sbz i=$((i + 1)) 814231858Sbz done 815231858Sbz} 816231858Sbz 817231858Sbztestrx_run_one() 818231858Sbz{ 819231858Sbz local _fib _txt _opts 820231858Sbz _fib=$1 821231858Sbz _txt="$2" 822231858Sbz _opts="$3" 823231858Sbz 824231858Sbz case ${USE_SOSETFIB} in 825231858Sbz 0) print_debug "setfib -F${_fib} ./reflect -p ${CTRLPORT}" \ 826231858Sbz "-t ${_txt} ${_opts}" 827231858Sbz setfib -F${_fib} ./reflect -p ${CTRLPORT} -t ${_txt} ${_opts} 828231858Sbz ;; 829231858Sbz 1) print_debug "./reflect -F${_fib} -p ${CTRLPORT} -t ${_txt}" \ 830231858Sbz "${_opts}" 831231858Sbz ./reflect -F${_fib} -p ${CTRLPORT} -t ${_txt} ${_opts} 832231858Sbz ;; 833231858Sbz *) die "Invalid value for USE_SOSETFIB: ${USE_SOSETFIB}" ;; 834231858Sbz esac 835231858Sbz print_debug "reflect '${_txt}' terminated without error." 836231858Sbz} 837231858Sbz 838231858Sbztestrx_run_multiple() 839231858Sbz{ 840231858Sbz local _fib _txt _opts i _jobs _p _w 841231858Sbz _fib=$1 842231858Sbz _txt="$2" 843231858Sbz _opts="$3" 844231858Sbz 845231858Sbz i=0 846231858Sbz _jobs="" 847231858Sbz while test ${i} -lt ${RT_NUMFIBS}; do 848231858Sbz case ${USE_SOSETFIB} in 849231858Sbz 0) print_debug "setfib -F${i} ./reflect" \ 850231858Sbz "-p $((CTRLPORT + 1000 + i))" \ 851231858Sbz "-t ${_txt} ${_opts} -N -f ${i} &" 852231858Sbz setfib -F${i} ./reflect -p $((CTRLPORT + 1000 + i)) \ 853231858Sbz -t ${_txt} ${_opts} -N -f ${i} & 854231858Sbz ;; 855231858Sbz 1) print_debug "./reflect -F ${i}" \ 856231858Sbz "-p $((CTRLPORT + 1000 + i))" \ 857231858Sbz "-t ${_txt} ${_opts} -N -f ${i} &" 858231858Sbz ./reflect -F ${i} -p $((CTRLPORT + 1000 + i)) \ 859231858Sbz -t ${_txt} ${_opts} -N -f ${i} & 860231858Sbz ;; 861231858Sbz *) die "Invalid value for USE_SOSETFIB: ${USE_SOSETFIB}" ;; 862231858Sbz esac 863231858Sbz _p=$! 864231858Sbz _jobs="${_jobs}${_p} " 865231858Sbz case ${i} in 866231858Sbz ${_fib}) _w=${_p} ;; 867231858Sbz esac 868231858Sbz i=$((i + 1)) 869231858Sbz done 870231858Sbz 871231858Sbz # Start OOB control connection for START/DONE. 872231858Sbz testrx_run_one ${_fib} "${_txt}" "${_opts}" 873231858Sbz print_debug "KILL ${_jobs}" 874231858Sbz for i in ${_jobs}; do 875231858Sbz kill ${i} || true 876231858Sbz done 877231858Sbz #killall reflect || true 878231858Sbz print_debug "reflects for '${_txt}' terminated without error." 879231858Sbz} 880231858Sbz 881231858Sbztestrx_run_test() 882231858Sbz{ 883231858Sbz local _n _t _fib _o _txt i _f _instance _destructive _transfer 884231858Sbz _n="$1" 885231858Sbz _t="$2" 886231858Sbz _fib=$3 887231858Sbz _o="$4" 888231858Sbz _instances=$5 889231858Sbz _destructive=$6 890231858Sbz _transfer=$7 891231858Sbz 892231858Sbz : ${_destructive:=0} 893231858Sbz 894231858Sbz _opts="" 895231858Sbz case ${DEBUG} in 896231858Sbz ''|0) ;; 897231858Sbz 42) _opts="-d -d" ;; 898231858Sbz *) _opts="-d" ;; 899231858Sbz esac 900231858Sbz 901231858Sbz # Convert netcat options to reflect aguments. 902231858Sbz case "${_o}" in 903231858Sbz -i) _opts="${_opts} -T TCP6" ;; # Use TCP for START/DONE. 904231858Sbz -u) _opts="${_opts} -T UDP6" ;; 905231858Sbz *) _opts="${_opts} -T TCP6" ;; 906231858Sbz esac 907231858Sbz 908231858Sbz # Combined test case base name. 909231858Sbz case ${USE_SOSETFIB} in 910231858Sbz 0) _f="setfib" ;; 911231858Sbz 1) _f="so_setfib" ;; 912231858Sbz *) die "Unexpected value for SO_SETFIB: ${SO_SETFIB}" ;; 913231858Sbz esac 914231858Sbz 915231858Sbz _txt="${_n}_${_f}_${_t}_${_fib}_${_instances}_${_destructive}_${_transfer}" 916231858Sbz 917231858Sbz case ${_transfer} in 918231858Sbz 1) testrx_setup_transfer_networks ;; 919231858Sbz esac 920231858Sbz 921231858Sbz case "${_t}" in 922231858Sbz ipfw) textrx_ipfw_setup ${_fib} ${_transfer} ${_instances} ;; 923231858Sbz ifconfig) textrx_ifconfig_setup ${_fib} ;; 924231858Sbz *) die "Invalid type in ${_txt}" ;; 925231858Sbz esac 926231858Sbz 927231858Sbz # Setup unresponsive FIBs. 928231858Sbz case ${_destructive} in 929231858Sbz 1) testrx_remove_connected ${_fib} ${_transfer} ;; 930231858Sbz esac 931231858Sbz 932231858Sbz # Setup to get result counts. 933231858Sbz textrx_count_setup 934231858Sbz 935231858Sbz # Run just one / one per FIB (with incremental ports). 936231858Sbz #case ${_instances} in 937231858Sbz #1) testrx_run_one ${_fib} "${_txt}" "${_opts}" ;; 938231858Sbz #*) testrx_run_multiple ${_fib} "${_txt}" "${_opts}" ;; 939231858Sbz #esac 940231858Sbz testrx_run_multiple ${_fib} "${_txt}" "${_opts}" ${_transfer} 941231858Sbz 942231858Sbz # Export result counts. 943231858Sbz textrx_count_results ${_fib} "${_o}" 944231858Sbz 945231858Sbz # Cleanup unresponsive FIBs or multiple prefixes. 946231858Sbz if test ${_destructive} -eq 1 -o ${_transfer} -eq 1; then 947231858Sbz testrx_cleanup_connected ${_fib} ${_transfer} 948231858Sbz fi 949231858Sbz 950231858Sbz case "${_t}" in 951231858Sbz ipfw) textrx_ipfw_cleanup ;; 952231858Sbz ifconfig) textrx_ifconfig_cleanup ;; 953231858Sbz *) die "Invalid type in ${_txt}" ;; 954231858Sbz esac 955231858Sbz} 956231858Sbz 957231858Sbztestrx_main() 958231858Sbz{ 959232114Sbz local _n _o s t fib _instances _destructive 960231858Sbz _n="$1" 961231858Sbz _o="$2" 962231858Sbz _instances=$3 963231858Sbz 964231858Sbz : ${_instances:=1} 965231858Sbz 966231858Sbz print_debug "${_n}" 967231858Sbz for _transfer in 1 0; do 968231858Sbz for _destructive in 0 1; do 969231858Sbz for t in ipfw ifconfig; do 970231858Sbz 971231858Sbz print_debug "${_n}_${t}" 972232114Sbz fib=0 973232114Sbz while test ${fib} -lt ${RT_NUMFIBS}; do 974231858Sbz 975232114Sbz print_debug "${_n}_${t}_${fib}" \ 976231858Sbz "${_instances} ${_destructive}" \ 977231858Sbz "${_transfer}" 978232114Sbz testrx_run_test "${_n}" "${t}" ${fib} \ 979231858Sbz "${_o}" ${_instances} \ 980231858Sbz ${_destructive} ${_transfer} 981231858Sbz 982232114Sbz fib=$((fib + 1)) 983231858Sbz done 984231858Sbz done 985231858Sbz done 986231858Sbz done 987231858Sbz} 988231858Sbz 989231858Sbz################################################################################ 990231858Sbz# 991231858Sbz# Probe all FIBs with one "active" one a time. 992231858Sbz# 993231858Sbztestrx_icmp6_same_addr_one_fib_a_time() 994231858Sbz{ 995231858Sbz 996231858Sbz testrx_main "testrx_icmp6_same_addr_one_fib_a_time" "-i" 997231858Sbz} 998231858Sbz 999231858Sbztestrx_tcp6_same_addr_one_fib_a_time() 1000231858Sbz{ 1001231858Sbz 1002231858Sbz testrx_main "testrx_tcp6_same_addr_one_fib_a_time" "" 1003231858Sbz} 1004231858Sbz 1005231858Sbztestrx_udp6_same_addr_one_fib_a_time() 1006231858Sbz{ 1007231858Sbz 1008231858Sbz testrx_main "testrx_udp6_same_addr_one_fib_a_time" "-u" 1009231858Sbz} 1010231858Sbz 1011231858Sbz################################################################################ 1012231858Sbz# 1013231858Sbz# Probe all FIBs with all "active" all time. 1014231858Sbz# 1015231858Sbztestrx_tcp6_same_addr_all_fibs_a_time() 1016231858Sbz{ 1017231858Sbz 1018231858Sbz testrx_main "testrx_tcp6_same_addr_all_fibs_a_time" "" ${RT_NUMFIBS} 1019231858Sbz} 1020231858Sbz 1021231858Sbztestrx_udp6_same_addr_all_fibs_a_time() 1022231858Sbz{ 1023231858Sbz 1024231858Sbz testrx_main "testrx_udp6_same_addr_all_fibs_a_time" "-u" ${RT_NUMFIBS} 1025231858Sbz} 1026231858Sbz 1027231858Sbz 1028231858Sbz################################################################################ 1029231858Sbz# 1030231858Sbz# Prereqs. 1031231858Sbz# 1032232114Sbzif test `sysctl -n security.jail.jailed` -eq 0; then 1033232114Sbz kldload ipfw > /dev/null 2>&1 || kldstat -v | grep -q ipfw 1034232114Sbzfi 1035232114Sbzipfw -f flush > /dev/null 2>&1 || die "please load ipfw in base system" 1036232114Sbzipfw add 65000 permit ip from any to any > /dev/null 2>&1 1037231858Sbzkillall reflect || true 1038231858Sbz 1039231858Sbz################################################################################ 1040231858Sbz# 1041231858Sbz# Run tests. 1042231858Sbz# 1043231858Sbzwait_remote_ready 1044231858Sbz 1045231858Sbz# We are receiver reflecting the input back. 1046231858Sbzfor uso in 0 1; do 1047232114Sbz 1048231858Sbz # Only run ICMP6 tests for the first loop. 1049231858Sbz test ${uso} -ne 0 || testtx_icmp6_connected 1050231858Sbz testtx_tcp6_connected 1051231858Sbz testtx_udp6_connected 1052231858Sbz 1053231858Sbz test ${uso} -ne 0 || testtx_icmp6_connected_blackhole 1054231858Sbz testtx_tcp6_connected_blackhole 1055231858Sbz testtx_udp6_connected_blackhole 1056231858Sbz 1057231858Sbz test ${uso} -ne 0 || testtx_icmp6_connected_transfernets 1058231858Sbz testtx_tcp6_connected_transfernets 1059231858Sbz testtx_udp6_connected_transfernets 1060231858Sbz 1061231858Sbz test ${uso} -ne 0 || testtx_icmp6_connected_ifconfig_transfernets 1062231858Sbz testtx_tcp6_connected_ifconfig_transfernets 1063231858Sbz testtx_udp6_connected_ifconfig_transfernets 1064231858Sbz 1065231858Sbz test ${uso} -ne 0 || testtx_icmp6_gateway 1066231858Sbz testtx_tcp6_gateway 1067231858Sbz testtx_udp6_gateway 1068231858Sbz 1069231858Sbz test ${uso} -ne 0 || testtx_icmp6_transfernets_gateways 1070231858Sbz testtx_tcp6_transfernets_gateways 1071231858Sbz testtx_udp6_transfernets_gateways 1072231858Sbz 1073231858Sbz test ${uso} -ne 0 || testtx_icmp6_transfernets_gateway 1074231858Sbz testtx_tcp6_transfernets_gateway 1075231858Sbz testtx_udp6_transfernets_gateway 1076231858Sbzdone 1077231858Sbz 1078231858Sbzipfw -f flush > /dev/null 2>&1 1079232114Sbzipfw add 65000 permit ip from any to any > /dev/null 2>&1 1080231858Sbz 1081231858Sbz# We are receiver, but the FIBs are with us this time. 1082231858Sbzfor uso in 0 1; do 1083231858Sbz 1084231858Sbz USE_SOSETFIB=${uso} 1085231858Sbz 1086231858Sbz # Only expect ICMP6 tests for the first loop. 1087231858Sbz test ${uso} -ne 0 || testrx_icmp6_same_addr_one_fib_a_time 1088231858Sbz testrx_tcp6_same_addr_one_fib_a_time 1089231858Sbz testrx_udp6_same_addr_one_fib_a_time 1090231858Sbz 1091231858Sbz testrx_tcp6_same_addr_all_fibs_a_time 1092231858Sbz testrx_udp6_same_addr_all_fibs_a_time 1093231858Sbz 1094231858Sbzdone 1095231858Sbz 1096231858Sbzcleanup 1097231858Sbz 1098231858Sbz# end 1099