Page MenuHomeFreeBSD

D28702.diff
No OneTemporary

D28702.diff

diff --git a/share/man/man4/tcp.4 b/share/man/man4/tcp.4
--- a/share/man/man4/tcp.4
+++ b/share/man/man4/tcp.4
@@ -34,7 +34,7 @@
.\" From: @(#)tcp.4 8.1 (Berkeley) 6/5/93
.\" $FreeBSD$
.\"
-.Dd April 8, 2021
+.Dd April 17, 2021
.Dt TCP 4
.Os
.Sh NAME
@@ -558,16 +558,8 @@
high losses leading to RTO, but reduces PRR effectiveness in more common settings
(default is false).
.It Va rfc6675_pipe
-Calculate the bytes in flight using the algorithm described in RFC 6675, and
-is also an improvement when Proportional Rate Reduction is enabled.
-Also enables two other mechanisms from RFC6675.
-Rescue Retransmission helps timely loss recovery, when the trailing segments
-of a transmission are lost, while no additional data is ready to be sent.
-In case a partial ACK without a SACK block is received during SACK loss
-recovery, the trailing segment is immediately resent, rather than waiting
-for a Retransmission timeout.
-SACK loss recovery is also engaged, once two segments plus one byte are
-SACKed - even if no traditional duplicate ACKs were seen.
+Deprecated and superseded by
+.Va sack.revised
.It Va rfc3042
Enable the Limited Transmit algorithm as described in RFC 3042.
It helps avoid timeouts on lossy links and also when the congestion window
@@ -584,6 +576,17 @@
which allows the receiver to inform the sender about all successfully
arrived segments, allowing the sender to retransmit the missing segments
only.
+.It Va sack.revised
+Enables three updated mechanisms from RFC6675 (default is true).
+Calculate the bytes in flight using the algorithm described in RFC 6675, and
+is also an improvement when Proportional Rate Reduction is enabled.
+Next, Rescue Retransmission helps timely loss recovery, when the trailing segments
+of a transmission are lost, while no additional data is ready to be sent.
+In case a partial ACK without a SACK block is received during SACK loss
+recovery, the trailing segment is immediately resent, rather than waiting
+for a Retransmission timeout.
+Finally, SACK loss recovery is also engaged, once two segments plus one byte are
+SACKed - even if no traditional duplicate ACKs were observed.
.It Va sack.maxholes
Maximum number of SACK holes per connection.
Defaults to 128.
diff --git a/sys/netinet/cc/cc_cubic.c b/sys/netinet/cc/cc_cubic.c
--- a/sys/netinet/cc/cc_cubic.c
+++ b/sys/netinet/cc/cc_cubic.c
@@ -373,7 +373,7 @@
*
* XXXLAS: Find a way to do this without needing curack
*/
- if (V_tcp_do_rfc6675_pipe)
+ if (V_tcp_do_newsack)
pipe = tcp_compute_pipe(ccv->ccvc.tcp);
else
pipe = CCV(ccv, snd_max) - ccv->curack;
diff --git a/sys/netinet/cc/cc_htcp.c b/sys/netinet/cc/cc_htcp.c
--- a/sys/netinet/cc/cc_htcp.c
+++ b/sys/netinet/cc/cc_htcp.c
@@ -366,7 +366,7 @@
*
* XXXLAS: Find a way to do this without needing curack
*/
- if (V_tcp_do_rfc6675_pipe)
+ if (V_tcp_do_newsack)
pipe = tcp_compute_pipe(ccv->ccvc.tcp);
else
pipe = CCV(ccv, snd_max) - ccv->curack;
diff --git a/sys/netinet/cc/cc_newreno.c b/sys/netinet/cc/cc_newreno.c
--- a/sys/netinet/cc/cc_newreno.c
+++ b/sys/netinet/cc/cc_newreno.c
@@ -302,7 +302,7 @@
*
* XXXLAS: Find a way to do this without needing curack
*/
- if (V_tcp_do_rfc6675_pipe)
+ if (V_tcp_do_newsack)
pipe = tcp_compute_pipe(ccv->ccvc.tcp);
else
pipe = CCV(ccv, snd_max) - ccv->curack;
diff --git a/sys/netinet/tcp_input.c b/sys/netinet/tcp_input.c
--- a/sys/netinet/tcp_input.c
+++ b/sys/netinet/tcp_input.c
@@ -168,11 +168,6 @@
&VNET_NAME(tcp_do_newcwv), 0,
"Enable New Congestion Window Validation per RFC7661");
-VNET_DEFINE(int, tcp_do_rfc6675_pipe) = 0;
-SYSCTL_INT(_net_inet_tcp, OID_AUTO, rfc6675_pipe, CTLFLAG_VNET | CTLFLAG_RW,
- &VNET_NAME(tcp_do_rfc6675_pipe), 0,
- "Use calculated pipe/in-flight bytes per RFC 6675");
-
VNET_DEFINE(int, tcp_do_rfc3042) = 1;
SYSCTL_INT(_net_inet_tcp, OID_AUTO, rfc3042, CTLFLAG_VNET | CTLFLAG_RW,
&VNET_NAME(tcp_do_rfc3042), 0,
@@ -2595,7 +2590,7 @@
* we have less than 1/2 the original window's
* worth of data in flight.
*/
- if (V_tcp_do_rfc6675_pipe)
+ if (V_tcp_do_newsack)
awnd = tcp_compute_pipe(tp);
else
awnd = (tp->snd_nxt - tp->snd_fack) +
@@ -2612,7 +2607,7 @@
goto drop;
} else if (tp->t_dupacks == tcprexmtthresh ||
(tp->t_flags & TF_SACK_PERMIT &&
- V_tcp_do_rfc6675_pipe &&
+ V_tcp_do_newsack &&
tp->sackhint.sacked_bytes >
(tcprexmtthresh - 1) * maxseg)) {
enter_recovery:
@@ -3940,7 +3935,7 @@
* network.
*/
del_data = tp->sackhint.delivered_data;
- if (V_tcp_do_rfc6675_pipe)
+ if (V_tcp_do_newsack)
pipe = tcp_compute_pipe(tp);
else
pipe = (tp->snd_nxt - tp->snd_fack) + tp->sackhint.sack_bytes_rexmit;
diff --git a/sys/netinet/tcp_sack.c b/sys/netinet/tcp_sack.c
--- a/sys/netinet/tcp_sack.c
+++ b/sys/netinet/tcp_sack.c
@@ -130,10 +130,16 @@
SYSCTL_NODE(_net_inet_tcp, OID_AUTO, sack, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
"TCP SACK");
+
VNET_DEFINE(int, tcp_do_sack) = 1;
-#define V_tcp_do_sack VNET(tcp_do_sack)
SYSCTL_INT(_net_inet_tcp_sack, OID_AUTO, enable, CTLFLAG_VNET | CTLFLAG_RW,
- &VNET_NAME(tcp_do_sack), 0, "Enable/Disable TCP SACK support");
+ &VNET_NAME(tcp_do_sack), 0,
+ "Enable/Disable TCP SACK support");
+
+VNET_DEFINE(int, tcp_do_newsack) = 1;
+SYSCTL_INT(_net_inet_tcp_sack, OID_AUTO, revised, CTLFLAG_VNET | CTLFLAG_RW,
+ &VNET_NAME(tcp_do_newsack), 0,
+ "Use revised SACK loss recovery per RFC 6675");
VNET_DEFINE(int, tcp_sack_maxholes) = 128;
SYSCTL_INT(_net_inet_tcp_sack, OID_AUTO, maxholes, CTLFLAG_VNET | CTLFLAG_RW,
@@ -826,7 +832,7 @@
* the trailing packets of a window are lost and no further data
* is available for sending.
*/
- if ((V_tcp_do_rfc6675_pipe) &&
+ if ((V_tcp_do_newsack) &&
SEQ_LT(th->th_ack, tp->snd_recover) &&
(tp->snd_recover == tp->snd_max) &&
TAILQ_EMPTY(&tp->snd_holes) &&
diff --git a/sys/netinet/tcp_var.h b/sys/netinet/tcp_var.h
--- a/sys/netinet/tcp_var.h
+++ b/sys/netinet/tcp_var.h
@@ -846,7 +846,7 @@
VNET_DECLARE(int, tcp_do_rfc3042);
VNET_DECLARE(int, tcp_do_rfc3390);
VNET_DECLARE(int, tcp_do_rfc3465);
-VNET_DECLARE(int, tcp_do_rfc6675_pipe);
+VNET_DECLARE(int, tcp_do_newsack);
VNET_DECLARE(int, tcp_do_sack);
VNET_DECLARE(int, tcp_do_tso);
VNET_DECLARE(int, tcp_ecn_maxretries);
@@ -891,7 +891,7 @@
#define V_tcp_do_rfc3042 VNET(tcp_do_rfc3042)
#define V_tcp_do_rfc3390 VNET(tcp_do_rfc3390)
#define V_tcp_do_rfc3465 VNET(tcp_do_rfc3465)
-#define V_tcp_do_rfc6675_pipe VNET(tcp_do_rfc6675_pipe)
+#define V_tcp_do_newsack VNET(tcp_do_newsack)
#define V_tcp_do_sack VNET(tcp_do_sack)
#define V_tcp_do_tso VNET(tcp_do_tso)
#define V_tcp_ecn_maxretries VNET(tcp_ecn_maxretries)

File Metadata

Mime Type
text/plain
Expires
Mon, Jan 27, 6:19 PM (7 h, 19 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
16203876
Default Alt Text
D28702.diff (6 KB)

Event Timeline