Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 7 Feb 1997 05:28:25 +0700
From:      Eka Kelana <eka@werty.wasantara.net.id>
To:        freebsd-hackers@FreeBSD.org
Cc:        freebsd-bugs@FreeBSD.org, dg@root.com
Subject:   Need quick answer
Message-ID:  <1522A71DB9@bandung.wasantara.net.id>

next in thread | raw e-mail | index | archive | help
Hi..

 I need a good explanation about this code in in_rmx.c:

...
        if (!rt->rt_rmx.rmx_sendpipe && !(rt->rt_rmx.rmx_locks & RTV_SPIPE))
		rt->rt_rmx.rmx_sendpipe = tcp_sendspace;
        if (!rt->rt_rmx.rmx_recvpipe && !(rt->rt_rmx.rmx_locks & RTV_RPIPE))
		rt->rt_rmx.rmx_recvpipe = tcp_recvspace;
...

because this code affect the socket buffer size (sb_hiwat) in tcp_mss()
function. 
I experienced that it wouldn't allow user program to set the socket buffer
size. The code in tcp_mss() function is:

...
#ifdef RTV_RPIPE
	if ((bufsize = rt->rt_rmx.rmx_recvpipe) == 0)
#endif
		bufsize = so->so_rcv.sb_hiwat;
...

                (void)sbreserve(&so->so_rcv, bufsize);
...

Since rt->rt_rmx.rmx_recvpipe is never zeroed (by default, it equals
tcp_sendspace), the line
bufsize = so->so_rcv.sb_hiwat is always jumped over, and tcp_mss() will set
the sb_hiwat value to bufsize.
And further, I've done a performance test. Before I commented out the four
lines in in_rmx.c above, the TCP/IP implementations showed a throughput
around 8.56 Mbps, and after I commented them out and rebuilt the kernel, it
showed a throughput around 8.61 Mbps. Well, not a significant degradation,
but the reason is still not clear to me...


-Eka Kelana-
STTTelkom
     




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1522A71DB9>