1*8ad8ab65Smaxv# $NetBSD: t_ping6_opts.sh,v 1.9 2018/04/26 06:23:33 maxv Exp $ 2cd4a5f44Sozaki-r# 3cd4a5f44Sozaki-r# Copyright (c) 2016 Internet Initiative Japan Inc. 4cd4a5f44Sozaki-r# All rights reserved. 5cd4a5f44Sozaki-r# 6cd4a5f44Sozaki-r# Redistribution and use in source and binary forms, with or without 7cd4a5f44Sozaki-r# modification, are permitted provided that the following conditions 8cd4a5f44Sozaki-r# are met: 9cd4a5f44Sozaki-r# 1. Redistributions of source code must retain the above copyright 10cd4a5f44Sozaki-r# notice, this list of conditions and the following disclaimer. 11cd4a5f44Sozaki-r# 2. Redistributions in binary form must reproduce the above copyright 12cd4a5f44Sozaki-r# notice, this list of conditions and the following disclaimer in the 13cd4a5f44Sozaki-r# documentation and/or other materials provided with the distribution. 14cd4a5f44Sozaki-r# 15cd4a5f44Sozaki-r# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 16cd4a5f44Sozaki-r# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 17cd4a5f44Sozaki-r# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 18cd4a5f44Sozaki-r# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 19cd4a5f44Sozaki-r# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20cd4a5f44Sozaki-r# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21cd4a5f44Sozaki-r# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22cd4a5f44Sozaki-r# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23cd4a5f44Sozaki-r# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24cd4a5f44Sozaki-r# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25cd4a5f44Sozaki-r# POSSIBILITY OF SUCH DAMAGE. 26cd4a5f44Sozaki-r# 27cd4a5f44Sozaki-r 28cd4a5f44Sozaki-rSOCKSRC=unix://commsock1 29cd4a5f44Sozaki-rSOCKFWD=unix://commsock2 30cd4a5f44Sozaki-rSOCKDST=unix://commsock3 31cd4a5f44Sozaki-rIP6SRC=fc00:0:0:1::2 32cd4a5f44Sozaki-rIP6SRCGW=fc00:0:0:1::1 33cd4a5f44Sozaki-rIP6DSTGW=fc00:0:0:2::1 34cd4a5f44Sozaki-rIP6DST=fc00:0:0:2::2 35cd4a5f44Sozaki-rBUS_SRCGW=bus1 36cd4a5f44Sozaki-rBUS_DSTGW=bus2 37cd4a5f44Sozaki-r 38cd4a5f44Sozaki-rIP6SRC2=fc00:0:0:1::3 39cd4a5f44Sozaki-rIP6SRCGW2=fc00:0:0:1::254 40cd4a5f44Sozaki-r 411c189061Sozaki-rDEBUG=${DEBUG:-false} 42cd4a5f44Sozaki-rTIMEOUT=1 43cd4a5f44Sozaki-r 44cd4a5f44Sozaki-r# 45cd4a5f44Sozaki-r# Utility functions 46cd4a5f44Sozaki-r# 47cd4a5f44Sozaki-rsetup_endpoint() 48cd4a5f44Sozaki-r{ 49cd4a5f44Sozaki-r local sock=${1} 50cd4a5f44Sozaki-r local addr=${2} 51cd4a5f44Sozaki-r local bus=${3} 52cd4a5f44Sozaki-r local gw=${4} 53cd4a5f44Sozaki-r 545a83ceeaSozaki-r rump_server_add_iface $sock shmif0 $bus 555a83ceeaSozaki-r 56cd4a5f44Sozaki-r export RUMP_SERVER=${sock} 57cd4a5f44Sozaki-r atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${addr} 58cd4a5f44Sozaki-r atf_check -s exit:0 -o ignore rump.route add -inet6 default ${gw} 59cd4a5f44Sozaki-r atf_check -s exit:0 rump.ifconfig shmif0 up 60cd4a5f44Sozaki-r atf_check -s exit:0 rump.ifconfig -w 10 61cd4a5f44Sozaki-r 62cd4a5f44Sozaki-r if $DEBUG; then 63cd4a5f44Sozaki-r rump.ifconfig shmif0 64cd4a5f44Sozaki-r rump.netstat -nr 65cd4a5f44Sozaki-r fi 66cd4a5f44Sozaki-r} 67cd4a5f44Sozaki-r 68cd4a5f44Sozaki-rsetup_forwarder() 69cd4a5f44Sozaki-r{ 70cd4a5f44Sozaki-r 715a83ceeaSozaki-r rump_server_add_iface $SOCKFWD shmif0 $BUS_SRCGW 725a83ceeaSozaki-r rump_server_add_iface $SOCKFWD shmif1 $BUS_DSTGW 73cd4a5f44Sozaki-r 745a83ceeaSozaki-r export RUMP_SERVER=$SOCKFWD 75cd4a5f44Sozaki-r 76cd4a5f44Sozaki-r atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${IP6SRCGW} 77cd4a5f44Sozaki-r atf_check -s exit:0 rump.ifconfig shmif1 inet6 ${IP6DSTGW} 78cd4a5f44Sozaki-r 79cd4a5f44Sozaki-r atf_check -s exit:0 rump.ifconfig shmif0 up 80cd4a5f44Sozaki-r atf_check -s exit:0 rump.ifconfig shmif1 up 81cd4a5f44Sozaki-r atf_check -s exit:0 rump.ifconfig -w 10 82cd4a5f44Sozaki-r 83cd4a5f44Sozaki-r if $DEBUG; then 84cd4a5f44Sozaki-r rump.netstat -nr 85cd4a5f44Sozaki-r rump.sysctl net.inet6.ip6.forwarding 86cd4a5f44Sozaki-r fi 87cd4a5f44Sozaki-r} 88cd4a5f44Sozaki-r 89cd4a5f44Sozaki-rsetup_forwarding6() 90cd4a5f44Sozaki-r{ 91cd4a5f44Sozaki-r export RUMP_SERVER=$SOCKFWD 92cd4a5f44Sozaki-r atf_check -s exit:0 -o ignore rump.sysctl -w net.inet6.ip6.forwarding=1 93cd4a5f44Sozaki-r} 94cd4a5f44Sozaki-r 95cd4a5f44Sozaki-rsetup6() 96cd4a5f44Sozaki-r{ 97cd4a5f44Sozaki-r 985a83ceeaSozaki-r rump_server_start $SOCKSRC netinet6 995a83ceeaSozaki-r rump_server_start $SOCKFWD netinet6 1005a83ceeaSozaki-r rump_server_start $SOCKDST netinet6 101cd4a5f44Sozaki-r 102cd4a5f44Sozaki-r setup_endpoint $SOCKSRC $IP6SRC $BUS_SRCGW $IP6SRCGW 103cd4a5f44Sozaki-r setup_endpoint $SOCKDST $IP6DST $BUS_DSTGW $IP6DSTGW 104cd4a5f44Sozaki-r setup_forwarder 105cd4a5f44Sozaki-r} 106cd4a5f44Sozaki-r 107cd4a5f44Sozaki-rcheck_echo_request_pkt() 108cd4a5f44Sozaki-r{ 109cd4a5f44Sozaki-r local pkt="$1 > $2: .+ echo request" 110cd4a5f44Sozaki-r 111cd4a5f44Sozaki-r extract_new_packets $BUS_SRCGW > ./out 112cd4a5f44Sozaki-r $DEBUG && echo $pkt 113cd4a5f44Sozaki-r $DEBUG && cat ./out 114cd4a5f44Sozaki-r atf_check -s exit:0 -o match:"$pkt" cat ./out 115cd4a5f44Sozaki-r} 116cd4a5f44Sozaki-r 117cd4a5f44Sozaki-rcheck_echo_request_pkt_with_macaddr() 118cd4a5f44Sozaki-r{ 119cd4a5f44Sozaki-r local pkt="$1 > $2, .+ $3 > $4: .+ echo request" 120cd4a5f44Sozaki-r 121cd4a5f44Sozaki-r extract_new_packets $BUS_SRCGW > ./out 122cd4a5f44Sozaki-r $DEBUG && echo $pkt 123cd4a5f44Sozaki-r $DEBUG && cat ./out 124cd4a5f44Sozaki-r atf_check -s exit:0 -o match:"$pkt" cat ./out 125cd4a5f44Sozaki-r} 126cd4a5f44Sozaki-r 127e948d337Sozaki-rcheck_echo_request_pkt_with_macaddr_and_rthdr0() 128e948d337Sozaki-r{ 129e948d337Sozaki-r local pkt= 130e948d337Sozaki-r 131e948d337Sozaki-r pkt="$1 > $2, .+ $3 > $4:" 132e948d337Sozaki-r pkt="$pkt srcrt \\(len=2, type=0, segleft=1, \\[0\\]$5\\)" 133e948d337Sozaki-r pkt="$pkt .+ echo request" 134e948d337Sozaki-r 135e948d337Sozaki-r extract_new_packets $BUS_SRCGW > ./out 136e948d337Sozaki-r $DEBUG && echo $pkt 137e948d337Sozaki-r $DEBUG && cat ./out 138e948d337Sozaki-r atf_check -s exit:0 -o match:"$pkt" cat ./out 139e948d337Sozaki-r} 140e948d337Sozaki-r 141cd4a5f44Sozaki-r# 142cd4a5f44Sozaki-r# Tests 143cd4a5f44Sozaki-r# 144cd4a5f44Sozaki-ratf_test_case ping6_opts_sourceaddr cleanup 145cd4a5f44Sozaki-rping6_opts_sourceaddr_head() 146cd4a5f44Sozaki-r{ 147cd4a5f44Sozaki-r 148cd4a5f44Sozaki-r atf_set "descr" "tests of ping6 -S option" 149cd4a5f44Sozaki-r atf_set "require.progs" "rump_server" 150cd4a5f44Sozaki-r} 151cd4a5f44Sozaki-r 152cd4a5f44Sozaki-rping6_opts_sourceaddr_body() 153cd4a5f44Sozaki-r{ 154cd4a5f44Sozaki-r 155cd4a5f44Sozaki-r setup6 156cd4a5f44Sozaki-r setup_forwarding6 157cd4a5f44Sozaki-r 158cd4a5f44Sozaki-r export RUMP_SERVER=$SOCKSRC 159cd4a5f44Sozaki-r atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT $IP6DST 160cd4a5f44Sozaki-r check_echo_request_pkt $IP6SRC $IP6DST 161cd4a5f44Sozaki-r 162cd4a5f44Sozaki-r atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6SRC2 163cd4a5f44Sozaki-r atf_check -s exit:0 rump.ifconfig -w 10 164cd4a5f44Sozaki-r 165cd4a5f44Sozaki-r atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT $IP6DST 166cd4a5f44Sozaki-r check_echo_request_pkt $IP6SRC $IP6DST 167cd4a5f44Sozaki-r 168cd4a5f44Sozaki-r # ping6 -S <sourceaddr> 169cd4a5f44Sozaki-r atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT \ 170cd4a5f44Sozaki-r -S $IP6SRC $IP6DST 171cd4a5f44Sozaki-r check_echo_request_pkt $IP6SRC $IP6DST 172cd4a5f44Sozaki-r 173cd4a5f44Sozaki-r atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT \ 174cd4a5f44Sozaki-r -S $IP6SRC2 $IP6DST 175cd4a5f44Sozaki-r check_echo_request_pkt $IP6SRC2 $IP6DST 1765a83ceeaSozaki-r 1775a83ceeaSozaki-r rump_server_destroy_ifaces 178cd4a5f44Sozaki-r} 179cd4a5f44Sozaki-r 180cd4a5f44Sozaki-rping6_opts_sourceaddr_cleanup() 181cd4a5f44Sozaki-r{ 182cd4a5f44Sozaki-r 183cd4a5f44Sozaki-r $DEBUG && dump 184cd4a5f44Sozaki-r cleanup 185cd4a5f44Sozaki-r} 186cd4a5f44Sozaki-r 187cd4a5f44Sozaki-ratf_test_case ping6_opts_interface cleanup 188cd4a5f44Sozaki-rping6_opts_interface_head() 189cd4a5f44Sozaki-r{ 190cd4a5f44Sozaki-r 191cd4a5f44Sozaki-r atf_set "descr" "tests of ping6 -I option" 192cd4a5f44Sozaki-r atf_set "require.progs" "rump_server" 193cd4a5f44Sozaki-r} 194cd4a5f44Sozaki-r 195cd4a5f44Sozaki-rping6_opts_interface_body() 196cd4a5f44Sozaki-r{ 197cd4a5f44Sozaki-r local shmif0_lladdr= 198cd4a5f44Sozaki-r local shmif1_lladdr= 199cd4a5f44Sozaki-r local gw_lladdr= 200cd4a5f44Sozaki-r 201cd4a5f44Sozaki-r setup6 202cd4a5f44Sozaki-r setup_forwarding6 203cd4a5f44Sozaki-r 204a97a8a65Sozaki-r shmif0_lladdr=$(get_linklocal_addr ${SOCKSRC} shmif0) 205a97a8a65Sozaki-r gw_lladdr=$(get_linklocal_addr ${SOCKFWD} shmif0) 206cd4a5f44Sozaki-r 207cd4a5f44Sozaki-r export RUMP_SERVER=$SOCKSRC 208cd4a5f44Sozaki-r atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT $gw_lladdr 209cd4a5f44Sozaki-r check_echo_request_pkt $shmif0_lladdr $gw_lladdr 210cd4a5f44Sozaki-r 2115a83ceeaSozaki-r rump_server_add_iface $SOCKSRC shmif1 $BUS_SRCGW 212cd4a5f44Sozaki-r atf_check -s exit:0 rump.ifconfig shmif1 up 213cd4a5f44Sozaki-r atf_check -s exit:0 rump.ifconfig -w 10 214a97a8a65Sozaki-r shmif1_lladdr=$(get_linklocal_addr ${SOCKSRC} shmif1) 215cd4a5f44Sozaki-r 216cd4a5f44Sozaki-r atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT $gw_lladdr 217cd4a5f44Sozaki-r check_echo_request_pkt $shmif0_lladdr $gw_lladdr 218cd4a5f44Sozaki-r 219cd4a5f44Sozaki-r # ping6 -I <interface> 220cd4a5f44Sozaki-r atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT \ 221cd4a5f44Sozaki-r -I shmif0 $gw_lladdr 222cd4a5f44Sozaki-r check_echo_request_pkt $shmif0_lladdr $gw_lladdr 223cd4a5f44Sozaki-r 224cd4a5f44Sozaki-r atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT \ 225cd4a5f44Sozaki-r -I shmif1 $gw_lladdr 226cd4a5f44Sozaki-r check_echo_request_pkt $shmif1_lladdr $gw_lladdr 2275a83ceeaSozaki-r 2285a83ceeaSozaki-r rump_server_destroy_ifaces 229cd4a5f44Sozaki-r} 230cd4a5f44Sozaki-r 231cd4a5f44Sozaki-rping6_opts_interface_cleanup() 232cd4a5f44Sozaki-r{ 233cd4a5f44Sozaki-r 234cd4a5f44Sozaki-r $DEBUG && dump 235cd4a5f44Sozaki-r cleanup 236cd4a5f44Sozaki-r} 237cd4a5f44Sozaki-r 238cd4a5f44Sozaki-ratf_test_case ping6_opts_gateway cleanup 239cd4a5f44Sozaki-rping6_opts_gateway_head() 240cd4a5f44Sozaki-r{ 241cd4a5f44Sozaki-r 242cd4a5f44Sozaki-r atf_set "descr" "tests of ping6 -g option" 243cd4a5f44Sozaki-r atf_set "require.progs" "rump_server" 244cd4a5f44Sozaki-r} 245cd4a5f44Sozaki-r 246cd4a5f44Sozaki-rping6_opts_gateway_body() 247cd4a5f44Sozaki-r{ 248cd4a5f44Sozaki-r local my_macaddr= 249cd4a5f44Sozaki-r local gw_shmif0_macaddr= 250cd4a5f44Sozaki-r local gw_shmif2_macaddr= 251cd4a5f44Sozaki-r 252cd4a5f44Sozaki-r setup6 253cd4a5f44Sozaki-r setup_forwarding6 254cd4a5f44Sozaki-r 255cd4a5f44Sozaki-r my_macaddr=$(get_macaddr ${SOCKSRC} shmif0) 256cd4a5f44Sozaki-r gw_shmif0_macaddr=$(get_macaddr ${SOCKFWD} shmif0) 257cd4a5f44Sozaki-r 258cd4a5f44Sozaki-r export RUMP_SERVER=$SOCKSRC 259cd4a5f44Sozaki-r atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT $IP6DST 260cd4a5f44Sozaki-r check_echo_request_pkt_with_macaddr \ 261cd4a5f44Sozaki-r $my_macaddr $gw_shmif0_macaddr $IP6SRC $IP6DST 262cd4a5f44Sozaki-r 2635a83ceeaSozaki-r rump_server_add_iface $SOCKFWD shmif2 $BUS_SRCGW 264cd4a5f44Sozaki-r export RUMP_SERVER=$SOCKFWD 265cd4a5f44Sozaki-r atf_check -s exit:0 rump.ifconfig shmif2 inet6 $IP6SRCGW2 266cd4a5f44Sozaki-r atf_check -s exit:0 rump.ifconfig -w 10 267cd4a5f44Sozaki-r gw_shmif2_macaddr=$(get_macaddr ${SOCKFWD} shmif2) 268cd4a5f44Sozaki-r 269cd4a5f44Sozaki-r export RUMP_SERVER=$SOCKSRC 270cd4a5f44Sozaki-r atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT $IP6DST 271cd4a5f44Sozaki-r check_echo_request_pkt_with_macaddr \ 272cd4a5f44Sozaki-r $my_macaddr $gw_shmif0_macaddr $IP6SRC $IP6DST 273cd4a5f44Sozaki-r 274cd4a5f44Sozaki-r # ping6 -g <gateway> 275cd4a5f44Sozaki-r atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT \ 276cd4a5f44Sozaki-r -g $IP6SRCGW $IP6DST 277cd4a5f44Sozaki-r check_echo_request_pkt_with_macaddr \ 278cd4a5f44Sozaki-r $my_macaddr $gw_shmif0_macaddr $IP6SRC $IP6DST 279cd4a5f44Sozaki-r 280cd4a5f44Sozaki-r atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT \ 281cd4a5f44Sozaki-r -g $IP6SRCGW2 $IP6DST 282cd4a5f44Sozaki-r check_echo_request_pkt_with_macaddr \ 283cd4a5f44Sozaki-r $my_macaddr $gw_shmif2_macaddr $IP6SRC $IP6DST 2845a83ceeaSozaki-r 2855a83ceeaSozaki-r rump_server_destroy_ifaces 286cd4a5f44Sozaki-r} 287cd4a5f44Sozaki-r 288cd4a5f44Sozaki-rping6_opts_gateway_cleanup() 289cd4a5f44Sozaki-r{ 290cd4a5f44Sozaki-r 291cd4a5f44Sozaki-r $DEBUG && dump 292cd4a5f44Sozaki-r cleanup 293cd4a5f44Sozaki-r} 294cd4a5f44Sozaki-r 295cd4a5f44Sozaki-ratf_init_test_cases() 296cd4a5f44Sozaki-r{ 297cd4a5f44Sozaki-r 298cd4a5f44Sozaki-r atf_add_test_case ping6_opts_sourceaddr 299cd4a5f44Sozaki-r atf_add_test_case ping6_opts_interface 300cd4a5f44Sozaki-r atf_add_test_case ping6_opts_gateway 301cd4a5f44Sozaki-r} 302