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