1d3373029SBjoern A. Zeeb#!/bin/sh 2d3373029SBjoern A. Zeeb#- 3d3373029SBjoern A. Zeeb# Copyright (c) 2012 Cisco Systems, Inc. 4d3373029SBjoern A. Zeeb# All rights reserved. 5d3373029SBjoern A. Zeeb# 6d3373029SBjoern A. Zeeb# This software was developed by Bjoern Zeeb under contract to 7d3373029SBjoern A. Zeeb# Cisco Systems, Inc.. 8d3373029SBjoern A. Zeeb# 9d3373029SBjoern A. Zeeb# Redistribution and use in source and binary forms, with or without 10d3373029SBjoern A. Zeeb# modification, are permitted provided that the following conditions 11d3373029SBjoern A. Zeeb# are met: 12d3373029SBjoern A. Zeeb# 1. Redistributions of source code must retain the above copyright 13d3373029SBjoern A. Zeeb# notice, this list of conditions and the following disclaimer. 14d3373029SBjoern A. Zeeb# 2. Redistributions in binary form must reproduce the above copyright 15d3373029SBjoern A. Zeeb# notice, this list of conditions and the following disclaimer in the 16d3373029SBjoern A. Zeeb# documentation and/or other materials provided with the distribution. 17d3373029SBjoern A. Zeeb# 18d3373029SBjoern A. Zeeb# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 19d3373029SBjoern A. Zeeb# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20d3373029SBjoern A. Zeeb# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21d3373029SBjoern A. Zeeb# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 22d3373029SBjoern A. Zeeb# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23d3373029SBjoern A. Zeeb# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 24d3373029SBjoern A. Zeeb# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25d3373029SBjoern A. Zeeb# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 26d3373029SBjoern A. Zeeb# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 27d3373029SBjoern A. Zeeb# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 28d3373029SBjoern A. Zeeb# SUCH DAMAGE. 29d3373029SBjoern A. Zeeb# 30d3373029SBjoern A. Zeeb# 31d3373029SBjoern A. Zeeb 32d3373029SBjoern A. Zeeb# We will use the RFC5180 (and Errata) benchmarking working group prefix 33d3373029SBjoern A. Zeeb# 2001:0002::/48 for testing. 34d3373029SBjoern A. ZeebPREFIX="2001:2:" 35d3373029SBjoern A. Zeeb 36d3373029SBjoern A. Zeeb# Set IFACE to the real interface you want to run the test on. 37d3373029SBjoern A. Zeeb: ${IFACE:=lo0} 38d3373029SBjoern A. Zeeb 39d3373029SBjoern A. Zeeb# Control port we use to exchange messages between nodes to sync. tests, etc. 40d3373029SBjoern A. Zeeb: ${CTRLPORT:=6666} 41d3373029SBjoern A. Zeeb 42d3373029SBjoern A. Zeeb# Get the number of FIBs from the kernel. 43d3373029SBjoern A. ZeebRT_NUMFIBS=`sysctl -n net.fibs` 44d3373029SBjoern A. Zeeb 45d3373029SBjoern A. ZeebPEERADDR="2001:2:ff00::1" 46d3373029SBjoern A. ZeebOURADDR="2001:2:ff00::2" 47d3373029SBjoern A. Zeeb 48d3373029SBjoern A. ZeebOURLINKLOCAL="" 49d3373029SBjoern A. ZeebPEERLINKLOCAL="" 50d3373029SBjoern A. Zeeb 51d3373029SBjoern A. Zeeb# By default all commands must succeed. Individual tests may disable this 52d3373029SBjoern A. Zeeb# temporary. 53d3373029SBjoern A. Zeebset -e 54d3373029SBjoern A. Zeeb 55d3373029SBjoern A. Zeeb# Debug magic. 56d3373029SBjoern A. Zeebcase "${DEBUG}" in 57d3373029SBjoern A. Zeeb42) set -x ;; 58d3373029SBjoern A. Zeebesac 59d3373029SBjoern A. Zeeb 60d3373029SBjoern A. Zeeb 61d3373029SBjoern A. Zeeb 62d3373029SBjoern A. Zeeb# 63d3373029SBjoern A. Zeeb# Helper functions. 64d3373029SBjoern A. Zeeb# 65d3373029SBjoern A. Zeeb 66d3373029SBjoern A. Zeeb# Function to avoid prelist races adding and deleting prefixes too quickly. 67d3373029SBjoern A. Zeebdelay() 68d3373029SBjoern A. Zeeb{ 69d3373029SBjoern A. Zeeb 70d3373029SBjoern A. Zeeb # sleep 1 is too long. 71d3373029SBjoern A. Zeeb touch /tmp/foo || true 72*0e7ed5d6SBjoern A. Zeeb stat /tmp/foo > /dev/null 2>&1 || true 73d3373029SBjoern A. Zeeb} 74d3373029SBjoern A. Zeeb 75d3373029SBjoern A. Zeebcheck_rc() 76d3373029SBjoern A. Zeeb{ 77d3373029SBjoern A. Zeeb local _rc _exp _testno _testname _msg _r 78d3373029SBjoern A. Zeeb _rc=$1 79d3373029SBjoern A. Zeeb _exp=$2 80d3373029SBjoern A. Zeeb _testno=$3 81d3373029SBjoern A. Zeeb _testname="$4" 82d3373029SBjoern A. Zeeb _msg="$5" 83d3373029SBjoern A. Zeeb 84d3373029SBjoern A. Zeeb _r="not ok" 85d3373029SBjoern A. Zeeb if test ${_rc} -eq ${_exp}; then 86d3373029SBjoern A. Zeeb _r="ok" 87d3373029SBjoern A. Zeeb fi 88d3373029SBjoern A. Zeeb echo "${_r} ${_testno} ${_testname} # ${_msg} ${_rc}" 89d3373029SBjoern A. Zeeb} 90d3373029SBjoern A. Zeeb 91d3373029SBjoern A. Zeebprint_debug() 92d3373029SBjoern A. Zeeb{ 93d3373029SBjoern A. Zeeb local _msg 94d3373029SBjoern A. Zeeb _msg="$*" 95d3373029SBjoern A. Zeeb 96d3373029SBjoern A. Zeeb case ${DEBUG} in 97d3373029SBjoern A. Zeeb ''|0) ;; 98d3373029SBjoern A. Zeeb *) echo "DEBUG: ${_msg}" >&2 ;; 99d3373029SBjoern A. Zeeb esac 100d3373029SBjoern A. Zeeb} 101d3373029SBjoern A. Zeeb 102d3373029SBjoern A. Zeebdie() 103d3373029SBjoern A. Zeeb{ 104d3373029SBjoern A. Zeeb local _msg 105d3373029SBjoern A. Zeeb _msg="$*" 106d3373029SBjoern A. Zeeb 107d3373029SBjoern A. Zeeb echo "ERROR: ${_msg}" >&2 108d3373029SBjoern A. Zeeb exit 1 109d3373029SBjoern A. Zeeb} 110d3373029SBjoern A. Zeeb 111d3373029SBjoern A. Zeeb# 112d3373029SBjoern A. Zeeb# Test functions. 113d3373029SBjoern A. Zeeb# 114d3373029SBjoern A. Zeeb 115d3373029SBjoern A. Zeeb# Setup our side and wait for the peer to tell us that it is ready. 116d3373029SBjoern A. Zeebwait_remote_ready() 117d3373029SBjoern A. Zeeb{ 118d3373029SBjoern A. Zeeb local _greeting _keyword _fibs _linklocal i 119d3373029SBjoern A. Zeeb 120d3373029SBjoern A. Zeeb print_debug "Setting up interface ${IFACE}" 121d3373029SBjoern A. Zeeb ifconfig ${IFACE} inet6 ${OURADDR}/64 -alias > /dev/null 2>&1 || true 122d3373029SBjoern A. Zeeb delay 123d3373029SBjoern A. Zeeb ifconfig ${IFACE} inet6 ${OURADDR}/64 alias up 124d3373029SBjoern A. Zeeb i=0 125d3373029SBjoern A. Zeeb while test ${i} -lt ${RT_NUMFIBS}; do 126d3373029SBjoern A. Zeeb ifconfig ${IFACE} inet6 2001:2:${i}::2/64 -alias \ 127d3373029SBjoern A. Zeeb > /dev/null 2>&1 || true 128d3373029SBjoern A. Zeeb delay 129d3373029SBjoern A. Zeeb i=$((i + 1)) 130d3373029SBjoern A. Zeeb done 131d3373029SBjoern A. Zeeb OURLINKLOCAL=`ifconfig ${IFACE} | awk '/inet6 fe80:/ { print $2 }'` 132d3373029SBjoern A. Zeeb 133d3373029SBjoern A. Zeeb # Let things settle. 134d3373029SBjoern A. Zeeb print_debug "Waiting 4 seconds for things to settle" 135d3373029SBjoern A. Zeeb sleep 4 136d3373029SBjoern A. Zeeb 137d3373029SBjoern A. Zeeb # Wait for the remote to connect and start things. 138d3373029SBjoern A. Zeeb # We tell it the magic keyword, our number of FIBs and our link-local. 139d3373029SBjoern A. Zeeb # It already knows our global address. 140d3373029SBjoern A. Zeeb _greeting=`echo "SETUP ${RT_NUMFIBS} ${OURLINKLOCAL}" | \ 141d3373029SBjoern A. Zeeb nc -6 -l ${CTRLPORT}` 142d3373029SBjoern A. Zeeb 143d3373029SBjoern A. Zeeb read _keyword _fibs _linklocal <<EOI 144d3373029SBjoern A. Zeeb${_greeting} 145d3373029SBjoern A. ZeebEOI 146d3373029SBjoern A. Zeeb print_debug "_keyword=${_keyword}" 147d3373029SBjoern A. Zeeb print_debug "_fibs=${_fibs}" 148d3373029SBjoern A. Zeeb print_debug "_linklocal=${_linklocal}" 149d3373029SBjoern A. Zeeb case ${_keyword} in 150d3373029SBjoern A. Zeeb SETUP) ;; 151d3373029SBjoern A. Zeeb *) die "Got invalid keyword in greeting: ${_greeting}" 152d3373029SBjoern A. Zeeb ;; 153d3373029SBjoern A. Zeeb esac 154d3373029SBjoern A. Zeeb if test ${_fibs} -ne ${RT_NUMFIBS}; then 155d3373029SBjoern A. Zeeb die "Number of FIBs not matching ours (${RT_NUMFIBS}) in" \ 156d3373029SBjoern A. Zeeb "greeting: ${_greeting}" 157d3373029SBjoern A. Zeeb fi 158d3373029SBjoern A. Zeeb PEERLINKLOCAL=${_linklocal} 159d3373029SBjoern A. Zeeb 160d3373029SBjoern A. Zeeb print_debug "Successfully received greeting. Peer at ${PEERLINKLOCAL}" 161d3373029SBjoern A. Zeeb} 162d3373029SBjoern A. Zeeb 163d3373029SBjoern A. Zeebcleanup() 164d3373029SBjoern A. Zeeb{ 165d3373029SBjoern A. Zeeb 166d3373029SBjoern A. Zeeb print_debug "Removing address from interface ${IFACE}" 167d3373029SBjoern A. Zeeb ifconfig ${IFACE} inet6 ${OURADDR}/64 -alias 168d3373029SBjoern A. Zeeb delay 169d3373029SBjoern A. Zeeb} 170d3373029SBjoern A. Zeeb 171d3373029SBjoern A. Zeeb################################################################################ 172d3373029SBjoern A. Zeeb# 173d3373029SBjoern A. Zeebtesttx_icmp6_connected() 174d3373029SBjoern A. Zeeb{ 175d3373029SBjoern A. Zeeb local _opts 176d3373029SBjoern A. Zeeb 177d3373029SBjoern A. Zeeb _opts="" 178d3373029SBjoern A. Zeeb case ${DEBUG} in 179d3373029SBjoern A. Zeeb ''|0) ;; 180d3373029SBjoern A. Zeeb 42) _opts="-d -d" ;; 181d3373029SBjoern A. Zeeb *) _opts="-d" ;; 182d3373029SBjoern A. Zeeb esac 183d3373029SBjoern A. Zeeb print_debug "./reflect -p ${CTRLPORT} -T TCP6 " \ 184d3373029SBjoern A. Zeeb "-t testtx_icmp6_connected ${_opts}" 185d3373029SBjoern A. Zeeb ./reflect -p ${CTRLPORT} -T TCP6 -t testtx_icmp6_connected ${_opts} 186d3373029SBjoern A. Zeeb print_debug "reflect terminated without error." 187d3373029SBjoern A. Zeeb} 188d3373029SBjoern A. Zeeb 189d3373029SBjoern A. Zeebtesttx_tcp6_connected() 190d3373029SBjoern A. Zeeb{ 191d3373029SBjoern A. Zeeb local _opts 192d3373029SBjoern A. Zeeb 193d3373029SBjoern A. Zeeb _opts="" 194d3373029SBjoern A. Zeeb case ${DEBUG} in 195d3373029SBjoern A. Zeeb ''|0) ;; 196d3373029SBjoern A. Zeeb 42) _opts="-d -d" ;; 197d3373029SBjoern A. Zeeb *) _opts="-d" ;; 198d3373029SBjoern A. Zeeb esac 199d3373029SBjoern A. Zeeb print_debug "./reflect -p ${CTRLPORT} -T TCP6 " \ 200d3373029SBjoern A. Zeeb "-t testtx_tcp6_connected ${_opts}" 201d3373029SBjoern A. Zeeb ./reflect -p ${CTRLPORT} -T TCP6 -t testtx_tcp6_connected ${_opts} 202d3373029SBjoern A. Zeeb print_debug "reflect terminated without error." 203d3373029SBjoern A. Zeeb} 204d3373029SBjoern A. Zeeb 205d3373029SBjoern A. Zeebtesttx_udp6_connected() 206d3373029SBjoern A. Zeeb{ 207d3373029SBjoern A. Zeeb local _opts 208d3373029SBjoern A. Zeeb 209d3373029SBjoern A. Zeeb _opts="" 210d3373029SBjoern A. Zeeb case ${DEBUG} in 211d3373029SBjoern A. Zeeb ''|0) ;; 212d3373029SBjoern A. Zeeb 42) _opts="-d -d" ;; 213d3373029SBjoern A. Zeeb *) _opts="-d" ;; 214d3373029SBjoern A. Zeeb esac 215d3373029SBjoern A. Zeeb print_debug "./reflect -p ${CTRLPORT} -T UDP6 " \ 216d3373029SBjoern A. Zeeb "-t testtx_udp6_connected ${_opts}" 217d3373029SBjoern A. Zeeb ./reflect -p ${CTRLPORT} -T UDP6 -t testtx_udp6_connected ${_opts} 218d3373029SBjoern A. Zeeb print_debug "reflect terminated without error." 219d3373029SBjoern A. Zeeb} 220d3373029SBjoern A. Zeeb 221d3373029SBjoern A. Zeeb################################################################################ 222d3373029SBjoern A. Zeeb# 223d3373029SBjoern A. Zeebtesttx_icmp6_connected_blackhole() 224d3373029SBjoern A. Zeeb{ 225*0e7ed5d6SBjoern A. Zeeb local _opts fib 226d3373029SBjoern A. Zeeb 227d3373029SBjoern A. Zeeb _opts="" 228d3373029SBjoern A. Zeeb case ${DEBUG} in 229d3373029SBjoern A. Zeeb ''|0) ;; 230d3373029SBjoern A. Zeeb 42) _opts="-d -d" ;; 231d3373029SBjoern A. Zeeb *) _opts="-d" ;; 232d3373029SBjoern A. Zeeb esac 233d3373029SBjoern A. Zeeb 234*0e7ed5d6SBjoern A. Zeeb fib=0 235*0e7ed5d6SBjoern A. Zeeb while test ${fib} -lt ${RT_NUMFIBS}; do 236d3373029SBjoern A. Zeeb print_debug "./reflect -p ${CTRLPORT} -T TCP6 " \ 237*0e7ed5d6SBjoern A. Zeeb "-t testtx_icmp6_connected_blackhole${fib} ${_opts}" 238d3373029SBjoern A. Zeeb ./reflect -p ${CTRLPORT} -T TCP6 \ 239*0e7ed5d6SBjoern A. Zeeb -t testtx_icmp6_connected_blackhole${fib} ${_opts} 240d3373029SBjoern A. Zeeb print_debug "reflect terminated without error." 241*0e7ed5d6SBjoern A. Zeeb fib=$((fib + 1)) 242d3373029SBjoern A. Zeeb done 243d3373029SBjoern A. Zeeb} 244d3373029SBjoern A. Zeeb 245d3373029SBjoern A. Zeebtesttx_tcp6_connected_blackhole() 246d3373029SBjoern A. Zeeb{ 247*0e7ed5d6SBjoern A. Zeeb local _opts fib 248d3373029SBjoern A. Zeeb 249d3373029SBjoern A. Zeeb _opts="" 250d3373029SBjoern A. Zeeb case ${DEBUG} in 251d3373029SBjoern A. Zeeb ''|0) ;; 252d3373029SBjoern A. Zeeb 42) _opts="-d -d" ;; 253d3373029SBjoern A. Zeeb *) _opts="-d" ;; 254d3373029SBjoern A. Zeeb esac 255d3373029SBjoern A. Zeeb 256*0e7ed5d6SBjoern A. Zeeb fib=0 257*0e7ed5d6SBjoern A. Zeeb while test ${fib} -lt ${RT_NUMFIBS}; do 258d3373029SBjoern A. Zeeb print_debug "./reflect -p ${CTRLPORT} -T TCP6 " \ 259*0e7ed5d6SBjoern A. Zeeb "-t testtx_tcp6_connected_blackhole${fib} ${_opts}" 260d3373029SBjoern A. Zeeb ./reflect -p ${CTRLPORT} -T TCP6 \ 261*0e7ed5d6SBjoern A. Zeeb -t testtx_tcp6_connected_blackhole${fib} ${_opts} 262d3373029SBjoern A. Zeeb print_debug "reflect terminated without error." 263*0e7ed5d6SBjoern A. Zeeb fib=$((fib + 1)) 264d3373029SBjoern A. Zeeb done 265d3373029SBjoern A. Zeeb} 266d3373029SBjoern A. Zeeb 267d3373029SBjoern A. Zeebtesttx_udp6_connected_blackhole() 268d3373029SBjoern A. Zeeb{ 269*0e7ed5d6SBjoern A. Zeeb local _opts fib 270d3373029SBjoern A. Zeeb 271d3373029SBjoern A. Zeeb _opts="" 272d3373029SBjoern A. Zeeb case ${DEBUG} in 273d3373029SBjoern A. Zeeb ''|0) ;; 274d3373029SBjoern A. Zeeb 42) _opts="-d -d" ;; 275d3373029SBjoern A. Zeeb *) _opts="-d" ;; 276d3373029SBjoern A. Zeeb esac 277d3373029SBjoern A. Zeeb 278*0e7ed5d6SBjoern A. Zeeb fib=0 279*0e7ed5d6SBjoern A. Zeeb while test ${fib} -lt ${RT_NUMFIBS}; do 280d3373029SBjoern A. Zeeb print_debug "./reflect -p ${CTRLPORT} -T UDP6 " \ 281*0e7ed5d6SBjoern A. Zeeb "-t testtx_udp6_connected_blackhole${fib} ${_opts}" 282d3373029SBjoern A. Zeeb ./reflect -p ${CTRLPORT} -T UDP6 \ 283*0e7ed5d6SBjoern A. Zeeb -t testtx_udp6_connected_blackhole${fib} ${_opts} 284d3373029SBjoern A. Zeeb print_debug "reflect terminated without error." 285*0e7ed5d6SBjoern A. Zeeb fib=$((fib + 1)) 286d3373029SBjoern A. Zeeb done 287d3373029SBjoern A. Zeeb} 288d3373029SBjoern A. Zeeb 289d3373029SBjoern A. Zeeb################################################################################ 290d3373029SBjoern A. Zeeb# 291d3373029SBjoern A. Zeebtesttx_ulp6_connected_transfernets() 292d3373029SBjoern A. Zeeb{ 293*0e7ed5d6SBjoern A. Zeeb local _opts fib _n _o 294d3373029SBjoern A. Zeeb _n="$1" 295d3373029SBjoern A. Zeeb _o="$2" 296d3373029SBjoern A. Zeeb 297d3373029SBjoern A. Zeeb _opts="" 298d3373029SBjoern A. Zeeb case ${DEBUG} in 299d3373029SBjoern A. Zeeb ''|0) ;; 300d3373029SBjoern A. Zeeb 42) _opts="-d -d" ;; 301d3373029SBjoern A. Zeeb *) _opts="-d" ;; 302d3373029SBjoern A. Zeeb esac 303d3373029SBjoern A. Zeeb 304d3373029SBjoern A. Zeeb # Setup transfer networks. 305*0e7ed5d6SBjoern A. Zeeb fib=0 306*0e7ed5d6SBjoern A. Zeeb while test ${fib} -lt ${RT_NUMFIBS}; do 307*0e7ed5d6SBjoern A. Zeeb setfib -F${fib} \ 308*0e7ed5d6SBjoern A. Zeeb ifconfig ${IFACE} inet6 2001:2:${fib}::2/64 alias 309*0e7ed5d6SBjoern A. Zeeb fib=$((fib + 1)) 310d3373029SBjoern A. Zeeb done 311d3373029SBjoern A. Zeeb 312*0e7ed5d6SBjoern A. Zeeb fib=0 313*0e7ed5d6SBjoern A. Zeeb while test ${fib} -lt ${RT_NUMFIBS}; do 314*0e7ed5d6SBjoern A. Zeeb print_debug "./reflect -p ${CTRLPORT} -T ${_o} -t ${_n}${fib} ${_opts}" 315*0e7ed5d6SBjoern A. Zeeb ./reflect -p ${CTRLPORT} -T ${_o} -t ${_n}${fib} ${_opts} 316d3373029SBjoern A. Zeeb print_debug "reflect terminated without error." 317*0e7ed5d6SBjoern A. Zeeb fib=$((fib + 1)) 318d3373029SBjoern A. Zeeb done 319d3373029SBjoern A. Zeeb 320d3373029SBjoern A. Zeeb # Cleanup transfer networks. 321*0e7ed5d6SBjoern A. Zeeb fib=0 322*0e7ed5d6SBjoern A. Zeeb while test ${fib} -lt ${RT_NUMFIBS}; do 323*0e7ed5d6SBjoern A. Zeeb setfib -F${fib} \ 324*0e7ed5d6SBjoern A. Zeeb ifconfig ${IFACE} inet6 2001:2:${fib}::2/64 -alias 325d3373029SBjoern A. Zeeb delay 326*0e7ed5d6SBjoern A. Zeeb fib=$((fib + 1)) 327d3373029SBjoern A. Zeeb done 328d3373029SBjoern A. Zeeb} 329d3373029SBjoern A. Zeeb 330d3373029SBjoern A. Zeebtesttx_icmp6_connected_transfernets() 331d3373029SBjoern A. Zeeb{ 332d3373029SBjoern A. Zeeb 333d3373029SBjoern A. Zeeb testtx_ulp6_connected_transfernets \ 334d3373029SBjoern A. Zeeb "testtx_icmp6_connected_transfernets" "TCP6" 335d3373029SBjoern A. Zeeb} 336d3373029SBjoern A. Zeeb 337d3373029SBjoern A. Zeebtesttx_tcp6_connected_transfernets() 338d3373029SBjoern A. Zeeb{ 339d3373029SBjoern A. Zeeb 340d3373029SBjoern A. Zeeb testtx_ulp6_connected_transfernets \ 341d3373029SBjoern A. Zeeb "testtx_tcp6_connected_transfernets" "TCP6" 342d3373029SBjoern A. Zeeb} 343d3373029SBjoern A. Zeeb 344d3373029SBjoern A. Zeebtesttx_udp6_connected_transfernets() 345d3373029SBjoern A. Zeeb{ 346d3373029SBjoern A. Zeeb 347d3373029SBjoern A. Zeeb testtx_ulp6_connected_transfernets \ 348d3373029SBjoern A. Zeeb "testtx_udp6_connected_transfernets" "UDP6" 349d3373029SBjoern A. Zeeb} 350d3373029SBjoern A. Zeeb 351d3373029SBjoern A. Zeebtesttx_icmp6_connected_ifconfig_transfernets() 352d3373029SBjoern A. Zeeb{ 353d3373029SBjoern A. Zeeb 354d3373029SBjoern A. Zeeb testtx_ulp6_connected_transfernets \ 355d3373029SBjoern A. Zeeb "testtx_icmp6_connected_ifconfig_transfernets" "TCP6" 356d3373029SBjoern A. Zeeb} 357d3373029SBjoern A. Zeeb 358d3373029SBjoern A. Zeebtesttx_tcp6_connected_ifconfig_transfernets() 359d3373029SBjoern A. Zeeb{ 360d3373029SBjoern A. Zeeb 361d3373029SBjoern A. Zeeb testtx_ulp6_connected_transfernets \ 362d3373029SBjoern A. Zeeb "testtx_tcp6_connected_ifconfig_transfernets" "TCP6" 363d3373029SBjoern A. Zeeb} 364d3373029SBjoern A. Zeeb 365d3373029SBjoern A. Zeebtesttx_udp6_connected_ifconfig_transfernets() 366d3373029SBjoern A. Zeeb{ 367d3373029SBjoern A. Zeeb 368d3373029SBjoern A. Zeeb testtx_ulp6_connected_transfernets \ 369d3373029SBjoern A. Zeeb "testtx_udp6_connected_ifconfig_transfernets" "UDP6" 370d3373029SBjoern A. Zeeb} 371d3373029SBjoern A. Zeeb 372d3373029SBjoern A. Zeeb################################################################################ 373d3373029SBjoern A. Zeeb# 374d3373029SBjoern A. Zeebtesttx_ulp6_gateway() 375d3373029SBjoern A. Zeeb{ 376d3373029SBjoern A. Zeeb local _opts _n _o 377d3373029SBjoern A. Zeeb _n="$1" 378d3373029SBjoern A. Zeeb _o="$2" 379d3373029SBjoern A. Zeeb 380d3373029SBjoern A. Zeeb ifconfig lo0 inet6 2001:2:ff01::2 -alias > /dev/null 2>&1 || true 381d3373029SBjoern A. Zeeb delay 382d3373029SBjoern A. Zeeb ifconfig lo0 inet6 2001:2:ff01::2 alias 383d3373029SBjoern A. Zeeb 384d3373029SBjoern A. Zeeb _opts="" 385d3373029SBjoern A. Zeeb case ${DEBUG} in 386d3373029SBjoern A. Zeeb ''|0) ;; 387d3373029SBjoern A. Zeeb 42) _opts="-d -d" ;; 388d3373029SBjoern A. Zeeb *) _opts="-d" ;; 389d3373029SBjoern A. Zeeb esac 390d3373029SBjoern A. Zeeb 391d3373029SBjoern A. Zeeb print_debug "./reflect -p ${CTRLPORT} -T ${_o} " \ 392d3373029SBjoern A. Zeeb "-t ${_n} ${_opts} -A 2001:2:ff01::2" 393d3373029SBjoern A. Zeeb ./reflect -p ${CTRLPORT} -T ${_o} \ 394d3373029SBjoern A. Zeeb -t ${_n} ${_opts} -A 2001:2:ff01::2 395d3373029SBjoern A. Zeeb print_debug "reflect terminated without error." 396d3373029SBjoern A. Zeeb 397d3373029SBjoern A. Zeeb ifconfig lo0 inet6 2001:2:ff01::2 -alias 398d3373029SBjoern A. Zeeb delay 399d3373029SBjoern A. Zeeb} 400d3373029SBjoern A. Zeeb 401d3373029SBjoern A. Zeebtesttx_icmp6_gateway() 402d3373029SBjoern A. Zeeb{ 403d3373029SBjoern A. Zeeb 404d3373029SBjoern A. Zeeb testtx_ulp6_gateway "testtx_icmp6_gateway" "TCP6" 405d3373029SBjoern A. Zeeb} 406d3373029SBjoern A. Zeeb 407d3373029SBjoern A. Zeebtesttx_tcp6_gateway() 408d3373029SBjoern A. Zeeb{ 409d3373029SBjoern A. Zeeb 410d3373029SBjoern A. Zeeb testtx_ulp6_gateway "testtx_tcp6_gateway" "TCP6" 411d3373029SBjoern A. Zeeb} 412d3373029SBjoern A. Zeeb 413d3373029SBjoern A. Zeebtesttx_udp6_gateway() 414d3373029SBjoern A. Zeeb{ 415d3373029SBjoern A. Zeeb 416d3373029SBjoern A. Zeeb testtx_ulp6_gateway "testtx_udp6_gateway" "UDP6" 417d3373029SBjoern A. Zeeb} 418d3373029SBjoern A. Zeeb 419d3373029SBjoern A. Zeeb################################################################################ 420d3373029SBjoern A. Zeeb# 421d3373029SBjoern A. Zeebtesttx_ulp6_transfernets_gateways() 422d3373029SBjoern A. Zeeb{ 423*0e7ed5d6SBjoern A. Zeeb local _opts fib _n _o 424d3373029SBjoern A. Zeeb _n="$1" 425d3373029SBjoern A. Zeeb _o="$2" 426d3373029SBjoern A. Zeeb 427d3373029SBjoern A. Zeeb _opts="" 428d3373029SBjoern A. Zeeb case ${DEBUG} in 429d3373029SBjoern A. Zeeb ''|0) ;; 430d3373029SBjoern A. Zeeb 42) _opts="-d -d" ;; 431d3373029SBjoern A. Zeeb *) _opts="-d" ;; 432d3373029SBjoern A. Zeeb esac 433d3373029SBjoern A. Zeeb 434d3373029SBjoern A. Zeeb # Setup transfer networks. 435*0e7ed5d6SBjoern A. Zeeb fib=0 436*0e7ed5d6SBjoern A. Zeeb while test ${fib} -lt ${RT_NUMFIBS}; do 437*0e7ed5d6SBjoern A. Zeeb setfib -F${fib} \ 438*0e7ed5d6SBjoern A. Zeeb ifconfig ${IFACE} inet6 2001:2:${fib}::2/64 alias 439*0e7ed5d6SBjoern A. Zeeb fib=$((fib + 1)) 440d3373029SBjoern A. Zeeb done 441d3373029SBjoern A. Zeeb 442d3373029SBjoern A. Zeeb # Setup out listener IP. 443d3373029SBjoern A. Zeeb ifconfig lo0 inet6 2001:2:ff01::2 -alias > /dev/null 2>&1 || true 444d3373029SBjoern A. Zeeb delay 445d3373029SBjoern A. Zeeb ifconfig lo0 inet6 2001:2:ff01::2 alias 446d3373029SBjoern A. Zeeb 447d3373029SBjoern A. Zeeb # Reflect requests. 448d3373029SBjoern A. Zeeb print_debug "./reflect -p ${CTRLPORT} -T ${_o} " \ 449d3373029SBjoern A. Zeeb "-t ${_n} ${_opts} -A 2001:2:ff01::2" 450d3373029SBjoern A. Zeeb ./reflect -p ${CTRLPORT} -T ${_o} \ 451d3373029SBjoern A. Zeeb -t ${_n} ${_opts} -A 2001:2:ff01::2 452d3373029SBjoern A. Zeeb print_debug "reflect terminated without error." 453d3373029SBjoern A. Zeeb 454d3373029SBjoern A. Zeeb # Cleanup transfer networks and listener IP. 455*0e7ed5d6SBjoern A. Zeeb fib=0 456*0e7ed5d6SBjoern A. Zeeb while test ${fib} -lt ${RT_NUMFIBS}; do 457*0e7ed5d6SBjoern A. Zeeb setfib -F${fib} \ 458*0e7ed5d6SBjoern A. Zeeb ifconfig ${IFACE} inet6 2001:2:${fib}::2/64 -alias 459d3373029SBjoern A. Zeeb delay 460*0e7ed5d6SBjoern A. Zeeb fib=$((fib + 1)) 461d3373029SBjoern A. Zeeb done 462d3373029SBjoern A. Zeeb ifconfig lo0 inet6 2001:2:ff01::2 -alias 463d3373029SBjoern A. Zeeb} 464d3373029SBjoern A. Zeeb 465d3373029SBjoern A. Zeebtesttx_icmp6_transfernets_gateways() 466d3373029SBjoern A. Zeeb{ 467d3373029SBjoern A. Zeeb 468d3373029SBjoern A. Zeeb testtx_ulp6_transfernets_gateways \ 469d3373029SBjoern A. Zeeb "testtx_icmp6_transfernets_gateways" "TCP6" 470d3373029SBjoern A. Zeeb} 471d3373029SBjoern A. Zeeb 472d3373029SBjoern A. Zeebtesttx_tcp6_transfernets_gateways() 473d3373029SBjoern A. Zeeb{ 474d3373029SBjoern A. Zeeb 475d3373029SBjoern A. Zeeb testtx_ulp6_transfernets_gateways \ 476d3373029SBjoern A. Zeeb "testtx_tcp6_transfernets_gateways" "TCP6" 477d3373029SBjoern A. Zeeb} 478d3373029SBjoern A. Zeeb 479d3373029SBjoern A. Zeebtesttx_udp6_transfernets_gateways() 480d3373029SBjoern A. Zeeb{ 481d3373029SBjoern A. Zeeb 482d3373029SBjoern A. Zeeb testtx_ulp6_transfernets_gateways \ 483d3373029SBjoern A. Zeeb "testtx_udp6_transfernets_gateways" "UDP6" 484d3373029SBjoern A. Zeeb} 485d3373029SBjoern A. Zeeb 486d3373029SBjoern A. Zeeb 487d3373029SBjoern A. Zeeb################################################################################ 488d3373029SBjoern A. Zeeb# 489d3373029SBjoern A. Zeebtesttx_ulp6_transfernets_gateway() 490d3373029SBjoern A. Zeeb{ 491*0e7ed5d6SBjoern A. Zeeb local _opts fib _n _o 492d3373029SBjoern A. Zeeb _n="$1" 493d3373029SBjoern A. Zeeb _o="$2" 494d3373029SBjoern A. Zeeb 495d3373029SBjoern A. Zeeb _opts="" 496d3373029SBjoern A. Zeeb case ${DEBUG} in 497d3373029SBjoern A. Zeeb ''|0) ;; 498d3373029SBjoern A. Zeeb 42) _opts="-d -d" ;; 499d3373029SBjoern A. Zeeb *) _opts="-d" ;; 500d3373029SBjoern A. Zeeb esac 501d3373029SBjoern A. Zeeb 502d3373029SBjoern A. Zeeb # Setup transfer networks. 503*0e7ed5d6SBjoern A. Zeeb fib=0 504*0e7ed5d6SBjoern A. Zeeb while test ${fib} -lt ${RT_NUMFIBS}; do 505*0e7ed5d6SBjoern A. Zeeb setfib -F${fib} \ 506*0e7ed5d6SBjoern A. Zeeb ifconfig ${IFACE} inet6 2001:2:${fib}::2/64 alias 507*0e7ed5d6SBjoern A. Zeeb fib=$((fib + 1)) 508d3373029SBjoern A. Zeeb done 509d3373029SBjoern A. Zeeb 510d3373029SBjoern A. Zeeb # Setup out listener IP. 511d3373029SBjoern A. Zeeb ifconfig lo0 inet6 2001:2:ff01::2 -alias > /dev/null 2>&1 || true 512d3373029SBjoern A. Zeeb delay 513d3373029SBjoern A. Zeeb ifconfig lo0 inet6 2001:2:ff01::2 alias 514d3373029SBjoern A. Zeeb 515d3373029SBjoern A. Zeeb # Reflect requests. 516*0e7ed5d6SBjoern A. Zeeb fib=0 517*0e7ed5d6SBjoern A. Zeeb while test ${fib} -lt ${RT_NUMFIBS}; do 518d3373029SBjoern A. Zeeb print_debug "./reflect -p ${CTRLPORT} -T ${_o} " \ 519*0e7ed5d6SBjoern A. Zeeb "-t ${_n}${fib} ${_opts} -A 2001:2:ff01::2" 520d3373029SBjoern A. Zeeb ./reflect -p ${CTRLPORT} -T ${_o} \ 521*0e7ed5d6SBjoern A. Zeeb -t ${_n}${fib} ${_opts} -A 2001:2:ff01::2 522d3373029SBjoern A. Zeeb print_debug "reflect terminated without error." 523*0e7ed5d6SBjoern A. Zeeb fib=$((fib + 1)) 524d3373029SBjoern A. Zeeb done 525d3373029SBjoern A. Zeeb 526d3373029SBjoern A. Zeeb # Cleanup transfer networks and listener IP. 527*0e7ed5d6SBjoern A. Zeeb fib=0 528*0e7ed5d6SBjoern A. Zeeb while test ${fib} -lt ${RT_NUMFIBS}; do 529*0e7ed5d6SBjoern A. Zeeb setfib -F${fib} \ 530*0e7ed5d6SBjoern A. Zeeb ifconfig ${IFACE} inet6 2001:2:${fib}::2/64 -alias 531d3373029SBjoern A. Zeeb delay 532*0e7ed5d6SBjoern A. Zeeb fib=$((fib + 1)) 533d3373029SBjoern A. Zeeb done 534d3373029SBjoern A. Zeeb ifconfig lo0 inet6 2001:2:ff01::2 -alias 535d3373029SBjoern A. Zeeb} 536d3373029SBjoern A. Zeeb 537d3373029SBjoern A. Zeebtesttx_icmp6_transfernets_gateway() 538d3373029SBjoern A. Zeeb{ 539d3373029SBjoern A. Zeeb 540d3373029SBjoern A. Zeeb testtx_ulp6_transfernets_gateway \ 541d3373029SBjoern A. Zeeb "testtx_icmp6_transfernets_gateway" "TCP6" 542d3373029SBjoern A. Zeeb} 543d3373029SBjoern A. Zeeb 544d3373029SBjoern A. Zeebtesttx_tcp6_transfernets_gateway() 545d3373029SBjoern A. Zeeb{ 546d3373029SBjoern A. Zeeb 547d3373029SBjoern A. Zeeb testtx_ulp6_transfernets_gateway \ 548d3373029SBjoern A. Zeeb "testtx_tcp6_transfernets_gateway" "TCP6" 549d3373029SBjoern A. Zeeb} 550d3373029SBjoern A. Zeeb 551d3373029SBjoern A. Zeebtesttx_udp6_transfernets_gateway() 552d3373029SBjoern A. Zeeb{ 553d3373029SBjoern A. Zeeb 554d3373029SBjoern A. Zeeb testtx_ulp6_transfernets_gateway \ 555d3373029SBjoern A. Zeeb "testtx_udp6_transfernets_gateway" "UDP6" 556d3373029SBjoern A. Zeeb} 557d3373029SBjoern A. Zeeb 558d3373029SBjoern A. Zeeb################################################################################ 559d3373029SBjoern A. Zeeb# 560d3373029SBjoern A. Zeeb# We are receiver, but the FIBs are with us this time. 561d3373029SBjoern A. Zeeb# 562d3373029SBjoern A. Zeeb# 563d3373029SBjoern A. Zeeb 564d3373029SBjoern A. Zeeb# # For IPFW, IFCONFIG 565d3373029SBjoern A. Zeeb# # For each FIB 566d3373029SBjoern A. Zeeb# # Send OOB well known to work START, wait for reflect 567d3373029SBjoern A. Zeeb# # Send probe, wait for reply with FIB# or RST/ICMP6 unreach 568d3373029SBjoern A. Zeeb# # (in case of ICMP6 use magic like ipfw count and OOB reply) 569d3373029SBjoern A. Zeeb# # Send OOB well known to work DONE, wait for reflect 570d3373029SBjoern A. Zeeb# # Compare real with expected results. 571d3373029SBjoern A. Zeeb# 572d3373029SBjoern A. Zeeb 573d3373029SBjoern A. Zeebtextrx_ipfw_setup() 574d3373029SBjoern A. Zeeb{ 575d3373029SBjoern A. Zeeb local _fib _transfer i _p _o 576d3373029SBjoern A. Zeeb _fib=$1 577d3373029SBjoern A. Zeeb _transfer=$2 578d3373029SBjoern A. Zeeb 579d3373029SBjoern A. Zeeb # ICMP6 would need content inspection to distinguish FIB, we can 580d3373029SBjoern A. Zeeb # only differentiate by address. 581d3373029SBjoern A. Zeeb # For the default single-address cases always set to current FIB. 582d3373029SBjoern A. Zeeb ipfw add 100 setfib ${_fib} ipv6-icmp \ 583d3373029SBjoern A. Zeeb from ${PEERADDR} to ${OURADDR} \ 584d3373029SBjoern A. Zeeb via ${IFACE} in > /dev/null 2>&1 585d3373029SBjoern A. Zeeb ipfw add 100 setfib ${_fib} ipv6-icmp \ 586d3373029SBjoern A. Zeeb from ${PEERLINKLOCAL%\%*} to ${OURLINKLOCAL%\%*} \ 587d3373029SBjoern A. Zeeb via ${IFACE} in > /dev/null 2>&1 588d3373029SBjoern A. Zeeb 589d3373029SBjoern A. Zeeb # Always also do a setfib for the control port so that OOB 590d3373029SBjoern A. Zeeb # signaling workes even if we remove connected subnets. 591d3373029SBjoern A. Zeeb ipfw add 200 setfib ${_fib} ip6 from ${PEERADDR} to ${OURADDR} \ 592d3373029SBjoern A. Zeeb dst-port ${CTRLPORT} via ${IFACE} in > /dev/null 2>&1 593d3373029SBjoern A. Zeeb 594d3373029SBjoern A. Zeeb # Save addresses 595d3373029SBjoern A. Zeeb _p="${PEERADDR}" 596d3373029SBjoern A. Zeeb _o="${OURADDR}" 597d3373029SBjoern A. Zeeb 598d3373029SBjoern A. Zeeb i=0 599d3373029SBjoern A. Zeeb while test ${i} -lt ${RT_NUMFIBS}; do 600d3373029SBjoern A. Zeeb 601d3373029SBjoern A. Zeeb # If doing multiple transfer networks, replace PEERADDR. 602d3373029SBjoern A. Zeeb case ${_transfer} in 603d3373029SBjoern A. Zeeb 1) PEERADDR=2001:2:${i}::1 604d3373029SBjoern A. Zeeb OURADDR=2001:2:${i}::2 605d3373029SBjoern A. Zeeb ;; 606d3373029SBjoern A. Zeeb esac 607d3373029SBjoern A. Zeeb 608d3373029SBjoern A. Zeeb if test ${_instances} -gt 1 -o ${_transfer} -eq 1; then 609d3373029SBjoern A. Zeeb ipfw add 400 setfib ${_fib} ipv6-icmp \ 610d3373029SBjoern A. Zeeb from ${PEERADDR} to ${OURADDR} \ 611d3373029SBjoern A. Zeeb icmp6types 128 \ 612d3373029SBjoern A. Zeeb via ${IFACE} in > /dev/null 2>&1 613d3373029SBjoern A. Zeeb fi 614d3373029SBjoern A. Zeeb 615d3373029SBjoern A. Zeeb case ${i} in 616d3373029SBjoern A. Zeeb ${_fib}) 617d3373029SBjoern A. Zeeb ipfw add 400 setfib ${_fib} ip6 \ 618d3373029SBjoern A. Zeeb from ${PEERADDR} to ${OURADDR} \ 619d3373029SBjoern A. Zeeb dst-port $((CTRLPORT + 1000 + i)) \ 620d3373029SBjoern A. Zeeb via ${IFACE} in > /dev/null 2>&1 621d3373029SBjoern A. Zeeb ipfw add 400 setfib ${_fib} ip6 \ 622d3373029SBjoern A. Zeeb from ${PEERLINKLOCAL%\%*} to ${OURLINKLOCAL%\%*} \ 623d3373029SBjoern A. Zeeb dst-port $((CTRLPORT + 1000 + i)) \ 624d3373029SBjoern A. Zeeb via ${IFACE} in > /dev/null 2>&1 625d3373029SBjoern A. Zeeb if test ${_instances} -le 1 -o ${_transfer} -ne 1; then 626d3373029SBjoern A. Zeeb ipfw add 400 setfib ${_fib} ipv6-icmp \ 627d3373029SBjoern A. Zeeb from ${PEERADDR} to ${OURADDR} \ 628d3373029SBjoern A. Zeeb icmp6types 128 \ 629d3373029SBjoern A. Zeeb via ${IFACE} in > /dev/null 2>&1 630d3373029SBjoern A. Zeeb fi 631d3373029SBjoern A. Zeeb ;; 632d3373029SBjoern A. Zeeb esac 633d3373029SBjoern A. Zeeb 634d3373029SBjoern A. Zeeb i=$((i + 1)) 635d3373029SBjoern A. Zeeb done 636d3373029SBjoern A. Zeeb 637d3373029SBjoern A. Zeeb # Restore addresses. 638d3373029SBjoern A. Zeeb PEERADDR="${_p}" 639d3373029SBjoern A. Zeeb OURADDR="${_o}" 640d3373029SBjoern A. Zeeb 641d3373029SBjoern A. Zeeb case ${DEBUG} in 642d3373029SBjoern A. Zeeb ''|0) ;; 643d3373029SBjoern A. Zeeb *) ipfw show ;; 644d3373029SBjoern A. Zeeb esac 645d3373029SBjoern A. Zeeb} 646d3373029SBjoern A. Zeeb 647d3373029SBjoern A. Zeebtextrx_ifconfig_setup() 648d3373029SBjoern A. Zeeb{ 649d3373029SBjoern A. Zeeb local _fib 650d3373029SBjoern A. Zeeb _fib=$1 651d3373029SBjoern A. Zeeb 652d3373029SBjoern A. Zeeb ifconfig ${IFACE} fib ${_fib} > /dev/null 2>&1 653d3373029SBjoern A. Zeeb} 654d3373029SBjoern A. Zeeb 655d3373029SBjoern A. Zeebtextrx_ipfw_cleanup() 656d3373029SBjoern A. Zeeb{ 657d3373029SBjoern A. Zeeb local i 658d3373029SBjoern A. Zeeb 659d3373029SBjoern A. Zeeb case ${DEBUG} in 660d3373029SBjoern A. Zeeb ''|0) ;; 661d3373029SBjoern A. Zeeb *) ipfw show ;; 662d3373029SBjoern A. Zeeb esac 663d3373029SBjoern A. Zeeb 664d3373029SBjoern A. Zeeb ipfw delete 100 > /dev/null 2>&1 || true 665d3373029SBjoern A. Zeeb ipfw delete 200 > /dev/null 2>&1 || true 666d3373029SBjoern A. Zeeb ipfw delete 400 > /dev/null 2>&1 || true 667d3373029SBjoern A. Zeeb 668d3373029SBjoern A. Zeeb i=0 669d3373029SBjoern A. Zeeb while test ${i} -lt ${RT_NUMFIBS}; do 670d3373029SBjoern A. Zeeb 671d3373029SBjoern A. Zeeb ipfw delete $((1000 + i)) > /dev/null 2>&1 || true 672d3373029SBjoern A. Zeeb i=$((i + 1)) 673d3373029SBjoern A. Zeeb done 674d3373029SBjoern A. Zeeb} 675d3373029SBjoern A. Zeeb 676d3373029SBjoern A. Zeebtextrx_ifconfig_cleanup() 677d3373029SBjoern A. Zeeb{ 678d3373029SBjoern A. Zeeb 679d3373029SBjoern A. Zeeb ifconfig ${IFACE} fib 0 > /dev/null 2>&1 680d3373029SBjoern A. Zeeb} 681d3373029SBjoern A. Zeeb 682d3373029SBjoern A. Zeebtextrx_count_setup() 683d3373029SBjoern A. Zeeb{ 684d3373029SBjoern A. Zeeb local i 685d3373029SBjoern A. Zeeb 686d3373029SBjoern A. Zeeb i=0 687d3373029SBjoern A. Zeeb while test ${i} -lt ${RT_NUMFIBS}; do 688d3373029SBjoern A. Zeeb 689d3373029SBjoern A. Zeeb # Count ICMP6 echo replies. 690d3373029SBjoern A. Zeeb ipfw add $((500 + i)) count ipv6-icmp from any to any \ 691d3373029SBjoern A. Zeeb icmp6types 129 fib ${i} via ${IFACE} out > /dev/null 2>&1 692d3373029SBjoern A. Zeeb ipfw add $((500 + i)) count tcp from any to any \ 693d3373029SBjoern A. Zeeb fib ${i} via ${IFACE} out > /dev/null 2>&1 694d3373029SBjoern A. Zeeb ipfw add $((500 + i)) count udp from any to any \ 695d3373029SBjoern A. Zeeb fib ${i} via ${IFACE} out > /dev/null 2>&1 696d3373029SBjoern A. Zeeb i=$((i + 1)) 697d3373029SBjoern A. Zeeb done 698d3373029SBjoern A. Zeeb} 699d3373029SBjoern A. Zeeb 700d3373029SBjoern A. Zeebtextrx_count_results() 701d3373029SBjoern A. Zeeb{ 702d3373029SBjoern A. Zeeb local _fib _o i _rstr _c _req _p _opts 703d3373029SBjoern A. Zeeb _fib=$1 704d3373029SBjoern A. Zeeb _o="$2" 705d3373029SBjoern A. Zeeb 706d3373029SBjoern A. Zeeb case ${DEBUG} in 707d3373029SBjoern A. Zeeb ''|0) ;; 708d3373029SBjoern A. Zeeb *) ipfw show ;; 709d3373029SBjoern A. Zeeb esac 710d3373029SBjoern A. Zeeb 711d3373029SBjoern A. Zeeb _rstr="" 712d3373029SBjoern A. Zeeb i=0 713d3373029SBjoern A. Zeeb while test ${i} -lt ${RT_NUMFIBS}; do 714d3373029SBjoern A. Zeeb 715d3373029SBjoern A. Zeeb case "${_o}" in 716d3373029SBjoern A. Zeeb "-i") _c=`ipfw show $((500 + i)) | awk '/ ipv6-icmp / { print $2 }'` ;; 717d3373029SBjoern A. Zeeb "-u") _c=`ipfw show $((500 + i)) | awk '/ udp / { print $2 }'` ;; 718d3373029SBjoern A. Zeeb *) _c=`ipfw show $((500 + i)) | awk '/ tcp / { print $2 }'` ;; 719d3373029SBjoern A. Zeeb esac 720d3373029SBjoern A. Zeeb _rstr="${_rstr}${i} ${_c}," 721d3373029SBjoern A. Zeeb 722d3373029SBjoern A. Zeeb ipfw delete $((500 + i)) > /dev/null 2>&1 || true 723d3373029SBjoern A. Zeeb i=$((i + 1)) 724d3373029SBjoern A. Zeeb done 725d3373029SBjoern A. Zeeb 726d3373029SBjoern A. Zeeb # We do not care about the request. 727d3373029SBjoern A. Zeeb _req=`echo "RESULT ${_rstr}" | nc -V ${_fib} -6 -l ${CTRLPORT}` 728d3373029SBjoern A. Zeeb print_debug "$? -- ${_req} -- RESULT ${_rstr}" 729d3373029SBjoern A. Zeeb} 730d3373029SBjoern A. Zeeb 731d3373029SBjoern A. Zeebtestrx_remove_connected() 732d3373029SBjoern A. Zeeb{ 733d3373029SBjoern A. Zeeb local _fib _transfer i j _prefix 734d3373029SBjoern A. Zeeb _fib=$1 735d3373029SBjoern A. Zeeb _transfer=$2 736d3373029SBjoern A. Zeeb 737d3373029SBjoern A. Zeeb if test ${_transfer} -eq 1; then 738d3373029SBjoern A. Zeeb i=0 739d3373029SBjoern A. Zeeb while test ${i} -lt ${RT_NUMFIBS}; do 740d3373029SBjoern A. Zeeb j=0 741d3373029SBjoern A. Zeeb while test ${j} -lt ${RT_NUMFIBS}; do 742d3373029SBjoern A. Zeeb _prefix="2001:2:${j}::" 743d3373029SBjoern A. Zeeb 744d3373029SBjoern A. Zeeb case ${j} in 745d3373029SBjoern A. Zeeb ${_fib});; 746d3373029SBjoern A. Zeeb *) print_debug "setfib -F${i} route delete" \ 747d3373029SBjoern A. Zeeb "-inet6 -net ${_prefix}" 748d3373029SBjoern A. Zeeb setfib -F${i} route delete -inet6 -net \ 749d3373029SBjoern A. Zeeb ${_prefix} > /dev/null 2>&1 750d3373029SBjoern A. Zeeb ;; 751d3373029SBjoern A. Zeeb esac 752d3373029SBjoern A. Zeeb j=$((j + 1)) 753d3373029SBjoern A. Zeeb done 754d3373029SBjoern A. Zeeb i=$((i + 1)) 755d3373029SBjoern A. Zeeb done 756d3373029SBjoern A. Zeeb 757d3373029SBjoern A. Zeeb else 758*0e7ed5d6SBjoern A. Zeeb _prefix=${OURADDR%2} # Luckily we know the details. 759d3373029SBjoern A. Zeeb i=0 760d3373029SBjoern A. Zeeb while test ${i} -lt ${RT_NUMFIBS}; do 761d3373029SBjoern A. Zeeb 762d3373029SBjoern A. Zeeb case ${i} in 763d3373029SBjoern A. Zeeb ${_fib});; 764d3373029SBjoern A. Zeeb *) print_debug "setfib -F${i} route delete" \ 765d3373029SBjoern A. Zeeb "-inet6 -net ${_prefix}" 766d3373029SBjoern A. Zeeb setfib -F${i} route delete -inet6 -net \ 767d3373029SBjoern A. Zeeb ${_prefix} > /dev/null 2>&1 768d3373029SBjoern A. Zeeb ;; 769d3373029SBjoern A. Zeeb esac 770d3373029SBjoern A. Zeeb 771d3373029SBjoern A. Zeeb i=$((i + 1)) 772d3373029SBjoern A. Zeeb done 773d3373029SBjoern A. Zeeb fi 774d3373029SBjoern A. Zeeb} 775d3373029SBjoern A. Zeeb 776d3373029SBjoern A. Zeebtestrx_cleanup_connected() 777d3373029SBjoern A. Zeeb{ 778d3373029SBjoern A. Zeeb local _fib _transfer i _prefix 779d3373029SBjoern A. Zeeb _fib=$1 780d3373029SBjoern A. Zeeb _transfer=$2 781d3373029SBjoern A. Zeeb 782d3373029SBjoern A. Zeeb if test ${_transfer} -eq 1; then 783d3373029SBjoern A. Zeeb 784d3373029SBjoern A. Zeeb i=0 785d3373029SBjoern A. Zeeb while test ${i} -lt ${RT_NUMFIBS}; do 786d3373029SBjoern A. Zeeb setfib -F${i} \ 787d3373029SBjoern A. Zeeb ifconfig ${IFACE} inet6 2001:2:${i}::2/64 -alias \ 788d3373029SBjoern A. Zeeb > /dev/null 2>&1 789d3373029SBjoern A. Zeeb delay 790d3373029SBjoern A. Zeeb i=$((i + 1)) 791d3373029SBjoern A. Zeeb done 792d3373029SBjoern A. Zeeb 793d3373029SBjoern A. Zeeb else 794d3373029SBjoern A. Zeeb # Use the hammer removing the address and adding it again to get 795d3373029SBjoern A. Zeeb # the connected subnet back to all FIBs. Hard to do otherwise. 796d3373029SBjoern A. Zeeb ifconfig ${IFACE} inet6 ${OURADDR}/64 -alias || true 797d3373029SBjoern A. Zeeb delay 798d3373029SBjoern A. Zeeb ifconfig ${IFACE} inet6 ${OURADDR}/64 alias up 799d3373029SBjoern A. Zeeb fi 800d3373029SBjoern A. Zeeb} 801d3373029SBjoern A. Zeeb 802d3373029SBjoern A. Zeebtestrx_setup_transfer_networks() 803d3373029SBjoern A. Zeeb{ 804d3373029SBjoern A. Zeeb local i 805d3373029SBjoern A. Zeeb 806d3373029SBjoern A. Zeeb i=0 807d3373029SBjoern A. Zeeb while test ${i} -lt ${RT_NUMFIBS}; do 808d3373029SBjoern A. Zeeb ifconfig ${IFACE} inet6 2001:2:${i}::2/64 -alias \ 809d3373029SBjoern A. Zeeb > /dev/null 2>&1 || true 810d3373029SBjoern A. Zeeb delay 811d3373029SBjoern A. Zeeb ifconfig ${IFACE} inet6 2001:2:${i}::2/64 alias 812d3373029SBjoern A. Zeeb i=$((i + 1)) 813d3373029SBjoern A. Zeeb done 814d3373029SBjoern A. Zeeb} 815d3373029SBjoern A. Zeeb 816d3373029SBjoern A. Zeebtestrx_run_one() 817d3373029SBjoern A. Zeeb{ 818d3373029SBjoern A. Zeeb local _fib _txt _opts 819d3373029SBjoern A. Zeeb _fib=$1 820d3373029SBjoern A. Zeeb _txt="$2" 821d3373029SBjoern A. Zeeb _opts="$3" 822d3373029SBjoern A. Zeeb 823d3373029SBjoern A. Zeeb case ${USE_SOSETFIB} in 824d3373029SBjoern A. Zeeb 0) print_debug "setfib -F${_fib} ./reflect -p ${CTRLPORT}" \ 825d3373029SBjoern A. Zeeb "-t ${_txt} ${_opts}" 826d3373029SBjoern A. Zeeb setfib -F${_fib} ./reflect -p ${CTRLPORT} -t ${_txt} ${_opts} 827d3373029SBjoern A. Zeeb ;; 828d3373029SBjoern A. Zeeb 1) print_debug "./reflect -F${_fib} -p ${CTRLPORT} -t ${_txt}" \ 829d3373029SBjoern A. Zeeb "${_opts}" 830d3373029SBjoern A. Zeeb ./reflect -F${_fib} -p ${CTRLPORT} -t ${_txt} ${_opts} 831d3373029SBjoern A. Zeeb ;; 832d3373029SBjoern A. Zeeb *) die "Invalid value for USE_SOSETFIB: ${USE_SOSETFIB}" ;; 833d3373029SBjoern A. Zeeb esac 834d3373029SBjoern A. Zeeb print_debug "reflect '${_txt}' terminated without error." 835d3373029SBjoern A. Zeeb} 836d3373029SBjoern A. Zeeb 837d3373029SBjoern A. Zeebtestrx_run_multiple() 838d3373029SBjoern A. Zeeb{ 839d3373029SBjoern A. Zeeb local _fib _txt _opts i _jobs _p _w 840d3373029SBjoern A. Zeeb _fib=$1 841d3373029SBjoern A. Zeeb _txt="$2" 842d3373029SBjoern A. Zeeb _opts="$3" 843d3373029SBjoern A. Zeeb 844d3373029SBjoern A. Zeeb i=0 845d3373029SBjoern A. Zeeb _jobs="" 846d3373029SBjoern A. Zeeb while test ${i} -lt ${RT_NUMFIBS}; do 847d3373029SBjoern A. Zeeb case ${USE_SOSETFIB} in 848d3373029SBjoern A. Zeeb 0) print_debug "setfib -F${i} ./reflect" \ 849d3373029SBjoern A. Zeeb "-p $((CTRLPORT + 1000 + i))" \ 850d3373029SBjoern A. Zeeb "-t ${_txt} ${_opts} -N -f ${i} &" 851d3373029SBjoern A. Zeeb setfib -F${i} ./reflect -p $((CTRLPORT + 1000 + i)) \ 852d3373029SBjoern A. Zeeb -t ${_txt} ${_opts} -N -f ${i} & 853d3373029SBjoern A. Zeeb ;; 854d3373029SBjoern A. Zeeb 1) print_debug "./reflect -F ${i}" \ 855d3373029SBjoern A. Zeeb "-p $((CTRLPORT + 1000 + i))" \ 856d3373029SBjoern A. Zeeb "-t ${_txt} ${_opts} -N -f ${i} &" 857d3373029SBjoern A. Zeeb ./reflect -F ${i} -p $((CTRLPORT + 1000 + i)) \ 858d3373029SBjoern A. Zeeb -t ${_txt} ${_opts} -N -f ${i} & 859d3373029SBjoern A. Zeeb ;; 860d3373029SBjoern A. Zeeb *) die "Invalid value for USE_SOSETFIB: ${USE_SOSETFIB}" ;; 861d3373029SBjoern A. Zeeb esac 862d3373029SBjoern A. Zeeb _p=$! 863d3373029SBjoern A. Zeeb _jobs="${_jobs}${_p} " 864d3373029SBjoern A. Zeeb case ${i} in 865d3373029SBjoern A. Zeeb ${_fib}) _w=${_p} ;; 866d3373029SBjoern A. Zeeb esac 867d3373029SBjoern A. Zeeb i=$((i + 1)) 868d3373029SBjoern A. Zeeb done 869d3373029SBjoern A. Zeeb 870d3373029SBjoern A. Zeeb # Start OOB control connection for START/DONE. 871d3373029SBjoern A. Zeeb testrx_run_one ${_fib} "${_txt}" "${_opts}" 872d3373029SBjoern A. Zeeb print_debug "KILL ${_jobs}" 873d3373029SBjoern A. Zeeb for i in ${_jobs}; do 874d3373029SBjoern A. Zeeb kill ${i} || true 875d3373029SBjoern A. Zeeb done 876d3373029SBjoern A. Zeeb #killall reflect || true 877d3373029SBjoern A. Zeeb print_debug "reflects for '${_txt}' terminated without error." 878d3373029SBjoern A. Zeeb} 879d3373029SBjoern A. Zeeb 880d3373029SBjoern A. Zeebtestrx_run_test() 881d3373029SBjoern A. Zeeb{ 882d3373029SBjoern A. Zeeb local _n _t _fib _o _txt i _f _instance _destructive _transfer 883d3373029SBjoern A. Zeeb _n="$1" 884d3373029SBjoern A. Zeeb _t="$2" 885d3373029SBjoern A. Zeeb _fib=$3 886d3373029SBjoern A. Zeeb _o="$4" 887d3373029SBjoern A. Zeeb _instances=$5 888d3373029SBjoern A. Zeeb _destructive=$6 889d3373029SBjoern A. Zeeb _transfer=$7 890d3373029SBjoern A. Zeeb 891d3373029SBjoern A. Zeeb : ${_destructive:=0} 892d3373029SBjoern A. Zeeb 893d3373029SBjoern A. Zeeb _opts="" 894d3373029SBjoern A. Zeeb case ${DEBUG} in 895d3373029SBjoern A. Zeeb ''|0) ;; 896d3373029SBjoern A. Zeeb 42) _opts="-d -d" ;; 897d3373029SBjoern A. Zeeb *) _opts="-d" ;; 898d3373029SBjoern A. Zeeb esac 899d3373029SBjoern A. Zeeb 900d3373029SBjoern A. Zeeb # Convert netcat options to reflect aguments. 901d3373029SBjoern A. Zeeb case "${_o}" in 902d3373029SBjoern A. Zeeb -i) _opts="${_opts} -T TCP6" ;; # Use TCP for START/DONE. 903d3373029SBjoern A. Zeeb -u) _opts="${_opts} -T UDP6" ;; 904d3373029SBjoern A. Zeeb *) _opts="${_opts} -T TCP6" ;; 905d3373029SBjoern A. Zeeb esac 906d3373029SBjoern A. Zeeb 907d3373029SBjoern A. Zeeb # Combined test case base name. 908d3373029SBjoern A. Zeeb case ${USE_SOSETFIB} in 909d3373029SBjoern A. Zeeb 0) _f="setfib" ;; 910d3373029SBjoern A. Zeeb 1) _f="so_setfib" ;; 911d3373029SBjoern A. Zeeb *) die "Unexpected value for SO_SETFIB: ${SO_SETFIB}" ;; 912d3373029SBjoern A. Zeeb esac 913d3373029SBjoern A. Zeeb 914d3373029SBjoern A. Zeeb _txt="${_n}_${_f}_${_t}_${_fib}_${_instances}_${_destructive}_${_transfer}" 915d3373029SBjoern A. Zeeb 916d3373029SBjoern A. Zeeb case ${_transfer} in 917d3373029SBjoern A. Zeeb 1) testrx_setup_transfer_networks ;; 918d3373029SBjoern A. Zeeb esac 919d3373029SBjoern A. Zeeb 920d3373029SBjoern A. Zeeb case "${_t}" in 921d3373029SBjoern A. Zeeb ipfw) textrx_ipfw_setup ${_fib} ${_transfer} ${_instances} ;; 922d3373029SBjoern A. Zeeb ifconfig) textrx_ifconfig_setup ${_fib} ;; 923d3373029SBjoern A. Zeeb *) die "Invalid type in ${_txt}" ;; 924d3373029SBjoern A. Zeeb esac 925d3373029SBjoern A. Zeeb 926d3373029SBjoern A. Zeeb # Setup unresponsive FIBs. 927d3373029SBjoern A. Zeeb case ${_destructive} in 928d3373029SBjoern A. Zeeb 1) testrx_remove_connected ${_fib} ${_transfer} ;; 929d3373029SBjoern A. Zeeb esac 930d3373029SBjoern A. Zeeb 931d3373029SBjoern A. Zeeb # Setup to get result counts. 932d3373029SBjoern A. Zeeb textrx_count_setup 933d3373029SBjoern A. Zeeb 934d3373029SBjoern A. Zeeb # Run just one / one per FIB (with incremental ports). 935d3373029SBjoern A. Zeeb #case ${_instances} in 936d3373029SBjoern A. Zeeb #1) testrx_run_one ${_fib} "${_txt}" "${_opts}" ;; 937d3373029SBjoern A. Zeeb #*) testrx_run_multiple ${_fib} "${_txt}" "${_opts}" ;; 938d3373029SBjoern A. Zeeb #esac 939d3373029SBjoern A. Zeeb testrx_run_multiple ${_fib} "${_txt}" "${_opts}" ${_transfer} 940d3373029SBjoern A. Zeeb 941d3373029SBjoern A. Zeeb # Export result counts. 942d3373029SBjoern A. Zeeb textrx_count_results ${_fib} "${_o}" 943d3373029SBjoern A. Zeeb 944d3373029SBjoern A. Zeeb # Cleanup unresponsive FIBs or multiple prefixes. 945d3373029SBjoern A. Zeeb if test ${_destructive} -eq 1 -o ${_transfer} -eq 1; then 946d3373029SBjoern A. Zeeb testrx_cleanup_connected ${_fib} ${_transfer} 947d3373029SBjoern A. Zeeb fi 948d3373029SBjoern A. Zeeb 949d3373029SBjoern A. Zeeb case "${_t}" in 950d3373029SBjoern A. Zeeb ipfw) textrx_ipfw_cleanup ;; 951d3373029SBjoern A. Zeeb ifconfig) textrx_ifconfig_cleanup ;; 952d3373029SBjoern A. Zeeb *) die "Invalid type in ${_txt}" ;; 953d3373029SBjoern A. Zeeb esac 954d3373029SBjoern A. Zeeb} 955d3373029SBjoern A. Zeeb 956d3373029SBjoern A. Zeebtestrx_main() 957d3373029SBjoern A. Zeeb{ 958*0e7ed5d6SBjoern A. Zeeb local _n _o s t fib _instances _destructive 959d3373029SBjoern A. Zeeb _n="$1" 960d3373029SBjoern A. Zeeb _o="$2" 961d3373029SBjoern A. Zeeb _instances=$3 962d3373029SBjoern A. Zeeb 963d3373029SBjoern A. Zeeb : ${_instances:=1} 964d3373029SBjoern A. Zeeb 965d3373029SBjoern A. Zeeb print_debug "${_n}" 966d3373029SBjoern A. Zeeb for _transfer in 1 0; do 967d3373029SBjoern A. Zeeb for _destructive in 0 1; do 968d3373029SBjoern A. Zeeb for t in ipfw ifconfig; do 969d3373029SBjoern A. Zeeb 970d3373029SBjoern A. Zeeb print_debug "${_n}_${t}" 971*0e7ed5d6SBjoern A. Zeeb fib=0 972*0e7ed5d6SBjoern A. Zeeb while test ${fib} -lt ${RT_NUMFIBS}; do 973d3373029SBjoern A. Zeeb 974*0e7ed5d6SBjoern A. Zeeb print_debug "${_n}_${t}_${fib}" \ 975d3373029SBjoern A. Zeeb "${_instances} ${_destructive}" \ 976d3373029SBjoern A. Zeeb "${_transfer}" 977*0e7ed5d6SBjoern A. Zeeb testrx_run_test "${_n}" "${t}" ${fib} \ 978d3373029SBjoern A. Zeeb "${_o}" ${_instances} \ 979d3373029SBjoern A. Zeeb ${_destructive} ${_transfer} 980d3373029SBjoern A. Zeeb 981*0e7ed5d6SBjoern A. Zeeb fib=$((fib + 1)) 982d3373029SBjoern A. Zeeb done 983d3373029SBjoern A. Zeeb done 984d3373029SBjoern A. Zeeb done 985d3373029SBjoern A. Zeeb done 986d3373029SBjoern A. Zeeb} 987d3373029SBjoern A. Zeeb 988d3373029SBjoern A. Zeeb################################################################################ 989d3373029SBjoern A. Zeeb# 990d3373029SBjoern A. Zeeb# Probe all FIBs with one "active" one a time. 991d3373029SBjoern A. Zeeb# 992d3373029SBjoern A. Zeebtestrx_icmp6_same_addr_one_fib_a_time() 993d3373029SBjoern A. Zeeb{ 994d3373029SBjoern A. Zeeb 995d3373029SBjoern A. Zeeb testrx_main "testrx_icmp6_same_addr_one_fib_a_time" "-i" 996d3373029SBjoern A. Zeeb} 997d3373029SBjoern A. Zeeb 998d3373029SBjoern A. Zeebtestrx_tcp6_same_addr_one_fib_a_time() 999d3373029SBjoern A. Zeeb{ 1000d3373029SBjoern A. Zeeb 1001d3373029SBjoern A. Zeeb testrx_main "testrx_tcp6_same_addr_one_fib_a_time" "" 1002d3373029SBjoern A. Zeeb} 1003d3373029SBjoern A. Zeeb 1004d3373029SBjoern A. Zeebtestrx_udp6_same_addr_one_fib_a_time() 1005d3373029SBjoern A. Zeeb{ 1006d3373029SBjoern A. Zeeb 1007d3373029SBjoern A. Zeeb testrx_main "testrx_udp6_same_addr_one_fib_a_time" "-u" 1008d3373029SBjoern A. Zeeb} 1009d3373029SBjoern A. Zeeb 1010d3373029SBjoern A. Zeeb################################################################################ 1011d3373029SBjoern A. Zeeb# 1012d3373029SBjoern A. Zeeb# Probe all FIBs with all "active" all time. 1013d3373029SBjoern A. Zeeb# 1014d3373029SBjoern A. Zeebtestrx_tcp6_same_addr_all_fibs_a_time() 1015d3373029SBjoern A. Zeeb{ 1016d3373029SBjoern A. Zeeb 1017d3373029SBjoern A. Zeeb testrx_main "testrx_tcp6_same_addr_all_fibs_a_time" "" ${RT_NUMFIBS} 1018d3373029SBjoern A. Zeeb} 1019d3373029SBjoern A. Zeeb 1020d3373029SBjoern A. Zeebtestrx_udp6_same_addr_all_fibs_a_time() 1021d3373029SBjoern A. Zeeb{ 1022d3373029SBjoern A. Zeeb 1023d3373029SBjoern A. Zeeb testrx_main "testrx_udp6_same_addr_all_fibs_a_time" "-u" ${RT_NUMFIBS} 1024d3373029SBjoern A. Zeeb} 1025d3373029SBjoern A. Zeeb 1026d3373029SBjoern A. Zeeb 1027d3373029SBjoern A. Zeeb################################################################################ 1028d3373029SBjoern A. Zeeb# 1029d3373029SBjoern A. Zeeb# Prereqs. 1030d3373029SBjoern A. Zeeb# 1031*0e7ed5d6SBjoern A. Zeebif test `sysctl -n security.jail.jailed` -eq 0; then 1032d3373029SBjoern A. Zeeb kldload ipfw > /dev/null 2>&1 || kldstat -v | grep -q ipfw 1033*0e7ed5d6SBjoern A. Zeebfi 1034*0e7ed5d6SBjoern A. Zeebipfw -f flush > /dev/null 2>&1 || die "please load ipfw in base system" 1035*0e7ed5d6SBjoern A. Zeebipfw add 65000 permit ip from any to any > /dev/null 2>&1 1036d3373029SBjoern A. Zeebkillall reflect || true 1037d3373029SBjoern A. Zeeb 1038d3373029SBjoern A. Zeeb################################################################################ 1039d3373029SBjoern A. Zeeb# 1040d3373029SBjoern A. Zeeb# Run tests. 1041d3373029SBjoern A. Zeeb# 1042d3373029SBjoern A. Zeebwait_remote_ready 1043d3373029SBjoern A. Zeeb 1044d3373029SBjoern A. Zeeb# We are receiver reflecting the input back. 1045d3373029SBjoern A. Zeebfor uso in 0 1; do 1046d3373029SBjoern A. Zeeb 1047d3373029SBjoern A. Zeeb # Only run ICMP6 tests for the first loop. 1048d3373029SBjoern A. Zeeb test ${uso} -ne 0 || testtx_icmp6_connected 1049d3373029SBjoern A. Zeeb testtx_tcp6_connected 1050d3373029SBjoern A. Zeeb testtx_udp6_connected 1051d3373029SBjoern A. Zeeb 1052d3373029SBjoern A. Zeeb test ${uso} -ne 0 || testtx_icmp6_connected_blackhole 1053d3373029SBjoern A. Zeeb testtx_tcp6_connected_blackhole 1054d3373029SBjoern A. Zeeb testtx_udp6_connected_blackhole 1055d3373029SBjoern A. Zeeb 1056d3373029SBjoern A. Zeeb test ${uso} -ne 0 || testtx_icmp6_connected_transfernets 1057d3373029SBjoern A. Zeeb testtx_tcp6_connected_transfernets 1058d3373029SBjoern A. Zeeb testtx_udp6_connected_transfernets 1059d3373029SBjoern A. Zeeb 1060d3373029SBjoern A. Zeeb test ${uso} -ne 0 || testtx_icmp6_connected_ifconfig_transfernets 1061d3373029SBjoern A. Zeeb testtx_tcp6_connected_ifconfig_transfernets 1062d3373029SBjoern A. Zeeb testtx_udp6_connected_ifconfig_transfernets 1063d3373029SBjoern A. Zeeb 1064d3373029SBjoern A. Zeeb test ${uso} -ne 0 || testtx_icmp6_gateway 1065d3373029SBjoern A. Zeeb testtx_tcp6_gateway 1066d3373029SBjoern A. Zeeb testtx_udp6_gateway 1067d3373029SBjoern A. Zeeb 1068d3373029SBjoern A. Zeeb test ${uso} -ne 0 || testtx_icmp6_transfernets_gateways 1069d3373029SBjoern A. Zeeb testtx_tcp6_transfernets_gateways 1070d3373029SBjoern A. Zeeb testtx_udp6_transfernets_gateways 1071d3373029SBjoern A. Zeeb 1072d3373029SBjoern A. Zeeb test ${uso} -ne 0 || testtx_icmp6_transfernets_gateway 1073d3373029SBjoern A. Zeeb testtx_tcp6_transfernets_gateway 1074d3373029SBjoern A. Zeeb testtx_udp6_transfernets_gateway 1075d3373029SBjoern A. Zeebdone 1076d3373029SBjoern A. Zeeb 1077d3373029SBjoern A. Zeebipfw -f flush > /dev/null 2>&1 1078*0e7ed5d6SBjoern A. Zeebipfw add 65000 permit ip from any to any > /dev/null 2>&1 1079d3373029SBjoern A. Zeeb 1080d3373029SBjoern A. Zeeb# We are receiver, but the FIBs are with us this time. 1081d3373029SBjoern A. Zeebfor uso in 0 1; do 1082d3373029SBjoern A. Zeeb 1083d3373029SBjoern A. Zeeb USE_SOSETFIB=${uso} 1084d3373029SBjoern A. Zeeb 1085d3373029SBjoern A. Zeeb # Only expect ICMP6 tests for the first loop. 1086d3373029SBjoern A. Zeeb test ${uso} -ne 0 || testrx_icmp6_same_addr_one_fib_a_time 1087d3373029SBjoern A. Zeeb testrx_tcp6_same_addr_one_fib_a_time 1088d3373029SBjoern A. Zeeb testrx_udp6_same_addr_one_fib_a_time 1089d3373029SBjoern A. Zeeb 1090d3373029SBjoern A. Zeeb testrx_tcp6_same_addr_all_fibs_a_time 1091d3373029SBjoern A. Zeeb testrx_udp6_same_addr_all_fibs_a_time 1092d3373029SBjoern A. Zeeb 1093d3373029SBjoern A. Zeebdone 1094d3373029SBjoern A. Zeeb 1095d3373029SBjoern A. Zeebcleanup 1096d3373029SBjoern A. Zeeb 1097d3373029SBjoern A. Zeeb# end 1098