> -----Original Message----- > From: Eric Dumazet <edumazet@xxxxxxxxxx> > Sent: Wednesday, June 25, 2025 9:58 AM > To: Chia-Yu Chang (Nokia) <chia-yu.chang@xxxxxxxxxxxxxxxxxxx> > Cc: pabeni@xxxxxxxxxx; linux-doc@xxxxxxxxxxxxxxx; corbet@xxxxxxx; horms@xxxxxxxxxx; dsahern@xxxxxxxxxx; kuniyu@xxxxxxxxxx; bpf@xxxxxxxxxxxxxxx; netdev@xxxxxxxxxxxxxxx; jhs@xxxxxxxxxxxx; kuba@xxxxxxxxxx; stephen@xxxxxxxxxxxxxxxxxx; xiyou.wangcong@xxxxxxxxx; jiri@xxxxxxxxxxx; davem@xxxxxxxxxxxxx; andrew+netdev@xxxxxxx; donald.hunter@xxxxxxxxx; ast@xxxxxxxxxxx; liuhangbin@xxxxxxxxx; shuah@xxxxxxxxxx; linux-kselftest@xxxxxxxxxxxxxxx; ij@xxxxxxxxxx; ncardwell@xxxxxxxxxx; Koen De Schepper (Nokia) <koen.de_schepper@xxxxxxxxxxxxxxxxxxx>; g.white@xxxxxxxxxxxxx; ingemar.s.johansson@xxxxxxxxxxxx; mirja.kuehlewind@xxxxxxxxxxxx; cheshire@xxxxxxxxx; rs.ietf@xxxxxx; Jason_Livingood@xxxxxxxxxxx; vidhi_goel@xxxxxxxxx; Olivier Tilmans (Nokia) <olivier.tilmans@xxxxxxxxx> > Subject: Re: [PATCH v9 net-next 05/15] tcp: accecn: AccECN negotiation > > > 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 Sat, Jun 21, 2025 at 12:37 PM <chia-yu.chang@xxxxxxxxxxxxxxxxxxx> wrote: > > > > From: Ilpo Järvinen <ij@xxxxxxxxxx> > > > > Accurate ECN negotiation parts based on the specification: > > https://tools.ietf.org/id/draft-ietf-tcpm-accurate-ecn-28.txt > > [...] > > > > diff --git a/include/net/tcp.h b/include/net/tcp.h index > > 6cf5cea992e3..4d6325fa3f67 100644 > > --- a/include/net/tcp.h > > +++ b/include/net/tcp.h [...] > > @@ -1051,6 +1123,15 @@ struct tcp_skb_cb { > > > > #define TCP_SKB_CB(__skb) ((struct tcp_skb_cb *)&((__skb)->cb[0])) > > > > +static inline u16 tcp_accecn_reflector_flags(u8 ect) > > +{ > > + u32 flags = ect + 2; > > + > > + if (ect == 3) > > + flags++; > > A comment might help, I have no idea of what is going on here. Hi Eric, Sure, comments will be added in the next version. > > > + return FIELD_PREP(TCPHDR_ACE, flags); > > +} > > + > > extern const struct inet_connection_sock_af_ops ipv4_specific; > > > > #if IS_ENABLED(CONFIG_IPV6) [...] > > diff --git a/net/ipv4/sysctl_net_ipv4.c b/net/ipv4/sysctl_net_ipv4.c > > index 3a43010d726f..75ec1a599b52 100644 > > --- a/net/ipv4/sysctl_net_ipv4.c > > +++ b/net/ipv4/sysctl_net_ipv4.c > > @@ -47,6 +47,7 @@ static unsigned int udp_child_hash_entries_max = UDP_HTABLE_SIZE_MAX; > > static int tcp_plb_max_rounds = 31; > > static int tcp_plb_max_cong_thresh = 256; > > static unsigned int tcp_tw_reuse_delay_max = TCP_PAWS_MSL * MSEC_PER_SEC; > > +static int tcp_ecn_mode_max = 5; > > > > /* obsolete */ > > static int sysctl_tcp_low_latency __read_mostly; > > @@ -728,7 +729,7 @@ static struct ctl_table ipv4_net_table[] = { > > .mode = 0644, > > .proc_handler = proc_dou8vec_minmax, > > .extra1 = SYSCTL_ZERO, > > - .extra2 = SYSCTL_TWO, > > + .extra2 = &tcp_ecn_mode_max, > > Please change Documentation/networking/ip-sysctl.rst tcp_ecn accordingly ? > OK, I will break the patch of Documentation/networking/ip-sysctl.rst in this patch. > > }, > > { > > .procname = "tcp_ecn_fallback", > > diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c > > index 8e0e8d784b1c..e6d7b5420c88 100644 > > --- a/net/ipv4/tcp.c > > +++ b/net/ipv4/tcp.c > > @@ -3392,6 +3392,8 @@ int tcp_disconnect(struct sock *sk, int flags) > > tp->window_clamp = 0; > > tp->delivered = 0; > > tp->delivered_ce = 0; > > + tp->wait_third_ack = 0; > > + tp->accecn_fail_mode = 0; > > tcp_accecn_init_counters(tp); > > if (icsk->icsk_ca_initialized && icsk->icsk_ca_ops->release) > > icsk->icsk_ca_ops->release(sk); > > diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c > > index 0fa3803b353d..c986452302cb 100644 > > --- a/net/ipv4/tcp_input.c > > +++ b/net/ipv4/tcp_input.c > > @@ -411,14 +411,114 @@ static void tcp_data_ecn_check(struct sock *sk, const struct sk_buff *skb) > > } > > } > > I do think this patch is too big and should be split. I will remove the following two parts from this patch into other patches: (1) ECN negotiation in simultaneous connect, and (2) CA module flag (TCP_CONG_NEEDS_ACCECN) defines that the CA expects to negotiate AccECN functionality. Best regards, Chia-Yu