Author: jhb
Date: Wed Jan  9 20:27:06 2013
New Revision: 245238
URL: http://svnweb.freebsd.org/changeset/base/245238

Log:
  Don't drop options from the third retransmitted SYN by default.  If the
  SYNs (or SYN/ACK replies) are dropped due to network congestion, then the
  remote end of the connection may act as if options such as window scaling
  are enabled but the local end will think they are not.  This can result in
  very slow data transfers in the case of window scaling disagreements.
  
  The old behavior can be obtained by setting the
  net.inet.tcp.rexmit_drop_options sysctl to a non-zero value.
  
  Reviewed by:  net@
  MFC after:    2 weeks

Modified:
  head/sys/netinet/tcp_timer.c

Modified: head/sys/netinet/tcp_timer.c
==============================================================================
--- head/sys/netinet/tcp_timer.c        Wed Jan  9 20:13:47 2013        
(r245237)
+++ head/sys/netinet/tcp_timer.c        Wed Jan  9 20:27:06 2013        
(r245238)
@@ -119,6 +119,11 @@ SYSCTL_INT(_net_inet_tcp, OID_AUTO, keep
        /* max idle probes */
 int    tcp_maxpersistidle;
 
+static int     tcp_rexmit_drop_options = 0;
+SYSCTL_INT(_net_inet_tcp, OID_AUTO, rexmit_drop_options, CTLFLAG_RW,
+    &tcp_rexmit_drop_options, 0,
+    "Drop TCP options from 3rd and later retransmitted SYN");
+
 static int     per_cpu_timers = 0;
 SYSCTL_INT(_net_inet_tcp, OID_AUTO, per_cpu_timers, CTLFLAG_RW,
     &per_cpu_timers , 0, "run tcp timers on all cpus");
@@ -595,7 +600,8 @@ tcp_timer_rexmt(void * xtp)
         * header compression code which trashes TCP segments containing
         * unknown-to-them TCP options.
         */
-       if ((tp->t_state == TCPS_SYN_SENT) && (tp->t_rxtshift == 3))
+       if (tcp_rexmit_drop_options && (tp->t_state == TCPS_SYN_SENT) &&
+           (tp->t_rxtshift == 3))
                tp->t_flags &= ~(TF_REQ_SCALE|TF_REQ_TSTMP|TF_SACK_PERMIT);
        /*
         * If we backed off this far, our srtt estimate is probably bogus.
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to