#! /bin/sh

# winsize 64 k  (Make sure to include a space betw. 64 and k.)
# This changes the TCP window size to 64 KB from the default of 8K.  

usage()
{
	echo usage: winsize [size [k]]
	exit
}

display()
{
	/usr/ucb/echo -n "tcp_cwnd_max = "
	/usr/sbin/ndd /dev/tcp tcp_cwnd_max
	/usr/ucb/echo -n "tcp_xmit_hiwat = "
	/usr/sbin/ndd /dev/tcp tcp_xmit_hiwat
	/usr/ucb/echo -n "tcp_recv_hiwat = "
	/usr/sbin/ndd /dev/tcp tcp_recv_hiwat

	echo " "
	/usr/ucb/echo -n "udp_recv_hiwat = "
	/usr/sbin/ndd /dev/udp udp_recv_hiwat
	/usr/ucb/echo -n "udp_max_buf = "
	/usr/sbin/ndd /dev/udp udp_max_buf
}

modify()
{
	if [ $tcp_win_size -lt 32768 ] ; then
		tcp_cwnd_max=32768
	elif [ $tcp_win_size -gt 65535 ] ; then
		tcp_cwnd_max=`expr $tcp_win_size - 1`
	else
		tcp_cwnd_max=`expr $tcp_win_size`
	fi
	/usr/sbin/ndd -set /dev/tcp tcp_cwnd_max $tcp_cwnd_max
	/usr/sbin/ndd -set /dev/tcp tcp_xmit_hiwat $tcp_win_size
	/usr/sbin/ndd -set /dev/tcp tcp_recv_hiwat $tcp_win_size 

	/usr/sbin/ndd -set /dev/udp udp_recv_hiwat $tcp_win_size 
	/usr/sbin/ndd -set /dev/udp udp_max_buf 1048576
}

case $# in
0)
	display;
	;;
1)
	tcp_win_size=$1
	modify
	display
	;;
2)
	if [ $2 != 'k' -a $2 != 'K' ]; then
		usage;
	fi
	tcp_win_size=`expr $1 \* 1024`
	modify
	display
	;;
*)
	usage
	;;
esac

