git: 6bf91573c153 - main - tcp: update repeat <SYN,ACK> with latest IP ECN info
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 07 Oct 2022 14:56:25 UTC
The branch main has been updated by rscheff:
URL: https://cgit.FreeBSD.org/src/commit/?id=6bf91573c153d48344d9eb66dd654e44ab2a1002
commit 6bf91573c153d48344d9eb66dd654e44ab2a1002
Author: Richard Scheffenegger <rscheff@FreeBSD.org>
AuthorDate: 2022-10-06 23:50:02 +0000
Commit: Richard Scheffenegger <rscheff@FreeBSD.org>
CommitDate: 2022-10-06 23:51:19 +0000
tcp: update repeat <SYN,ACK> with latest IP ECN info
When multiple <SYN> segments are received, update the <SYN,ACK>
sent in response to the latest IP ECN and TCP ECN information.
On retransmitting the <SYN,ACK>, once ECN maxtries are done, not
only disable RFC3168 ECN, but AccECN also.
Reviewed By: tuexen, #transport
Sponsored by: NetApp, Inc.
Differential Revision: https://reviews.freebsd.org/D36875
---
sys/netinet/tcp_syncache.c | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/sys/netinet/tcp_syncache.c b/sys/netinet/tcp_syncache.c
index 2f0e6236f612..ad1811fc68cd 100644
--- a/sys/netinet/tcp_syncache.c
+++ b/sys/netinet/tcp_syncache.c
@@ -514,7 +514,7 @@ syncache_timer(void *xsch)
continue;
}
if (sc->sc_rxmits > V_tcp_ecn_maxretries) {
- sc->sc_flags &= ~SCF_ECN;
+ sc->sc_flags &= ~SCF_ECN_MASK;
}
if (sc->sc_rxmits > V_tcp_syncache.rexmt_limit) {
if ((s = tcp_log_addrs(&sc->sc_inc, NULL, NULL, NULL))) {
@@ -1564,11 +1564,12 @@ syncache_add(struct in_conninfo *inc, struct tcpopt *to, struct tcphdr *th,
else
sc->sc_flags &= ~SCF_TIMESTAMP;
/*
- * Disable ECN if needed.
+ * Adjust ECN response if needed, e.g. different
+ * IP ECN field, or a fallback by the remote host.
*/
- if ((sc->sc_flags & SCF_ECN) &&
- ((tcp_get_flags(th) & (TH_ECE|TH_CWR)) != (TH_ECE|TH_CWR))) {
- sc->sc_flags &= ~SCF_ECN;
+ if (sc->sc_flags & SCF_ECN_MASK) {
+ sc->sc_flags &= ~SCF_ECN_MASK;
+ sc->sc_flags = tcp_ecn_syncache_add(tcp_get_flags(th), iptos);
}
#ifdef MAC
/*