Page MenuHomeFreeBSD

D4294.1776134815.diff
No OneTemporary

Size
3 KB
Referenced Files
None
Subscribers
None

D4294.1776134815.diff

Index: sys/netinet/tcp_input.c
===================================================================
--- sys/netinet/tcp_input.c
+++ sys/netinet/tcp_input.c
@@ -523,7 +523,7 @@
CC_ALGO(tp)->ecnpkt_handler(tp->ccv);
if (tp->ccv->flags & CCF_ACKNOW)
- tcp_timer_activate(tp, TT_DELACK, tcp_delacktime);
+ tcp_timer_activate(tp, TT_DELACK, tp->t_delack);
}
}
@@ -1995,7 +1995,7 @@
*/
if (DELAY_ACK(tp, tlen) && tlen != 0)
tcp_timer_activate(tp, TT_DELACK,
- tcp_delacktime);
+ tp->t_delack);
else
tp->t_flags |= TF_ACKNOW;
@@ -3059,7 +3059,7 @@
if (tp->t_flags & TF_DELACK) {
tp->t_flags &= ~TF_DELACK;
- tcp_timer_activate(tp, TT_DELACK, tcp_delacktime);
+ tcp_timer_activate(tp, TT_DELACK, tp->t_delack);
}
INP_WUNLOCK(tp->t_inpcb);
return;
Index: sys/netinet/tcp_subr.c
===================================================================
--- sys/netinet/tcp_subr.c
+++ sys/netinet/tcp_subr.c
@@ -401,7 +401,7 @@
tcp_rexmit_min = TCPTV_MIN;
if (tcp_rexmit_min < 1)
tcp_rexmit_min = 1;
- tcp_rexmit_slop = TCPTV_CPU_VAR;
+ tcp_rexmit_slop = 0;
tcp_finwait2_timeout = TCPTV_FINWAIT2_TIMEOUT;
tcp_tcbhashsize = hashsize;
@@ -828,6 +828,7 @@
tp->t_rttvar = ((TCPTV_RTOBASE - TCPTV_SRTTBASE) << TCP_RTTVAR_SHIFT) / 4;
tp->t_rttmin = tcp_rexmit_min;
tp->t_rxtcur = TCPTV_RTOBASE;
+ tp->t_delack = tcp_delacktime;
tp->snd_cwnd = TCP_MAXWIN << TCP_MAX_WINSHIFT;
tp->snd_ssthresh = TCP_MAXWIN << TCP_MAX_WINSHIFT;
tp->t_rcvtime = ticks;
Index: sys/netinet/tcp_timer.h
===================================================================
--- sys/netinet/tcp_timer.h
+++ sys/netinet/tcp_timer.h
@@ -75,7 +75,7 @@
#define TCPTV_MSL ( 30*hz) /* max seg lifetime (hah!) */
#define TCPTV_SRTTBASE 0 /* base roundtrip time;
if 0, no idea yet */
-#define TCPTV_RTOBASE ( 3*hz) /* assumed RTO if no info */
+#define TCPTV_RTOBASE ( hz ) /* assumed RTO if no info - RFC 6298 */
#define TCPTV_PERSMIN ( 5*hz) /* retransmit persistence */
#define TCPTV_PERSMAX ( 60*hz) /* maximum persist interval */
@@ -107,7 +107,7 @@
* The prior minimum of 1*hz (1 second) badly breaks throughput on any
* networks faster then a modem that has minor (e.g. 1%) packet loss.
*/
-#define TCPTV_MIN ( hz/33 ) /* minimum allowable value */
+#define TCPTV_MIN ( 3 ) /* minimum allowable value - see above */
#define TCPTV_CPU_VAR ( hz/5 ) /* cpu variance allowed (200ms) */
#define TCPTV_REXMTMAX ( 64*hz) /* max allowable REXMT value */
@@ -117,7 +117,7 @@
#define TCP_MAXRXTSHIFT 12 /* maximum retransmits */
-#define TCPTV_DELACK ( hz/10 ) /* 100ms timeout */
+#define TCPTV_DELACK ( hz/25 ) /* 40ms timeout */
#ifdef TCPTIMERS
static const char *tcptimers[] =
Index: sys/netinet/tcp_timer.c
===================================================================
--- sys/netinet/tcp_timer.c
+++ sys/netinet/tcp_timer.c
@@ -649,6 +649,8 @@
rexmt = TCP_REXMTVAL(tp) * tcp_backoff[tp->t_rxtshift];
TCPT_RANGESET(tp->t_rxtcur, rexmt,
tp->t_rttmin, TCPTV_REXMTMAX);
+ /* 1 < delack < tcp_delacktime - and should scale down with RTO/2 */
+ TCPT_RANGESET(tp->t_delack, (rexmt >> 1), 1, tcp_delacktime);
/*
* We enter the path for PLMTUD if connection is established or, if
Index: sys/netinet/tcp_var.h
===================================================================
--- sys/netinet/tcp_var.h
+++ sys/netinet/tcp_var.h
@@ -206,6 +206,7 @@
u_int t_tsomaxsegsize; /* TSO maximum segment size in bytes */
u_int t_pmtud_saved_maxopd; /* pre-blackhole MSS */
u_int t_flags2; /* More tcpcb flags storage */
+ u_int t_delack; /* delayed ack timer */
uint32_t t_ispare[8]; /* 5 UTO, 3 TBD */
void *t_pspare2[4]; /* 1 TCP_SIGNATURE, 3 TBD */

File Metadata

Mime Type
text/plain
Expires
Tue, Apr 14, 2:46 AM (9 h, 59 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28336557
Default Alt Text
D4294.1776134815.diff (3 KB)

Event Timeline