1 # $NetBSD: t_tcp_nc.sh,v 1.1 2022/11/02 09:37:56 ozaki-r Exp $ 2 # 3 # Copyright (c) 2022 Internet Initiative Japan Inc. 4 # All rights reserved. 5 # 6 # Redistribution and use in source and binary forms, with or without 7 # modification, are permitted provided that the following conditions 8 # are met: 9 # 1. Redistributions of source code must retain the above copyright 10 # notice, this list of conditions and the following disclaimer. 11 # 2. Redistributions in binary form must reproduce the above copyright 12 # notice, this list of conditions and the following disclaimer in the 13 # documentation and/or other materials provided with the distribution. 14 # 15 # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 16 # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 17 # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 18 # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 19 # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20 # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21 # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22 # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23 # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25 # POSSIBILITY OF SUCH DAMAGE. 26 # 27 28 SOCK_LOCAL=unix://tcp_nc_local 29 SOCK_PEER=unix://tcp_nc_peer 30 BUS=./bus_tcp_nc 31 FILE_SND=./file.snd 32 FILE_RCV=./file.rcv 33 IP_LOCAL=10.0.0.1 34 IP_PEER=10.0.0.2 35 NC_OPTS="-w 3" 36 37 DEBUG=${DEBUG:-false} 38 39 setup_servers() 40 { 41 42 rump_server_start $SOCK_LOCAL 43 rump_server_start $SOCK_PEER 44 rump_server_add_iface $SOCK_LOCAL shmif0 $BUS 45 rump_server_add_iface $SOCK_PEER shmif0 $BUS 46 export RUMP_SERVER=$SOCK_LOCAL 47 atf_check -s exit:0 rump.ifconfig shmif0 $IP_LOCAL/24 48 export RUMP_SERVER=$SOCK_PEER 49 atf_check -s exit:0 rump.ifconfig shmif0 $IP_PEER/24 50 } 51 52 prepare_snd_file() 53 { 54 local file=$FILE_SND 55 local size=${1:-5120} 56 57 # XXX accepts only multiple of 512 58 dd if=/dev/zero of=$file bs=512 count=$(($size / 512)) 59 } 60 61 cleanup_file() 62 { 63 64 rm -f $FILE_SND 65 rm -f $FILE_RCV 66 } 67 68 test_tcp_nc_econnrefused() 69 { 70 71 export RUMP_SERVER=$SOCK_LOCAL 72 73 atf_check -s not-exit:0 -e match:'Connection refused' \ 74 $HIJACKING nc $NC_OPTS -v 127.0.0.1 80 < $FILE_SND 75 atf_check -s not-exit:0 -e match:'Connection refused' \ 76 $HIJACKING nc $NC_OPTS -v $IP_PEER 80 < $FILE_SND 77 } 78 79 test_tcp_nc_rcvbuf() 80 { 81 82 start_nc_server $SOCK_PEER 80 $FILE_RCV ipv4 "-O 16384" 83 84 atf_check -s exit:0 $HIJACKING nc $NC_OPTS $IP_PEER 80 < $FILE_SND 85 } 86 87 test_tcp_nc_small_rcvbuf() 88 { 89 90 start_nc_server $SOCK_PEER 80 $FILE_RCV ipv4 "-O 1024" 91 92 prepare_snd_file $((512 * 1024)) 93 atf_check -s exit:0 $HIJACKING nc $NC_OPTS $IP_PEER 80 < $FILE_SND 94 } 95 96 test_tcp_nc_sndbuf() 97 { 98 99 start_nc_server $SOCK_PEER 80 $FILE_RCV ipv4 100 101 atf_check -s exit:0 $HIJACKING nc $NC_OPTS -I 16384 $IP_PEER 80 < $FILE_SND 102 } 103 104 test_tcp_nc_small_sndbuf() 105 { 106 107 start_nc_server $SOCK_PEER 80 $FILE_RCV ipv4 108 109 prepare_snd_file $((512 * 1024)) 110 atf_check -s exit:0 $HIJACKING nc $NC_OPTS -I 1024 $IP_PEER 80 < $FILE_SND 111 } 112 113 test_tcp_nc_md5sig() 114 { 115 116 atf_expect_fail "TCP_SIGNATURE is not enabled by default" 117 118 start_nc_server $SOCK_PEER 80 $FILE_RCV ipv4 119 120 atf_check -s exit:0 $HIJACKING nc $NC_OPTS -S $IP_PEER 80 < $FILE_SND 121 } 122 123 add_test_tcp_nc() 124 { 125 local type=$1 126 local name= desc= 127 128 desc="Test TCP with nc ($type)" 129 name="tcp_nc_${type}" 130 131 atf_test_case ${name} cleanup 132 eval " 133 ${name}_head() { 134 atf_set descr \"$desc\" 135 atf_set require.progs rump_server nc 136 } 137 ${name}_body() { 138 setup_servers 139 prepare_snd_file 140 test_tcp_nc_$type 141 rump_server_destroy_ifaces 142 } 143 ${name}_cleanup() { 144 cleanup_file 145 \$DEBUG && dump 146 cleanup 147 } 148 " 149 atf_add_test_case ${name} 150 } 151 152 atf_init_test_cases() 153 { 154 155 add_test_tcp_nc econnrefused 156 add_test_tcp_nc rcvbuf 157 add_test_tcp_nc small_rcvbuf 158 add_test_tcp_nc sndbuf 159 add_test_tcp_nc small_sndbuf 160 add_test_tcp_nc md5sig 161 } 162