tcp/syncache: Use tcp_syn_backoff|low RTO multipler
authorSepherosa Ziehau <sephe@dragonflybsd.org>
Wed, 11 Apr 2012 10:24:53 +0000 (18:24 +0800)
committerSepherosa Ziehau <sephe@dragonflybsd.org>
Wed, 11 Apr 2012 10:28:47 +0000 (18:28 +0800)
sys/netinet/tcp_syncache.c
sys/netinet/tcp_timer.h

index ca8ad15..cef5f8b 100644 (file)
@@ -243,6 +243,8 @@ static __inline void
 syncache_timeout(struct tcp_syncache_percpu *syncache_percpu,
                 struct syncache *sc, int slot)
 {
+       int rto;
+
        if (slot > 0) {
                /*
                 * Record that SYN|ACK was lost.
@@ -251,7 +253,13 @@ syncache_timeout(struct tcp_syncache_percpu *syncache_percpu,
                sc->sc_flags |= SCF_SYN_WASLOST;
        }
        sc->sc_rxtslot = slot;
-       sc->sc_rxttime = ticks + TCPTV_RTOBASE * tcp_backoff[slot];
+
+       if (tcp_low_rtobase)
+               rto = TCPTV_RTOBASE * tcp_syn_backoff_low[slot];
+       else
+               rto = TCPTV_RTOBASE * tcp_syn_backoff[slot];
+       sc->sc_rxttime = ticks + rto;
+
        TAILQ_INSERT_TAIL(&syncache_percpu->timerq[slot], sc, sc_timerq);
        if (!callout_active(&syncache_percpu->tt_timerq[slot])) {
                callout_reset(&syncache_percpu->tt_timerq[slot],
index 6af1c8e..3b02dd2 100644 (file)
@@ -160,7 +160,9 @@ extern int tcp_rexmit_min;
 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_backoff[];              /* rxt backoff for data */
+extern int tcp_syn_backoff[];          /* rxt backoff for SYN */
+extern int tcp_syn_backoff_low[];      /* rxt backoff for SYN w/ RFC6298 */
 
 void   tcp_timer_2msl(void *xtp);
 void   tcp_timer_keep(void *xtp);