Subject: Recent NetBSD network code improvements
To: None <netbsd-announce@NetBSD.ORG>
From: Jason Thorpe <thorpej@NetBSD.ORG>
List: netbsd-announce
Date: 04/30/1998 19:50:11
Hi folks...

This is just a quick note to announce some cool new features to NetBSD's
networking code, recently introduced in NetBSD-current.

	* The TCP initial congestion window (IW) has been made a
	  tunable variable.  This will facilitate migration to the
	  new TCP initial window when finalized by the Internet
	  Engineering Task Force.

	  The IW may be tuned by the sysctl variable net.inet.tcp.init_win.
	  A value of 0 indicates that the Floyd ~4K IW formula will be
	  used to compute the IW.  Otherwise, the variable indicates the
	  number of maximum-sized packets.

	  Contact: Jason R. Thorpe <>

	* The Hughes/Touch/Heidemann Congestion Window Monitoring
	  algorithm has been added to TCP.  This eliminates line-rate
	  bursts that can congest network links and routers.  It works
	  by counting the number of outstanding (unacknowedged) packets
	  on the wire, and allowing that many packets plus a burst
	  value additional packets when more data is to be transmitted
	  on a TCP connection.  As long as a connection keeps transmitting,
	  congestion window space is available.  As soon as a connection
	  stops transmitting, the available congestion window quickly
	  decays back to the burst value.  This policy has often been
	  described as "use it or lose it".  It can be especially helpful
	  on World Wide Web servers which implement HTTP/1.1, which has
	  lingering connections, which have a high tendency to go idle.

	  CWM may be enabled in your kernel by setting the sysctl variable
	  net.inet.tcp.cwm to 1.  The burst value may be tuned by setting
	  the sysctl variable net.inet.tcp.cwm_burstsize.  The default
	  burst size is 4 packets, as documented in the CWM Internet Draft.

	  Contact: Jason R. Thorpe <>

	* Path MTU Discovery has been improved.  The most significant
	  improvement over NetBSD 1.3 is that routes added by the Path
	  MTU Discovery engine now properly time out.

	  In support of this, a general route timer framework as been
	  added to the NetBSD kernel.

	  Path MTU Discovery may be enabled by the sysctl variable
	  net.inet.ip.mtudisc.  The timeout period, expressed in
	  seconds, may be modified by the sysctl variable

	  Contact: Kevin M. Lahey <>

	* The RFC1323 PAWS/Timestamps/Window Scale implementation in
	  NetBSD's TCP has been brought up to full spec with the
	  lastest RFC1323.bis.

	  In addition, a finer-grained control over RFC1323 extensions
	  is now supported.  RFC1323 may be enabled by the sysctl variable
	  net.inet.tcp.rfc1323.  If that variable is enabled, timestamps
	  and window scaling are enabled via the net.inet.tcp.timestamps
	  and net.inet.tcp.win_scale sysctl variables, respectively.

	  Contact: Kevin M. Lahey <>
		   Jason R. Thorpe <>

	* Hooks for zero-copy and other optimizations have been added
	  to the socket layer.  In combination with the new virtual
	  memory system, UVM, these hooks could potentially provide
	  greatly improved performance for many network applications.

	  Watch for more work in this exciting area!

	  Contact: Matt Thomas <>

	* The TCP segment reassembly code has been completely rewritten.
	  The new code supports segment concatenation, which will improve
	  performance for out-of-order packets, and also forms the building
	  blocks of RFC2018 Selective Acknowledgement support.

	  Contact: Matt Thomas <>

	* IP flow recognition and fast IP forwarding support has been
	  added.  This enables PC-class hardware to forward packets
	  at full line rate with very little CPU utilization.  Initial
	  testing showed forwarding rates of over 140,000 packets per
	  second with no appreciable increase in system load!  Support
	  for fast-forwarding over Ethernet and FDDI exists now, and
	  support for fast-forwarding over ATM and Hippi is planned for
	  the near future.  There's more work yet to do, but this is
	  very exciting stuff!

	  Contact: Matt Thomas <>

	* Support for spoofing link-level addresses has been added
	  to the Berkeley Packet Filter.  This is useful in many
	  applications where protocols require specific MAC source
	  addresses.  This code was contributed by Greg Smith of
	  the Numerical Aerospace Simulation Facility, NASA Ames
	  Research Center.

	  Contact: Jason R. Thorpe <>

	* inetd(8) has been modified to allow specification of listen
	  socket buffer sizes in /etc/inetd.conf.  This is useful for
	  TCP servers that wish to advertise large windows requiring
	  window scale factors (window scale must be advertised during
	  the connection handshake, which is why the socket buffer size
	  must be set on the listen socket).  This can improve TCP
	  performance greatly in some situations.

	  Contact: Jason R. Thorpe <>

And remember, technical discussions about NetBSD's networking code
take place on the mailing list.  To subscribe,
send mail to with the message body:

	subscribe tech-net

Until next time...

	-- The NetBSD Network Code Hackers