Home | History | Annotate | Line # | Download | only in tcp
      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