3 # Copyright (c) 2012 Cisco Systems, Inc.
6 # This software was developed by Bjoern Zeeb under contract to
9 # Redistribution and use in source and binary forms, with or without
10 # modification, are permitted provided that the following conditions
12 # 1. Redistributions of source code must retain the above copyright
13 # notice, this list of conditions and the following disclaimer.
14 # 2. Redistributions in binary form must reproduce the above copyright
15 # notice, this list of conditions and the following disclaimer in the
16 # documentation and/or other materials provided with the distribution.
18 # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
22 # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24 # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27 # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33 # We will use the RFC5180 (and Errata) benchmarking working group prefix
34 # 2001:0002::/48 for testing.
37 # Set IFACE to the real interface you want to run the test on.
40 # Control port we use to exchange messages between nodes to sync. tests, etc.
43 # Get the number of FIBs from the kernel.
44 RT_NUMFIBS=`sysctl -n net.fibs`
46 PEERADDR="2001:2:ff00::1"
47 OURADDR="2001:2:ff00::2"
52 # By default all commands must succeed. Individual tests may disable this
67 # Function to avoid prelist races adding and deleting prefixes too quickly.
71 # sleep 1 is too long.
72 touch /tmp/foo || true
73 stat /tmp/foo > /dev/null 2>&1 || true
78 local _rc _exp _testno _testname _msg _r
86 if test ${_rc} -eq ${_exp}; then
89 echo "${_r} ${_testno} ${_testname} # ${_msg} ${_rc}"
99 *) echo "DEBUG: ${_msg}" >&2 ;;
108 echo "ERROR: ${_msg}" >&2
116 # Setup our side and wait for the peer to tell us that it is ready.
119 local _greeting _keyword _fibs _linklocal i
121 print_debug "Setting up interface ${IFACE}"
122 ifconfig ${IFACE} inet6 ${OURADDR}/64 -alias > /dev/null 2>&1 || true
124 ifconfig ${IFACE} inet6 ${OURADDR}/64 alias up
126 while test ${i} -lt ${RT_NUMFIBS}; do
127 ifconfig ${IFACE} inet6 2001:2:${i}::2/64 -alias \
128 > /dev/null 2>&1 || true
132 OURLINKLOCAL=`ifconfig ${IFACE} | awk '/inet6 fe80:/ { print $2 }'`
135 print_debug "Waiting 4 seconds for things to settle"
138 # Wait for the remote to connect and start things.
139 # We tell it the magic keyword, our number of FIBs and our link-local.
140 # It already knows our global address.
141 _greeting=`echo "SETUP ${RT_NUMFIBS} ${OURLINKLOCAL}" | \
142 nc -6 -l ${CTRLPORT}`
144 read _keyword _fibs _linklocal <<EOI
147 print_debug "_keyword=${_keyword}"
148 print_debug "_fibs=${_fibs}"
149 print_debug "_linklocal=${_linklocal}"
152 *) die "Got invalid keyword in greeting: ${_greeting}"
155 if test ${_fibs} -ne ${RT_NUMFIBS}; then
156 die "Number of FIBs not matching ours (${RT_NUMFIBS}) in" \
157 "greeting: ${_greeting}"
159 PEERLINKLOCAL=${_linklocal}
161 print_debug "Successfully received greeting. Peer at ${PEERLINKLOCAL}"
167 print_debug "Removing address from interface ${IFACE}"
168 ifconfig ${IFACE} inet6 ${OURADDR}/64 -alias
172 ################################################################################
174 testtx_icmp6_connected()
184 print_debug "./reflect -p ${CTRLPORT} -T TCP6 " \
185 "-t testtx_icmp6_connected ${_opts}"
186 ./reflect -p ${CTRLPORT} -T TCP6 -t testtx_icmp6_connected ${_opts}
187 print_debug "reflect terminated without error."
190 testtx_tcp6_connected()
200 print_debug "./reflect -p ${CTRLPORT} -T TCP6 " \
201 "-t testtx_tcp6_connected ${_opts}"
202 ./reflect -p ${CTRLPORT} -T TCP6 -t testtx_tcp6_connected ${_opts}
203 print_debug "reflect terminated without error."
206 testtx_udp6_connected()
216 print_debug "./reflect -p ${CTRLPORT} -T UDP6 " \
217 "-t testtx_udp6_connected ${_opts}"
218 ./reflect -p ${CTRLPORT} -T UDP6 -t testtx_udp6_connected ${_opts}
219 print_debug "reflect terminated without error."
222 ################################################################################
224 testtx_icmp6_connected_blackhole()
236 while test ${fib} -lt ${RT_NUMFIBS}; do
237 print_debug "./reflect -p ${CTRLPORT} -T TCP6 " \
238 "-t testtx_icmp6_connected_blackhole${fib} ${_opts}"
239 ./reflect -p ${CTRLPORT} -T TCP6 \
240 -t testtx_icmp6_connected_blackhole${fib} ${_opts}
241 print_debug "reflect terminated without error."
246 testtx_tcp6_connected_blackhole()
258 while test ${fib} -lt ${RT_NUMFIBS}; do
259 print_debug "./reflect -p ${CTRLPORT} -T TCP6 " \
260 "-t testtx_tcp6_connected_blackhole${fib} ${_opts}"
261 ./reflect -p ${CTRLPORT} -T TCP6 \
262 -t testtx_tcp6_connected_blackhole${fib} ${_opts}
263 print_debug "reflect terminated without error."
268 testtx_udp6_connected_blackhole()
280 while test ${fib} -lt ${RT_NUMFIBS}; do
281 print_debug "./reflect -p ${CTRLPORT} -T UDP6 " \
282 "-t testtx_udp6_connected_blackhole${fib} ${_opts}"
283 ./reflect -p ${CTRLPORT} -T UDP6 \
284 -t testtx_udp6_connected_blackhole${fib} ${_opts}
285 print_debug "reflect terminated without error."
290 ################################################################################
292 testtx_ulp6_connected_transfernets()
294 local _opts fib _n _o
305 # Setup transfer networks.
307 while test ${fib} -lt ${RT_NUMFIBS}; do
309 ifconfig ${IFACE} inet6 2001:2:${fib}::2/64 alias
314 while test ${fib} -lt ${RT_NUMFIBS}; do
315 print_debug "./reflect -p ${CTRLPORT} -T ${_o} -t ${_n}${fib} ${_opts}"
316 ./reflect -p ${CTRLPORT} -T ${_o} -t ${_n}${fib} ${_opts}
317 print_debug "reflect terminated without error."
321 # Cleanup transfer networks.
323 while test ${fib} -lt ${RT_NUMFIBS}; do
325 ifconfig ${IFACE} inet6 2001:2:${fib}::2/64 -alias
331 testtx_icmp6_connected_transfernets()
334 testtx_ulp6_connected_transfernets \
335 "testtx_icmp6_connected_transfernets" "TCP6"
338 testtx_tcp6_connected_transfernets()
341 testtx_ulp6_connected_transfernets \
342 "testtx_tcp6_connected_transfernets" "TCP6"
345 testtx_udp6_connected_transfernets()
348 testtx_ulp6_connected_transfernets \
349 "testtx_udp6_connected_transfernets" "UDP6"
352 testtx_icmp6_connected_ifconfig_transfernets()
355 testtx_ulp6_connected_transfernets \
356 "testtx_icmp6_connected_ifconfig_transfernets" "TCP6"
359 testtx_tcp6_connected_ifconfig_transfernets()
362 testtx_ulp6_connected_transfernets \
363 "testtx_tcp6_connected_ifconfig_transfernets" "TCP6"
366 testtx_udp6_connected_ifconfig_transfernets()
369 testtx_ulp6_connected_transfernets \
370 "testtx_udp6_connected_ifconfig_transfernets" "UDP6"
373 ################################################################################
375 testtx_ulp6_gateway()
381 ifconfig lo0 inet6 2001:2:ff01::2 -alias > /dev/null 2>&1 || true
383 ifconfig lo0 inet6 2001:2:ff01::2 alias
392 print_debug "./reflect -p ${CTRLPORT} -T ${_o} " \
393 "-t ${_n} ${_opts} -A 2001:2:ff01::2"
394 ./reflect -p ${CTRLPORT} -T ${_o} \
395 -t ${_n} ${_opts} -A 2001:2:ff01::2
396 print_debug "reflect terminated without error."
398 ifconfig lo0 inet6 2001:2:ff01::2 -alias
402 testtx_icmp6_gateway()
405 testtx_ulp6_gateway "testtx_icmp6_gateway" "TCP6"
408 testtx_tcp6_gateway()
411 testtx_ulp6_gateway "testtx_tcp6_gateway" "TCP6"
414 testtx_udp6_gateway()
417 testtx_ulp6_gateway "testtx_udp6_gateway" "UDP6"
420 ################################################################################
422 testtx_ulp6_transfernets_gateways()
424 local _opts fib _n _o
435 # Setup transfer networks.
437 while test ${fib} -lt ${RT_NUMFIBS}; do
439 ifconfig ${IFACE} inet6 2001:2:${fib}::2/64 alias
443 # Setup out listener IP.
444 ifconfig lo0 inet6 2001:2:ff01::2 -alias > /dev/null 2>&1 || true
446 ifconfig lo0 inet6 2001:2:ff01::2 alias
449 print_debug "./reflect -p ${CTRLPORT} -T ${_o} " \
450 "-t ${_n} ${_opts} -A 2001:2:ff01::2"
451 ./reflect -p ${CTRLPORT} -T ${_o} \
452 -t ${_n} ${_opts} -A 2001:2:ff01::2
453 print_debug "reflect terminated without error."
455 # Cleanup transfer networks and listener IP.
457 while test ${fib} -lt ${RT_NUMFIBS}; do
459 ifconfig ${IFACE} inet6 2001:2:${fib}::2/64 -alias
463 ifconfig lo0 inet6 2001:2:ff01::2 -alias
466 testtx_icmp6_transfernets_gateways()
469 testtx_ulp6_transfernets_gateways \
470 "testtx_icmp6_transfernets_gateways" "TCP6"
473 testtx_tcp6_transfernets_gateways()
476 testtx_ulp6_transfernets_gateways \
477 "testtx_tcp6_transfernets_gateways" "TCP6"
480 testtx_udp6_transfernets_gateways()
483 testtx_ulp6_transfernets_gateways \
484 "testtx_udp6_transfernets_gateways" "UDP6"
488 ################################################################################
490 testtx_ulp6_transfernets_gateway()
492 local _opts fib _n _o
503 # Setup transfer networks.
505 while test ${fib} -lt ${RT_NUMFIBS}; do
507 ifconfig ${IFACE} inet6 2001:2:${fib}::2/64 alias
511 # Setup out listener IP.
512 ifconfig lo0 inet6 2001:2:ff01::2 -alias > /dev/null 2>&1 || true
514 ifconfig lo0 inet6 2001:2:ff01::2 alias
518 while test ${fib} -lt ${RT_NUMFIBS}; do
519 print_debug "./reflect -p ${CTRLPORT} -T ${_o} " \
520 "-t ${_n}${fib} ${_opts} -A 2001:2:ff01::2"
521 ./reflect -p ${CTRLPORT} -T ${_o} \
522 -t ${_n}${fib} ${_opts} -A 2001:2:ff01::2
523 print_debug "reflect terminated without error."
527 # Cleanup transfer networks and listener IP.
529 while test ${fib} -lt ${RT_NUMFIBS}; do
531 ifconfig ${IFACE} inet6 2001:2:${fib}::2/64 -alias
535 ifconfig lo0 inet6 2001:2:ff01::2 -alias
538 testtx_icmp6_transfernets_gateway()
541 testtx_ulp6_transfernets_gateway \
542 "testtx_icmp6_transfernets_gateway" "TCP6"
545 testtx_tcp6_transfernets_gateway()
548 testtx_ulp6_transfernets_gateway \
549 "testtx_tcp6_transfernets_gateway" "TCP6"
552 testtx_udp6_transfernets_gateway()
555 testtx_ulp6_transfernets_gateway \
556 "testtx_udp6_transfernets_gateway" "UDP6"
559 ################################################################################
561 # We are receiver, but the FIBs are with us this time.
565 # # For IPFW, IFCONFIG
567 # # Send OOB well known to work START, wait for reflect
568 # # Send probe, wait for reply with FIB# or RST/ICMP6 unreach
569 # # (in case of ICMP6 use magic like ipfw count and OOB reply)
570 # # Send OOB well known to work DONE, wait for reflect
571 # # Compare real with expected results.
576 local _fib _transfer i _p _o
580 # ICMP6 would need content inspection to distinguish FIB, we can
581 # only differentiate by address.
582 # For the default single-address cases always set to current FIB.
583 ipfw add 100 setfib ${_fib} ipv6-icmp \
584 from ${PEERADDR} to ${OURADDR} \
585 via ${IFACE} in > /dev/null 2>&1
586 ipfw add 100 setfib ${_fib} ipv6-icmp \
587 from ${PEERLINKLOCAL%\%*} to ${OURLINKLOCAL%\%*} \
588 via ${IFACE} in > /dev/null 2>&1
590 # Always also do a setfib for the control port so that OOB
591 # signaling workes even if we remove connected subnets.
592 ipfw add 200 setfib ${_fib} ip6 from ${PEERADDR} to ${OURADDR} \
593 dst-port ${CTRLPORT} via ${IFACE} in > /dev/null 2>&1
600 while test ${i} -lt ${RT_NUMFIBS}; do
602 # If doing multiple transfer networks, replace PEERADDR.
604 1) PEERADDR=2001:2:${i}::1
605 OURADDR=2001:2:${i}::2
609 if test ${_instances} -gt 1 -o ${_transfer} -eq 1; then
610 ipfw add 400 setfib ${_fib} ipv6-icmp \
611 from ${PEERADDR} to ${OURADDR} \
613 via ${IFACE} in > /dev/null 2>&1
618 ipfw add 400 setfib ${_fib} ip6 \
619 from ${PEERADDR} to ${OURADDR} \
620 dst-port $((CTRLPORT + 1000 + i)) \
621 via ${IFACE} in > /dev/null 2>&1
622 ipfw add 400 setfib ${_fib} ip6 \
623 from ${PEERLINKLOCAL%\%*} to ${OURLINKLOCAL%\%*} \
624 dst-port $((CTRLPORT + 1000 + i)) \
625 via ${IFACE} in > /dev/null 2>&1
626 if test ${_instances} -le 1 -o ${_transfer} -ne 1; then
627 ipfw add 400 setfib ${_fib} ipv6-icmp \
628 from ${PEERADDR} to ${OURADDR} \
630 via ${IFACE} in > /dev/null 2>&1
648 textrx_ifconfig_setup()
653 ifconfig ${IFACE} fib ${_fib} > /dev/null 2>&1
656 textrx_ipfw_cleanup()
665 ipfw delete 100 > /dev/null 2>&1 || true
666 ipfw delete 200 > /dev/null 2>&1 || true
667 ipfw delete 400 > /dev/null 2>&1 || true
670 while test ${i} -lt ${RT_NUMFIBS}; do
672 ipfw delete $((1000 + i)) > /dev/null 2>&1 || true
677 textrx_ifconfig_cleanup()
680 ifconfig ${IFACE} fib 0 > /dev/null 2>&1
688 while test ${i} -lt ${RT_NUMFIBS}; do
690 # Count ICMP6 echo replies.
691 ipfw add $((500 + i)) count ipv6-icmp from any to any \
692 icmp6types 129 fib ${i} via ${IFACE} out > /dev/null 2>&1
693 ipfw add $((500 + i)) count tcp from any to any \
694 fib ${i} via ${IFACE} out > /dev/null 2>&1
695 ipfw add $((500 + i)) count udp from any to any \
696 fib ${i} via ${IFACE} out > /dev/null 2>&1
701 textrx_count_results()
703 local _fib _o i _rstr _c _req _p _opts
714 while test ${i} -lt ${RT_NUMFIBS}; do
717 "-i") _c=`ipfw show $((500 + i)) | awk '/ ipv6-icmp / { print $2 }'` ;;
718 "-u") _c=`ipfw show $((500 + i)) | awk '/ udp / { print $2 }'` ;;
719 *) _c=`ipfw show $((500 + i)) | awk '/ tcp / { print $2 }'` ;;
721 _rstr="${_rstr}${i} ${_c},"
723 ipfw delete $((500 + i)) > /dev/null 2>&1 || true
727 # We do not care about the request.
728 _req=`echo "RESULT ${_rstr}" | nc -V ${_fib} -6 -l ${CTRLPORT}`
729 print_debug "$? -- ${_req} -- RESULT ${_rstr}"
732 testrx_remove_connected()
734 local _fib _transfer i j _prefix
738 if test ${_transfer} -eq 1; then
740 while test ${i} -lt ${RT_NUMFIBS}; do
742 while test ${j} -lt ${RT_NUMFIBS}; do
743 _prefix="2001:2:${j}::"
747 *) print_debug "setfib -F${i} route delete" \
748 "-inet6 -net ${_prefix}"
749 setfib -F${i} route delete -inet6 -net \
750 ${_prefix} > /dev/null 2>&1
759 _prefix=${OURADDR%2} # Luckily we know the details.
761 while test ${i} -lt ${RT_NUMFIBS}; do
765 *) print_debug "setfib -F${i} route delete" \
766 "-inet6 -net ${_prefix}"
767 setfib -F${i} route delete -inet6 -net \
768 ${_prefix} > /dev/null 2>&1
777 testrx_cleanup_connected()
779 local _fib _transfer i _prefix
783 if test ${_transfer} -eq 1; then
786 while test ${i} -lt ${RT_NUMFIBS}; do
788 ifconfig ${IFACE} inet6 2001:2:${i}::2/64 -alias \
795 # Use the hammer removing the address and adding it again to get
796 # the connected subnet back to all FIBs. Hard to do otherwise.
797 ifconfig ${IFACE} inet6 ${OURADDR}/64 -alias || true
799 ifconfig ${IFACE} inet6 ${OURADDR}/64 alias up
803 testrx_setup_transfer_networks()
808 while test ${i} -lt ${RT_NUMFIBS}; do
809 ifconfig ${IFACE} inet6 2001:2:${i}::2/64 -alias \
810 > /dev/null 2>&1 || true
812 ifconfig ${IFACE} inet6 2001:2:${i}::2/64 alias
819 local _fib _txt _opts
824 case ${USE_SOSETFIB} in
825 0) print_debug "setfib -F${_fib} ./reflect -p ${CTRLPORT}" \
826 "-t ${_txt} ${_opts}"
827 setfib -F${_fib} ./reflect -p ${CTRLPORT} -t ${_txt} ${_opts}
829 1) print_debug "./reflect -F${_fib} -p ${CTRLPORT} -t ${_txt}" \
831 ./reflect -F${_fib} -p ${CTRLPORT} -t ${_txt} ${_opts}
833 *) die "Invalid value for USE_SOSETFIB: ${USE_SOSETFIB}" ;;
835 print_debug "reflect '${_txt}' terminated without error."
838 testrx_run_multiple()
840 local _fib _txt _opts i _jobs _p _w
847 while test ${i} -lt ${RT_NUMFIBS}; do
848 case ${USE_SOSETFIB} in
849 0) print_debug "setfib -F${i} ./reflect" \
850 "-p $((CTRLPORT + 1000 + i))" \
851 "-t ${_txt} ${_opts} -N -f ${i} &"
852 setfib -F${i} ./reflect -p $((CTRLPORT + 1000 + i)) \
853 -t ${_txt} ${_opts} -N -f ${i} &
855 1) print_debug "./reflect -F ${i}" \
856 "-p $((CTRLPORT + 1000 + i))" \
857 "-t ${_txt} ${_opts} -N -f ${i} &"
858 ./reflect -F ${i} -p $((CTRLPORT + 1000 + i)) \
859 -t ${_txt} ${_opts} -N -f ${i} &
861 *) die "Invalid value for USE_SOSETFIB: ${USE_SOSETFIB}" ;;
864 _jobs="${_jobs}${_p} "
871 # Start OOB control connection for START/DONE.
872 testrx_run_one ${_fib} "${_txt}" "${_opts}"
873 print_debug "KILL ${_jobs}"
874 for i in ${_jobs}; do
877 #killall reflect || true
878 print_debug "reflects for '${_txt}' terminated without error."
883 local _n _t _fib _o _txt i _f _instance _destructive _transfer
901 # Convert netcat options to reflect aguments.
903 -i) _opts="${_opts} -T TCP6" ;; # Use TCP for START/DONE.
904 -u) _opts="${_opts} -T UDP6" ;;
905 *) _opts="${_opts} -T TCP6" ;;
908 # Combined test case base name.
909 case ${USE_SOSETFIB} in
912 *) die "Unexpected value for SO_SETFIB: ${SO_SETFIB}" ;;
915 _txt="${_n}_${_f}_${_t}_${_fib}_${_instances}_${_destructive}_${_transfer}"
918 1) testrx_setup_transfer_networks ;;
922 ipfw) textrx_ipfw_setup ${_fib} ${_transfer} ${_instances} ;;
923 ifconfig) textrx_ifconfig_setup ${_fib} ;;
924 *) die "Invalid type in ${_txt}" ;;
927 # Setup unresponsive FIBs.
928 case ${_destructive} in
929 1) testrx_remove_connected ${_fib} ${_transfer} ;;
932 # Setup to get result counts.
935 # Run just one / one per FIB (with incremental ports).
936 #case ${_instances} in
937 #1) testrx_run_one ${_fib} "${_txt}" "${_opts}" ;;
938 #*) testrx_run_multiple ${_fib} "${_txt}" "${_opts}" ;;
940 testrx_run_multiple ${_fib} "${_txt}" "${_opts}" ${_transfer}
942 # Export result counts.
943 textrx_count_results ${_fib} "${_o}"
945 # Cleanup unresponsive FIBs or multiple prefixes.
946 if test ${_destructive} -eq 1 -o ${_transfer} -eq 1; then
947 testrx_cleanup_connected ${_fib} ${_transfer}
951 ipfw) textrx_ipfw_cleanup ;;
952 ifconfig) textrx_ifconfig_cleanup ;;
953 *) die "Invalid type in ${_txt}" ;;
959 local _n _o s t fib _instances _destructive
967 for _transfer in 1 0; do
968 for _destructive in 0 1; do
969 for t in ipfw ifconfig; do
971 print_debug "${_n}_${t}"
973 while test ${fib} -lt ${RT_NUMFIBS}; do
975 print_debug "${_n}_${t}_${fib}" \
976 "${_instances} ${_destructive}" \
978 testrx_run_test "${_n}" "${t}" ${fib} \
979 "${_o}" ${_instances} \
980 ${_destructive} ${_transfer}
989 ################################################################################
991 # Probe all FIBs with one "active" one a time.
993 testrx_icmp6_same_addr_one_fib_a_time()
996 testrx_main "testrx_icmp6_same_addr_one_fib_a_time" "-i"
999 testrx_tcp6_same_addr_one_fib_a_time()
1002 testrx_main "testrx_tcp6_same_addr_one_fib_a_time" ""
1005 testrx_udp6_same_addr_one_fib_a_time()
1008 testrx_main "testrx_udp6_same_addr_one_fib_a_time" "-u"
1011 ################################################################################
1013 # Probe all FIBs with all "active" all time.
1015 testrx_tcp6_same_addr_all_fibs_a_time()
1018 testrx_main "testrx_tcp6_same_addr_all_fibs_a_time" "" ${RT_NUMFIBS}
1021 testrx_udp6_same_addr_all_fibs_a_time()
1024 testrx_main "testrx_udp6_same_addr_all_fibs_a_time" "-u" ${RT_NUMFIBS}
1028 ################################################################################
1032 if test `sysctl -n security.jail.jailed` -eq 0; then
1033 kldload ipfw > /dev/null 2>&1 || kldstat -v | grep -q ipfw
1035 ipfw -f flush > /dev/null 2>&1 || die "please load ipfw in base system"
1036 ipfw add 65000 permit ip from any to any > /dev/null 2>&1
1037 killall reflect || true
1039 ################################################################################
1045 # We are receiver reflecting the input back.
1048 # Only run ICMP6 tests for the first loop.
1049 test ${uso} -ne 0 || testtx_icmp6_connected
1050 testtx_tcp6_connected
1051 testtx_udp6_connected
1053 test ${uso} -ne 0 || testtx_icmp6_connected_blackhole
1054 testtx_tcp6_connected_blackhole
1055 testtx_udp6_connected_blackhole
1057 test ${uso} -ne 0 || testtx_icmp6_connected_transfernets
1058 testtx_tcp6_connected_transfernets
1059 testtx_udp6_connected_transfernets
1061 test ${uso} -ne 0 || testtx_icmp6_connected_ifconfig_transfernets
1062 testtx_tcp6_connected_ifconfig_transfernets
1063 testtx_udp6_connected_ifconfig_transfernets
1065 test ${uso} -ne 0 || testtx_icmp6_gateway
1069 test ${uso} -ne 0 || testtx_icmp6_transfernets_gateways
1070 testtx_tcp6_transfernets_gateways
1071 testtx_udp6_transfernets_gateways
1073 test ${uso} -ne 0 || testtx_icmp6_transfernets_gateway
1074 testtx_tcp6_transfernets_gateway
1075 testtx_udp6_transfernets_gateway
1078 ipfw -f flush > /dev/null 2>&1
1079 ipfw add 65000 permit ip from any to any > /dev/null 2>&1
1081 # We are receiver, but the FIBs are with us this time.
1086 # Only expect ICMP6 tests for the first loop.
1087 test ${uso} -ne 0 || testrx_icmp6_same_addr_one_fib_a_time
1088 testrx_tcp6_same_addr_one_fib_a_time
1089 testrx_udp6_same_addr_one_fib_a_time
1091 testrx_tcp6_same_addr_all_fibs_a_time
1092 testrx_udp6_same_addr_all_fibs_a_time