Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F108594637
D28702.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
6 KB
Referenced Files
None
Subscribers
None
D28702.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D28702: Rename rfc6675_pipe to sack.revised, and enable by default
Attached
Detach File
Event Timeline
Log In to Comment