]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
tcp: accecn: fallback outgoing half link to non-AccECN
authorChia-Yu Chang <chia-yu.chang@nokia-bell-labs.com>
Sat, 31 Jan 2026 22:25:11 +0000 (23:25 +0100)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 3 Feb 2026 14:13:25 +0000 (15:13 +0100)
According to Section 3.2.2.1 of AccECN spec (RFC9768), if the Server
is in AccECN mode and in SYN-RCVD state, and if it receives a value of
zero on a pure ACK with SYN=0 and no SACK blocks, for the rest of the
connection the Server MUST NOT set ECT on outgoing packets and MUST
NOT respond to AccECN feedback. Nonetheless, as a Data Receiver it
MUST NOT disable AccECN feedback.

Signed-off-by: Chia-Yu Chang <chia-yu.chang@nokia-bell-labs.com>
Acked-by: Paolo Abeni <pabeni@redhat.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Link: https://patch.msgid.link/20260131222515.8485-12-chia-yu.chang@nokia-bell-labs.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
include/net/tcp_ecn.h

index 796c613b5ef31242c639c03789af37c8c1dfc2f7..49e0b865fe028026a302d513633c809b86b926b7 100644 (file)
@@ -175,7 +175,9 @@ static inline void tcp_accecn_third_ack(struct sock *sk,
        switch (ace) {
        case 0x0:
                /* Invalid value */
-               tcp_accecn_fail_mode_set(tp, TCP_ACCECN_ACE_FAIL_RECV);
+               if (!TCP_SKB_CB(skb)->sacked)
+                       tcp_accecn_fail_mode_set(tp, TCP_ACCECN_ACE_FAIL_RECV |
+                                                    TCP_ACCECN_OPT_FAIL_RECV);
                break;
        case 0x7:
        case 0x5: