1*cdebaff8SEnji Cooper# $NetBSD: t_flags.sh,v 1.15 2016/12/21 02:46:08 ozaki-r Exp $ 2640235e2SEnji Cooper# 3640235e2SEnji Cooper# Copyright (c) 2015 The NetBSD Foundation, Inc. 4640235e2SEnji Cooper# All rights reserved. 5640235e2SEnji Cooper# 6640235e2SEnji Cooper# Redistribution and use in source and binary forms, with or without 7640235e2SEnji Cooper# modification, are permitted provided that the following conditions 8640235e2SEnji Cooper# are met: 9640235e2SEnji Cooper# 1. Redistributions of source code must retain the above copyright 10640235e2SEnji Cooper# notice, this list of conditions and the following disclaimer. 11640235e2SEnji Cooper# 2. Redistributions in binary form must reproduce the above copyright 12640235e2SEnji Cooper# notice, this list of conditions and the following disclaimer in the 13640235e2SEnji Cooper# documentation and/or other materials provided with the distribution. 14640235e2SEnji Cooper# 15640235e2SEnji Cooper# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 16640235e2SEnji Cooper# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 17640235e2SEnji Cooper# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 18640235e2SEnji Cooper# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 19640235e2SEnji Cooper# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20640235e2SEnji Cooper# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21640235e2SEnji Cooper# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22640235e2SEnji Cooper# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23640235e2SEnji Cooper# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24640235e2SEnji Cooper# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25640235e2SEnji Cooper# POSSIBILITY OF SUCH DAMAGE. 26640235e2SEnji Cooper# 27640235e2SEnji Cooper 28640235e2SEnji CooperSOCK_LOCAL=unix://commsock1 29640235e2SEnji CooperSOCK_PEER=unix://commsock2 30640235e2SEnji CooperSOCK_GW=unix://commsock3 31640235e2SEnji CooperBUS=bus1 32640235e2SEnji CooperBUS2=bus2 33640235e2SEnji Cooper 34*cdebaff8SEnji CooperDEBUG=${DEBUG:-false} 35640235e2SEnji Cooper 36640235e2SEnji Coopersetup_local() 37640235e2SEnji Cooper{ 38640235e2SEnji Cooper 39*cdebaff8SEnji Cooper rump_server_start $SOCK_LOCAL 40*cdebaff8SEnji Cooper rump_server_add_iface $SOCK_LOCAL shmif0 $BUS 41640235e2SEnji Cooper 42640235e2SEnji Cooper export RUMP_SERVER=$SOCK_LOCAL 43640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.ifconfig shmif0 10.0.0.2/24 44640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up 45*cdebaff8SEnji Cooper atf_check -s exit:0 -o ignore rump.ifconfig -w 10 46640235e2SEnji Cooper 47640235e2SEnji Cooper $DEBUG && rump.ifconfig 48640235e2SEnji Cooper $DEBUG && rump.netstat -rn -f inet 49640235e2SEnji Cooper} 50640235e2SEnji Cooper 51640235e2SEnji Coopersetup_peer() 52640235e2SEnji Cooper{ 53640235e2SEnji Cooper 54*cdebaff8SEnji Cooper rump_server_start $SOCK_PEER 55*cdebaff8SEnji Cooper rump_server_add_iface $SOCK_PEER shmif0 $BUS 56640235e2SEnji Cooper 57640235e2SEnji Cooper export RUMP_SERVER=$SOCK_PEER 58640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.ifconfig shmif0 10.0.0.1/24 59640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up 60*cdebaff8SEnji Cooper atf_check -s exit:0 -o ignore rump.ifconfig -w 10 61640235e2SEnji Cooper 62640235e2SEnji Cooper $DEBUG && rump.ifconfig 63640235e2SEnji Cooper $DEBUG && rump.netstat -rn -f inet 64640235e2SEnji Cooper} 65640235e2SEnji Cooper 66640235e2SEnji Coopersetup_gw() 67640235e2SEnji Cooper{ 68640235e2SEnji Cooper 69*cdebaff8SEnji Cooper rump_server_start $SOCK_GW 70*cdebaff8SEnji Cooper rump_server_add_iface $SOCK_GW shmif0 $BUS 71*cdebaff8SEnji Cooper rump_server_add_iface $SOCK_GW shmif1 $BUS2 72640235e2SEnji Cooper 73640235e2SEnji Cooper export RUMP_SERVER=$SOCK_GW 74640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.ifconfig shmif0 10.0.0.254/24 75640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up 76640235e2SEnji Cooper 77640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.ifconfig shmif1 10.0.2.1/24 78640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.ifconfig shmif1 alias 10.0.2.2/24 79640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.ifconfig shmif1 up 80640235e2SEnji Cooper 81640235e2SEnji Cooper # Wait until DAD completes (10 sec at most) 82640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.ifconfig -w 10 83640235e2SEnji Cooper atf_check -s not-exit:0 -x "rump.ifconfig shmif1 |grep -q tentative" 84640235e2SEnji Cooper 85640235e2SEnji Cooper $DEBUG && rump.ifconfig 86640235e2SEnji Cooper $DEBUG && rump.netstat -rn -f inet 87640235e2SEnji Cooper} 88640235e2SEnji Cooper 89640235e2SEnji Coopertest_lo() 90640235e2SEnji Cooper{ 91640235e2SEnji Cooper 92640235e2SEnji Cooper export RUMP_SERVER=$SOCK_LOCAL 93640235e2SEnji Cooper 94640235e2SEnji Cooper # Up, Host, local 95*cdebaff8SEnji Cooper check_route_flags 127.0.0.1 UHl 96640235e2SEnji Cooper} 97640235e2SEnji Cooper 98640235e2SEnji Coopertest_connected() 99640235e2SEnji Cooper{ 100640235e2SEnji Cooper 101640235e2SEnji Cooper export RUMP_SERVER=$SOCK_LOCAL 102640235e2SEnji Cooper 103640235e2SEnji Cooper # Up, Host, LLINFO, local 104*cdebaff8SEnji Cooper check_route_flags 10.0.0.2 UHl 105640235e2SEnji Cooper 106640235e2SEnji Cooper # Up, Cloning 107*cdebaff8SEnji Cooper check_route_flags 10.0.0/24 UC 108640235e2SEnji Cooper} 109640235e2SEnji Cooper 110640235e2SEnji Coopertest_default_gateway() 111640235e2SEnji Cooper{ 112640235e2SEnji Cooper 113640235e2SEnji Cooper export RUMP_SERVER=$SOCK_LOCAL 114640235e2SEnji Cooper 115640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.route add default 10.0.0.1 116640235e2SEnji Cooper $DEBUG && rump.netstat -rn -f inet 117640235e2SEnji Cooper 118640235e2SEnji Cooper # Up, Gateway, Static 119*cdebaff8SEnji Cooper check_route_flags default UGS 120640235e2SEnji Cooper} 121640235e2SEnji Cooper 122640235e2SEnji Coopertest_static() 123640235e2SEnji Cooper{ 124640235e2SEnji Cooper 125640235e2SEnji Cooper export RUMP_SERVER=$SOCK_LOCAL 126640235e2SEnji Cooper 127640235e2SEnji Cooper # Static route to host 128640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.route add 10.0.1.1 10.0.0.1 129640235e2SEnji Cooper $DEBUG && rump.netstat -rn -f inet 130640235e2SEnji Cooper 131640235e2SEnji Cooper # Up, Gateway, Host, Static 132*cdebaff8SEnji Cooper check_route_flags 10.0.1.1 UGHS 133640235e2SEnji Cooper 134640235e2SEnji Cooper # Static route to network 135640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.route add -net 10.0.2.0/24 10.0.0.1 136640235e2SEnji Cooper $DEBUG && rump.netstat -rn -f inet 137640235e2SEnji Cooper 138640235e2SEnji Cooper # Up, Gateway, Static 139*cdebaff8SEnji Cooper check_route_flags 10.0.2/24 UGS 140640235e2SEnji Cooper} 141640235e2SEnji Cooper 142640235e2SEnji Coopertest_blackhole() 143640235e2SEnji Cooper{ 144640235e2SEnji Cooper 145640235e2SEnji Cooper export RUMP_SERVER=$SOCK_LOCAL 146640235e2SEnji Cooper 147640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.ping -n -w 1 -c 1 10.0.0.1 148640235e2SEnji Cooper 149640235e2SEnji Cooper # Delete an existing route first 150640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.route delete -net 10.0.0.0/24 151640235e2SEnji Cooper 152640235e2SEnji Cooper # Gateway must be lo0 153640235e2SEnji Cooper atf_check -s exit:0 -o ignore \ 154640235e2SEnji Cooper rump.route add -net 10.0.0.0/24 127.0.0.1 -blackhole 155640235e2SEnji Cooper $DEBUG && rump.netstat -rn -f inet 156640235e2SEnji Cooper 157640235e2SEnji Cooper # Up, Gateway, Blackhole, Static 158*cdebaff8SEnji Cooper check_route_flags 10.0.0/24 UGBS 159640235e2SEnji Cooper 160640235e2SEnji Cooper atf_check -s not-exit:0 -o match:'100.0% packet loss' \ 161640235e2SEnji Cooper rump.ping -n -w 1 -c 1 10.0.0.1 162640235e2SEnji Cooper $DEBUG && rump.netstat -rn -f inet 163640235e2SEnji Cooper 164640235e2SEnji Cooper # Shouldn't be created 165*cdebaff8SEnji Cooper check_route_no_entry 10.0.0.1 166640235e2SEnji Cooper} 167640235e2SEnji Cooper 168640235e2SEnji Coopertest_reject() 169640235e2SEnji Cooper{ 170640235e2SEnji Cooper 171640235e2SEnji Cooper export RUMP_SERVER=$SOCK_LOCAL 172640235e2SEnji Cooper 173640235e2SEnji Cooper # Delete an existing route first 174640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.route delete -net 10.0.0.0/24 175640235e2SEnji Cooper 176640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.route add -net 10.0.0.0/24 10.0.0.1 -reject 177640235e2SEnji Cooper $DEBUG && rump.netstat -rn -f inet 178640235e2SEnji Cooper 179640235e2SEnji Cooper # Up, Gateway, Reject, Static 180*cdebaff8SEnji Cooper check_route_flags 10.0.0/24 UGRS 181640235e2SEnji Cooper 182640235e2SEnji Cooper atf_check -s not-exit:0 -o ignore -e match:'No route to host' \ 183640235e2SEnji Cooper rump.ping -n -w 1 -c 1 10.0.0.1 184640235e2SEnji Cooper $DEBUG && rump.netstat -rn -f inet 185640235e2SEnji Cooper 186640235e2SEnji Cooper # Shouldn't be created 187*cdebaff8SEnji Cooper check_route_no_entry 10.0.0.1 188640235e2SEnji Cooper 189640235e2SEnji Cooper # Gateway is lo0 (RTF_GATEWAY) 190640235e2SEnji Cooper 191640235e2SEnji Cooper # Delete an existing route first 192640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.route delete -net 10.0.0.0/24 193640235e2SEnji Cooper 194640235e2SEnji Cooper atf_check -s exit:0 -o ignore \ 195640235e2SEnji Cooper rump.route add -net 10.0.0.0/24 127.0.0.1 -reject 196640235e2SEnji Cooper $DEBUG && rump.netstat -rn -f inet 197640235e2SEnji Cooper 198640235e2SEnji Cooper # Up, Gateway, Reject, Static 199*cdebaff8SEnji Cooper check_route_flags 10.0.0/24 UGRS 200640235e2SEnji Cooper 201640235e2SEnji Cooper atf_check -s not-exit:0 -o ignore -e match:'Network is unreachable' \ 202640235e2SEnji Cooper rump.ping -n -w 1 -c 1 10.0.0.1 203640235e2SEnji Cooper $DEBUG && rump.netstat -rn -f inet 204640235e2SEnji Cooper 205640235e2SEnji Cooper # Shouldn't be created 206*cdebaff8SEnji Cooper check_route_no_entry 10.0.0.1 207640235e2SEnji Cooper 208640235e2SEnji Cooper # Gateway is lo0 (RTF_HOST) 209640235e2SEnji Cooper 210640235e2SEnji Cooper # Delete an existing route first 211640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.route delete -net 10.0.0.0/24 212640235e2SEnji Cooper 213640235e2SEnji Cooper atf_check -s exit:0 -o ignore \ 214640235e2SEnji Cooper rump.route add -host 10.0.0.1/24 127.0.0.1 -iface -reject 215640235e2SEnji Cooper $DEBUG && rump.netstat -rn -f inet 216640235e2SEnji Cooper 217640235e2SEnji Cooper # Up, Host, Reject, Static 218*cdebaff8SEnji Cooper check_route_flags 10.0.0.1 UHRS 219640235e2SEnji Cooper 220640235e2SEnji Cooper atf_check -s not-exit:0 -o ignore -e match:'No route to host' \ 221640235e2SEnji Cooper rump.ping -n -w 1 -c 1 10.0.0.1 222640235e2SEnji Cooper $DEBUG && rump.netstat -rn -f inet 223640235e2SEnji Cooper 224640235e2SEnji Cooper return 0 225640235e2SEnji Cooper} 226640235e2SEnji Cooper 227640235e2SEnji Coopertest_icmp_redirect() 228640235e2SEnji Cooper{ 229640235e2SEnji Cooper 230640235e2SEnji Cooper ### Testing Dynamic flag ### 231640235e2SEnji Cooper 232640235e2SEnji Cooper # 233640235e2SEnji Cooper # Setup a gateway 10.0.0.254. 10.0.2.1 is behind it. 234640235e2SEnji Cooper # 235640235e2SEnji Cooper setup_gw 236640235e2SEnji Cooper 237640235e2SEnji Cooper # 238640235e2SEnji Cooper # Teach the peer that 10.0.2.* is behind 10.0.0.254 239640235e2SEnji Cooper # 240640235e2SEnji Cooper export RUMP_SERVER=$SOCK_PEER 241640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.route add -net 10.0.2.0/24 10.0.0.254 242640235e2SEnji Cooper # Up, Gateway, Static 243*cdebaff8SEnji Cooper check_route_flags 10.0.2/24 UGS 244640235e2SEnji Cooper 245640235e2SEnji Cooper # 246640235e2SEnji Cooper # Setup the default gateway to the peer, 10.0.0.1 247640235e2SEnji Cooper # 248640235e2SEnji Cooper export RUMP_SERVER=$SOCK_LOCAL 249640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.route add default 10.0.0.1 250640235e2SEnji Cooper # Up, Gateway, Static 251*cdebaff8SEnji Cooper check_route_flags default UGS 252640235e2SEnji Cooper 253640235e2SEnji Cooper # Try ping 10.0.2.1 254640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.ping -n -w 1 -c 1 10.0.2.1 255640235e2SEnji Cooper $DEBUG && rump.netstat -rn -f inet 256640235e2SEnji Cooper 257640235e2SEnji Cooper # Up, Gateway, Host, Dynamic 258*cdebaff8SEnji Cooper check_route_flags 10.0.2.1 UGHD 259*cdebaff8SEnji Cooper check_route_gw 10.0.2.1 10.0.0.254 260640235e2SEnji Cooper 261640235e2SEnji Cooper export RUMP_SERVER=$SOCK_PEER 262640235e2SEnji Cooper $DEBUG && rump.netstat -rn -f inet 263640235e2SEnji Cooper 264640235e2SEnji Cooper ### Testing Modified flag ### 265640235e2SEnji Cooper 266640235e2SEnji Cooper # 267640235e2SEnji Cooper # Teach a wrong route to 10.0.2.2 268640235e2SEnji Cooper # 269640235e2SEnji Cooper export RUMP_SERVER=$SOCK_LOCAL 270640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.route add 10.0.2.2 10.0.0.1 271640235e2SEnji Cooper # Up, Gateway, Host, Static 272*cdebaff8SEnji Cooper check_route_flags 10.0.2.2 UGHS 273*cdebaff8SEnji Cooper check_route_gw 10.0.2.2 10.0.0.1 274640235e2SEnji Cooper 275640235e2SEnji Cooper # Try ping 10.0.2.2 276640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.ping -n -w 1 -c 1 10.0.2.2 277640235e2SEnji Cooper $DEBUG && rump.netstat -rn -f inet 278640235e2SEnji Cooper 279640235e2SEnji Cooper # Up, Gateway, Host, Modified, Static 280*cdebaff8SEnji Cooper check_route_flags 10.0.2.2 UGHMS 281*cdebaff8SEnji Cooper check_route_gw 10.0.2.2 10.0.0.254 282640235e2SEnji Cooper} 283640235e2SEnji Cooper 284640235e2SEnji Coopertest_announce() 285640235e2SEnji Cooper{ 286640235e2SEnji Cooper export RUMP_SERVER=$SOCK_LOCAL 287640235e2SEnji Cooper 288640235e2SEnji Cooper # Delete an existing route first 289640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.route delete -net 10.0.0.0/24 290640235e2SEnji Cooper 291640235e2SEnji Cooper atf_check -s exit:0 -o ignore rump.route add -net 10.0.0.0/24 10.0.0.1 -proxy 292640235e2SEnji Cooper $DEBUG && rump.netstat -rn -f inet 293640235e2SEnji Cooper 294640235e2SEnji Cooper # Up, Gateway, Static, proxy 295*cdebaff8SEnji Cooper check_route_flags 10.0.0/24 UGSp 296640235e2SEnji Cooper 297640235e2SEnji Cooper # TODO test its behavior 298640235e2SEnji Cooper} 299640235e2SEnji Cooper 300640235e2SEnji Cooperadd_test() 301640235e2SEnji Cooper{ 302640235e2SEnji Cooper local name=$1 303640235e2SEnji Cooper local desc="$2" 304640235e2SEnji Cooper 305640235e2SEnji Cooper atf_test_case "route_flags_${name}" cleanup 306640235e2SEnji Cooper eval "route_flags_${name}_head() { \ 307640235e2SEnji Cooper atf_set \"descr\" \"${desc}\"; \ 308640235e2SEnji Cooper atf_set \"require.progs\" \"rump_server\"; \ 309640235e2SEnji Cooper }; \ 310640235e2SEnji Cooper route_flags_${name}_body() { \ 311640235e2SEnji Cooper setup_local; \ 312640235e2SEnji Cooper setup_peer; \ 313640235e2SEnji Cooper test_${name}; \ 314*cdebaff8SEnji Cooper rump_server_destroy_ifaces; \ 315640235e2SEnji Cooper }; \ 316640235e2SEnji Cooper route_flags_${name}_cleanup() { \ 317*cdebaff8SEnji Cooper $DEBUG && dump; \ 318640235e2SEnji Cooper cleanup; \ 319640235e2SEnji Cooper }" 320640235e2SEnji Cooper atf_add_test_case "route_flags_${name}" 321640235e2SEnji Cooper} 322640235e2SEnji Cooper 323640235e2SEnji Cooperatf_init_test_cases() 324640235e2SEnji Cooper{ 325640235e2SEnji Cooper 326640235e2SEnji Cooper add_test lo "Tests route flags: loop back interface" 327640235e2SEnji Cooper add_test connected "Tests route flags: connected route" 328640235e2SEnji Cooper add_test default_gateway "Tests route flags: default gateway" 329640235e2SEnji Cooper add_test static "Tests route flags: static route" 330640235e2SEnji Cooper add_test blackhole "Tests route flags: blackhole route" 331640235e2SEnji Cooper add_test reject "Tests route flags: reject route" 332640235e2SEnji Cooper add_test icmp_redirect "Tests route flags: icmp redirect" 333640235e2SEnji Cooper add_test announce "Tests route flags: announce flag" 334640235e2SEnji Cooper} 335