IPv6 window scaling factor always 1 on initial SYN

sthaug at nethelp.no sthaug at nethelp.no
Mon Apr 6 03:20:02 PDT 2009


> Ok, both versions had:	< so->so_rcv.sb_hiwat)
> 
> http://svn.freebsd.org/viewvc/base?view=revision&revision=166403
> 
> changed it for IPv4 the first time,
> 
> http://svn.freebsd.org/viewvc/base?view=revision&revision=172795
> 
> changed it a second time for IPv4.
> 
> Noone changed the IPv6 version.
> 
> The syncache already seems to do it for both v4/v6 (common code).
> 
> Can you try changing it to < sb_max) for IPv6 as well and see if
> things work (better) for you?

I changed it, and that worked like a dream. Now I get basically the
same throughput with IPv4 and IPv6. There are of course still issues
like lots of IPv6 tunnels that add extra latency - but that's not the
fault of FreeBSD.

Anyway, thanks for your work. Below is a context diff (against 7-STABLE
cvsupped last night). Do we need a PR to get this into FreeBSD?

Steinar Haug, Nethelp consulting, sthaug at nethelp.no
----------------------------------------------------------------------
*** tcp_usrreq.c.orig	Sun Apr  5 22:51:49 2009
--- tcp_usrreq.c	Mon Apr  6 11:15:11 2009
***************
*** 1153,1159 ****
  
  	/* Compute window scaling to request.  */
  	while (tp->request_r_scale < TCP_MAX_WINSHIFT &&
! 	    (TCP_MAXWIN << tp->request_r_scale) < so->so_rcv.sb_hiwat)
  		tp->request_r_scale++;
  
  	soisconnecting(so);
--- 1153,1159 ----
  
  	/* Compute window scaling to request.  */
  	while (tp->request_r_scale < TCP_MAX_WINSHIFT &&
! 	    (TCP_MAXWIN << tp->request_r_scale) < sb_max)
  		tp->request_r_scale++;
  
  	soisconnecting(so);


More information about the freebsd-net mailing list