> -----Original Message-----
> From: Eric Dumazet <[email protected]> 
> Sent: Tuesday, January 20, 2026 12:05 PM
> To: Chia-Yu Chang (Nokia) <[email protected]>
> Cc: [email protected]; [email protected]; [email protected]; 
> [email protected]; [email protected]; [email protected]; [email protected]; 
> [email protected]; [email protected]; [email protected]; 
> [email protected]; [email protected]; [email protected]; 
> [email protected]; [email protected]; [email protected]; 
> [email protected]; [email protected]; [email protected]; 
> [email protected]; [email protected]; [email protected]; 
> [email protected]; [email protected]; Koen De Schepper (Nokia) 
> <[email protected]>; [email protected]; 
> [email protected]; [email protected]; cheshire 
> <[email protected]>; [email protected]; [email protected]; Vidhi Goel 
> <[email protected]>
> Subject: Re: [PATCH v9 net-next 10/15] tcp: accecn: unset ECT if receive or 
> send ACE=0 in AccECN negotiaion
> 
> 
> CAUTION: This is an external email. Please be very careful when clicking 
> links or opening attachments. See the URL nok.it/ext for additional 
> information.
> 
> 
> 
> On Mon, Jan 19, 2026 at 7:59 PM <[email protected]> wrote:
> >
> > From: Chia-Yu Chang <[email protected]>
> >
> > Based on specification:
> >   https://tools.ietf.org/id/draft-ietf-tcpm-accurate-ecn-28.txt
> >
> > Based on Section 3.1.5 of AccECN spec (RFC9768), a TCP Server in 
> > AccECN mode MUST NOT set ECT on any packet for the rest of the 
> > connection, if it has received or sent at least one valid SYN or 
> > Acceptable SYN/ACK with (AE,CWR,ECE) = (0,0,0) during the handshake.
> >
> > In addition, a host in AccECN mode that is feeding back the IP-ECN 
> > field on a SYN or SYN/ACK MUST feed back the IP-ECN field on the 
> > latest valid SYN or acceptable SYN/ACK to arrive.
> >
> > Signed-off-by: Chia-Yu Chang <[email protected]>
> >
> > ---
> > v8:
> > - Add new helper function tcp_accecn_ace_fail_send_set_retrans()
> >
> > v6:
> > - Do not cast const struct request_sock into struct request_sock
> > - Set tcp_accecn_fail_mode after calling tcp_rtx_synack().
> > ---
> >  include/net/tcp_ecn.h           |  7 +++++++
> >  net/ipv4/inet_connection_sock.c |  3 +++
> >  net/ipv4/tcp_input.c            |  2 ++
> >  net/ipv4/tcp_minisocks.c        | 36 ++++++++++++++++++++++++---------
> >  net/ipv4/tcp_output.c           |  3 ++-
> >  net/ipv4/tcp_timer.c            |  2 ++
> >  6 files changed, 42 insertions(+), 11 deletions(-)
> >
> > diff --git a/include/net/tcp_ecn.h b/include/net/tcp_ecn.h index 
> > 796c613b5ef3..f5e1f6b1bec3 100644
> > --- a/include/net/tcp_ecn.h
> > +++ b/include/net/tcp_ecn.h
> > @@ -97,6 +97,13 @@ static inline void tcp_accecn_fail_mode_set(struct 
> > tcp_sock *tp, u8 mode)
> >         tp->accecn_fail_mode |= mode;
> >  }
> >
> > +static inline void tcp_accecn_ace_fail_send_set_retrans(struct 
> > request_sock *req,
> > +                                                       struct 
> > +tcp_sock *tp) {
> > +       if (req->num_retrans > 1 && tcp_rsk(req)->accecn_ok)
> > +               tcp_accecn_fail_mode_set(tp, 
> > +TCP_ACCECN_ACE_FAIL_SEND); }
> > +
> >  #define TCP_ACCECN_OPT_NOT_SEEN                0x0
> >  #define TCP_ACCECN_OPT_EMPTY_SEEN      0x1
> >  #define TCP_ACCECN_OPT_COUNTER_SEEN    0x2
> > diff --git a/net/ipv4/inet_connection_sock.c 
> > b/net/ipv4/inet_connection_sock.c index 97d57c52b9ad..9d16cb9c3db4 
> > 100644
> > --- a/net/ipv4/inet_connection_sock.c
> > +++ b/net/ipv4/inet_connection_sock.c
> > @@ -20,6 +20,7 @@
> >  #include <net/tcp_states.h>
> >  #include <net/xfrm.h>
> >  #include <net/tcp.h>
> > +#include <net/tcp_ecn.h>
> >  #include <net/sock_reuseport.h>
> >  #include <net/addrconf.h>
> >
> > @@ -1103,6 +1104,8 @@ static void reqsk_timer_handler(struct timer_list *t)
> >             (!resend ||
> >              !tcp_rtx_synack(sk_listener, req) ||
> >              inet_rsk(req)->acked)) {
> > +               tcp_accecn_ace_fail_send_set_retrans(req,
> > +                                                    
> > + tcp_sk(sk_listener));
> 
> 
> Ouch.
> 
> I think you missed the fact that a listener is shared by many SYN_RECV 
> requests.
> 
> Consider it as read-only here.

Hi Eric,

Thanks for the feedback.
Do you mean sk_listener here is read-only despite there is no const here?

Then, could you help to suggest the way please?
Beacuse for AccECN, here we need to set fail flag after retransmitting SYN/ACK 
> 1 time.
And this was done within tcp_make_synack(), but now move to every place where 
could retransmit SYN/ACK.

Thanks.
Chia-Yu

Reply via email to