svn commit: r347095 - in stable/12/sys/netinet: . tcp_stacks

Michael Tuexen tuexen at FreeBSD.org
Sat May 4 10:36:18 UTC 2019


Author: tuexen
Date: Sat May  4 10:36:16 2019
New Revision: 347095
URL: https://svnweb.freebsd.org/changeset/base/347095

Log:
  MFC r344367:
  Use exponential backoff for retransmitting SYN segments as specified
  in the TCP RFCs.
  
  Reviewed by:		rrs@, Richard Scheffenegger
  Sponsored by:		Netflix, Inc.
  Differential Revision:	https://reviews.freebsd.org/D18974

Modified:
  stable/12/sys/netinet/tcp_stacks/rack.c
  stable/12/sys/netinet/tcp_syncache.c
  stable/12/sys/netinet/tcp_timer.c
  stable/12/sys/netinet/tcp_timer.h
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/netinet/tcp_stacks/rack.c
==============================================================================
--- stable/12/sys/netinet/tcp_stacks/rack.c	Sat May  4 10:33:31 2019	(r347094)
+++ stable/12/sys/netinet/tcp_stacks/rack.c	Sat May  4 10:36:16 2019	(r347095)
@@ -2882,7 +2882,7 @@ rack_timeout_rxt(struct tcpcb *tp, struct tcp_rack *ra
 	TCPSTAT_INC(tcps_rexmttimeo);
 	if ((tp->t_state == TCPS_SYN_SENT) ||
 	    (tp->t_state == TCPS_SYN_RECEIVED))
-		rexmt = MSEC_2_TICKS(RACK_INITIAL_RTO * tcp_syn_backoff[tp->t_rxtshift]);
+		rexmt = MSEC_2_TICKS(RACK_INITIAL_RTO * tcp_backoff[tp->t_rxtshift]);
 	else
 		rexmt = TCP_REXMTVAL(tp) * tcp_backoff[tp->t_rxtshift];
 	TCPT_RANGESET(tp->t_rxtcur, rexmt,

Modified: stable/12/sys/netinet/tcp_syncache.c
==============================================================================
--- stable/12/sys/netinet/tcp_syncache.c	Sat May  4 10:33:31 2019	(r347094)
+++ stable/12/sys/netinet/tcp_syncache.c	Sat May  4 10:36:16 2019	(r347095)
@@ -155,11 +155,11 @@ static int	 syncookie_cmp(struct in_conninfo *inc, str
 /*
  * Transmit the SYN,ACK fewer times than TCP_MAXRXTSHIFT specifies.
  * 3 retransmits corresponds to a timeout with default values of
- * TCPTV_RTOBASE * (                 1 +
- *                  tcp_syn_backoff[1] +
- *                  tcp_syn_backoff[2] +
- *                  tcp_syn_backoff[3]) + 3 * tcp_rexmit_slop,
- * 3000 ms * (1 + 1 + 1 + 1) +  3 * 200 ms = 12600 ms,
+ * TCPTV_RTOBASE * (             1 +
+ *                  tcp_backoff[1] +
+ *                  tcp_backoff[2] +
+ *                  tcp_backoff[3]) + 3 * tcp_rexmit_slop,
+ * 3000 ms * (1 + 2 + 4 + 8) +  3 * 200 ms = 45600 ms,
  * the odds are that the user has given up attempting to connect by then.
  */
 #define SYNCACHE_MAXREXMTS		3
@@ -426,7 +426,7 @@ syncache_timeout(struct syncache *sc, struct syncache_
 	if (sc->sc_rxmits == 0)
 		rexmt = TCPTV_RTOBASE;
 	else
-		TCPT_RANGESET(rexmt, TCPTV_RTOBASE * tcp_syn_backoff[sc->sc_rxmits],
+		TCPT_RANGESET(rexmt, TCPTV_RTOBASE * tcp_backoff[sc->sc_rxmits],
 		    tcp_rexmit_min, TCPTV_REXMTMAX);
 	sc->sc_rxttime = ticks + rexmt;
 	sc->sc_rxmits++;

Modified: stable/12/sys/netinet/tcp_timer.c
==============================================================================
--- stable/12/sys/netinet/tcp_timer.c	Sat May  4 10:33:31 2019	(r347094)
+++ stable/12/sys/netinet/tcp_timer.c	Sat May  4 10:36:16 2019	(r347095)
@@ -233,9 +233,6 @@ tcp_slowtimo(void)
 	VNET_LIST_RUNLOCK_NOSLEEP();
 }
 
-int	tcp_syn_backoff[TCP_MAXRXTSHIFT + 1] =
-    { 1, 1, 1, 1, 1, 2, 4, 8, 16, 32, 64, 64, 64 };
-
 int	tcp_backoff[TCP_MAXRXTSHIFT + 1] =
     { 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 512, 512, 512 };
 
@@ -671,7 +668,7 @@ tcp_timer_rexmt(void * xtp)
 	TCPSTAT_INC(tcps_rexmttimeo);
 	if ((tp->t_state == TCPS_SYN_SENT) ||
 	    (tp->t_state == TCPS_SYN_RECEIVED))
-		rexmt = TCPTV_RTOBASE * tcp_syn_backoff[tp->t_rxtshift];
+		rexmt = TCPTV_RTOBASE * tcp_backoff[tp->t_rxtshift];
 	else
 		rexmt = TCP_REXMTVAL(tp) * tcp_backoff[tp->t_rxtshift];
 	TCPT_RANGESET(tp->t_rxtcur, rexmt,

Modified: stable/12/sys/netinet/tcp_timer.h
==============================================================================
--- stable/12/sys/netinet/tcp_timer.h	Sat May  4 10:33:31 2019	(r347094)
+++ stable/12/sys/netinet/tcp_timer.h	Sat May  4 10:36:16 2019	(r347095)
@@ -199,7 +199,6 @@ extern int tcp_rexmit_slop;
 extern int tcp_msl;
 extern int tcp_ttl;			/* time to live for TCP segs */
 extern int tcp_backoff[];
-extern int tcp_syn_backoff[];
 extern int tcp_totbackoff;
 extern int tcp_rexmit_drop_options;
 


More information about the svn-src-stable-12 mailing list