Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

tcp: accecn: fallback outgoing half link to non-AccECN

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>

authored by

Chia-Yu Chang and committed by
Paolo Abeni
2ed66124 4024081f

+3 -1
+3 -1
include/net/tcp_ecn.h
··· 175 175 switch (ace) { 176 176 case 0x0: 177 177 /* Invalid value */ 178 - tcp_accecn_fail_mode_set(tp, TCP_ACCECN_ACE_FAIL_RECV); 178 + if (!TCP_SKB_CB(skb)->sacked) 179 + tcp_accecn_fail_mode_set(tp, TCP_ACCECN_ACE_FAIL_RECV | 180 + TCP_ACCECN_OPT_FAIL_RECV); 179 181 break; 180 182 case 0x7: 181 183 case 0x5: