summaryrefslogtreecommitdiff
path: root/include/linux
diff options
context:
space:
mode:
authorPaolo Abeni <pabeni@redhat.com>2026-02-03 15:13:30 +0100
committerPaolo Abeni <pabeni@redhat.com>2026-02-03 15:13:31 +0100
commit667539f6dce27aa7db0a711375f94e14e714a698 (patch)
treeb2d27d10227c9b688f9467ac7549e336cff4897b /include/linux
parent72163a19093193e71755d8a2f26b2fdde6aea671 (diff)
parentf85d9c45f1d48a146f37cfd3d244aac4157ea390 (diff)
Merge branch 'accecn-protocol-case-handling-series'
Chia-Yu Chang says: ==================== AccECN protocol case handling series Plesae find the v13 AccECN case handling patch series, which covers several excpetional case handling of Accurate ECN spec (RFC9768), adds new identifiers to be used by CC modules, adds ecn_delta into rate_sample, and keeps the ACE counter for computation, etc. This patch series is part of the full AccECN patch series, which is at https://github.com/L4STeam/linux-net-next/commits/upstream_l4steam/ --- Chia-Yu Chang (13): selftests/net: gro: add self-test for TCP CWR flag tcp: ECT_1_NEGOTIATION and NEEDS_ACCECN identifiers tcp: disable RFC3168 fallback identifier for CC modules tcp: accecn: handle unexpected AccECN negotiation feedback tcp: accecn: retransmit downgraded SYN in AccECN negotiation tcp: add TCP_SYNACK_RETRANS synack_type tcp: accecn: retransmit SYN/ACK without AccECN option or non-AccECN SYN/ACK tcp: accecn: unset ECT if receive or send ACE=0 in AccECN negotiaion tcp: accecn: fallback outgoing half link to non-AccECN tcp: accecn: detect loss ACK w/ AccECN option and add TCP_ACCECN_OPTION_PERSIST tcp: accecn: add tcpi_ecn_mode and tcpi_option2 in tcp_info tcp: accecn: enable AccECN selftests/net: packetdrill: add TCP Accurate ECN cases Ilpo Järvinen (2): tcp: try to avoid safer when ACKs are thinned gro: flushing when CWR is set negatively affects AccECN Documentation/networking/ip-sysctl.rst | 4 +- .../networking/net_cachelines/tcp_sock.rst | 1 + include/linux/tcp.h | 4 +- include/net/inet_ecn.h | 20 +++- include/net/tcp.h | 32 +++++- include/net/tcp_ecn.h | 103 ++++++++++++------ include/uapi/linux/tcp.h | 26 ++++- net/ipv4/inet_connection_sock.c | 3 + net/ipv4/sysctl_net_ipv4.c | 4 +- net/ipv4/tcp.c | 10 ++ net/ipv4/tcp_cong.c | 5 +- net/ipv4/tcp_input.c | 40 ++++++- net/ipv4/tcp_minisocks.c | 43 +++++--- net/ipv4/tcp_offload.c | 3 +- net/ipv4/tcp_output.c | 34 ++++-- net/ipv4/tcp_timer.c | 3 + tools/testing/selftests/drivers/net/gro.c | 81 ++++++++++---- tools/testing/selftests/drivers/net/gro.py | 3 +- .../tcp_accecn_2nd_data_as_first.pkt | 24 ++++ .../tcp_accecn_2nd_data_as_first_connect.pkt | 30 +++++ .../tcp_accecn_3rd_ack_after_synack_rxmt.pkt | 19 ++++ ..._accecn_3rd_ack_ce_updates_received_ce.pkt | 18 +++ .../tcp_accecn_3rd_ack_lost_data_ce.pkt | 22 ++++ .../net/packetdrill/tcp_accecn_3rd_dups.pkt | 26 +++++ .../tcp_accecn_acc_ecn_disabled.pkt | 13 +++ .../tcp_accecn_accecn_then_notecn_syn.pkt | 28 +++++ .../tcp_accecn_accecn_to_rfc3168.pkt | 18 +++ .../tcp_accecn_client_accecn_options_drop.pkt | 34 ++++++ .../tcp_accecn_client_accecn_options_lost.pkt | 38 +++++++ .../tcp_accecn_clientside_disabled.pkt | 12 ++ ...cecn_close_local_close_then_remote_fin.pkt | 25 +++++ .../tcp_accecn_delivered_2ndlargeack.pkt | 25 +++++ ..._accecn_delivered_falseoverflow_detect.pkt | 31 ++++++ .../tcp_accecn_delivered_largeack.pkt | 24 ++++ .../tcp_accecn_delivered_largeack2.pkt | 25 +++++ .../tcp_accecn_delivered_maxack.pkt | 25 +++++ .../tcp_accecn_delivered_updates.pkt | 70 ++++++++++++ .../net/packetdrill/tcp_accecn_ecn3.pkt | 12 ++ .../tcp_accecn_ecn_field_updates_opt.pkt | 35 ++++++ .../packetdrill/tcp_accecn_ipflags_drop.pkt | 14 +++ .../tcp_accecn_listen_opt_drop.pkt | 16 +++ .../tcp_accecn_multiple_syn_ack_drop.pkt | 28 +++++ .../tcp_accecn_multiple_syn_drop.pkt | 18 +++ .../tcp_accecn_negotiation_bleach.pkt | 23 ++++ .../tcp_accecn_negotiation_connect.pkt | 23 ++++ .../tcp_accecn_negotiation_listen.pkt | 26 +++++ .../tcp_accecn_negotiation_noopt_connect.pkt | 23 ++++ .../tcp_accecn_negotiation_optenable.pkt | 23 ++++ .../tcp_accecn_no_ecn_after_accecn.pkt | 20 ++++ .../net/packetdrill/tcp_accecn_noopt.pkt | 27 +++++ .../net/packetdrill/tcp_accecn_noprogress.pkt | 27 +++++ .../tcp_accecn_notecn_then_accecn_syn.pkt | 28 +++++ .../tcp_accecn_rfc3168_to_fallback.pkt | 18 +++ .../tcp_accecn_rfc3168_to_rfc3168.pkt | 18 +++ .../tcp_accecn_sack_space_grab.pkt | 28 +++++ .../tcp_accecn_sack_space_grab_with_ts.pkt | 39 +++++++ ...tcp_accecn_serverside_accecn_disabled1.pkt | 20 ++++ ...tcp_accecn_serverside_accecn_disabled2.pkt | 20 ++++ .../tcp_accecn_serverside_broken.pkt | 19 ++++ .../tcp_accecn_serverside_ecn_disabled.pkt | 19 ++++ .../tcp_accecn_serverside_only.pkt | 18 +++ ...n_syn_ace_flags_acked_after_retransmit.pkt | 18 +++ .../tcp_accecn_syn_ace_flags_drop.pkt | 16 +++ ...n_ack_ace_flags_acked_after_retransmit.pkt | 27 +++++ .../tcp_accecn_syn_ack_ace_flags_drop.pkt | 26 +++++ .../net/packetdrill/tcp_accecn_syn_ce.pkt | 13 +++ .../net/packetdrill/tcp_accecn_syn_ect0.pkt | 13 +++ .../net/packetdrill/tcp_accecn_syn_ect1.pkt | 13 +++ .../net/packetdrill/tcp_accecn_synack_ce.pkt | 27 +++++ ..._accecn_synack_ce_updates_delivered_ce.pkt | 22 ++++ .../packetdrill/tcp_accecn_synack_ect0.pkt | 24 ++++ .../packetdrill/tcp_accecn_synack_ect1.pkt | 24 ++++ .../packetdrill/tcp_accecn_synack_rexmit.pkt | 15 +++ .../packetdrill/tcp_accecn_synack_rxmt.pkt | 25 +++++ .../packetdrill/tcp_accecn_tsnoprogress.pkt | 26 +++++ .../net/packetdrill/tcp_accecn_tsprogress.pkt | 25 +++++ 76 files changed, 1680 insertions(+), 102 deletions(-) create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_2nd_data_as_first.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_2nd_data_as_first_connect.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_3rd_ack_after_synack_rxmt.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_3rd_ack_ce_updates_received_ce.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_3rd_ack_lost_data_ce.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_3rd_dups.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_acc_ecn_disabled.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_accecn_then_notecn_syn.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_accecn_to_rfc3168.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_client_accecn_options_drop.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_client_accecn_options_lost.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_clientside_disabled.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_close_local_close_then_remote_fin.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_delivered_2ndlargeack.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_delivered_falseoverflow_detect.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_delivered_largeack.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_delivered_largeack2.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_delivered_maxack.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_delivered_updates.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_ecn3.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_ecn_field_updates_opt.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_ipflags_drop.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_listen_opt_drop.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_multiple_syn_ack_drop.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_multiple_syn_drop.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_negotiation_bleach.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_negotiation_connect.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_negotiation_listen.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_negotiation_noopt_connect.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_negotiation_optenable.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_no_ecn_after_accecn.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_noopt.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_noprogress.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_notecn_then_accecn_syn.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_rfc3168_to_fallback.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_rfc3168_to_rfc3168.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_sack_space_grab.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_sack_space_grab_with_ts.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_serverside_accecn_disabled1.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_serverside_accecn_disabled2.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_serverside_broken.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_serverside_ecn_disabled.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_serverside_only.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_syn_ace_flags_acked_after_retransmit.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_syn_ace_flags_drop.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_syn_ack_ace_flags_acked_after_retransmit.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_syn_ack_ace_flags_drop.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_syn_ce.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_syn_ect0.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_syn_ect1.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_synack_ce.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_synack_ce_updates_delivered_ce.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_synack_ect0.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_synack_ect1.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_synack_rexmit.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_synack_rxmt.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_tsnoprogress.pkt create mode 100644 tools/testing/selftests/net/packetdrill/tcp_accecn_tsprogress.pkt ==================== Link: https://patch.msgid.link/20260131222515.8485-1-chia-yu.chang@nokia-bell-labs.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/tcp.h4
1 files changed, 3 insertions, 1 deletions
diff --git a/include/linux/tcp.h b/include/linux/tcp.h
index 367b491ddf97..f72eef31fa23 100644
--- a/include/linux/tcp.h
+++ b/include/linux/tcp.h
@@ -291,7 +291,8 @@ struct tcp_sock {
u8 nonagle : 4,/* Disable Nagle algorithm? */
rate_app_limited:1; /* rate_{delivered,interval_us} limited? */
u8 received_ce_pending:4, /* Not yet transmit cnt of received_ce */
- unused2:4;
+ accecn_opt_sent_w_dsack:1,/* Sent ACCECN opt in previous ACK w/ D-SACK */
+ unused2:3;
u8 accecn_minlen:2,/* Minimum length of AccECN option sent */
est_ecnfield:2,/* ECN field for AccECN delivered estimates */
accecn_opt_demand:2,/* Demand AccECN option for n next ACKs */
@@ -342,6 +343,7 @@ struct tcp_sock {
u32 rate_interval_us; /* saved rate sample: time elapsed */
u32 rcv_rtt_last_tsecr;
u32 delivered_ecn_bytes[3];
+ u16 pkts_acked_ewma;/* Pkts acked EWMA for AccECN cep heuristic */
u64 first_tx_mstamp; /* start of window send phase */
u64 delivered_mstamp; /* time we reached "delivered" */
u64 bytes_acked; /* RFC4898 tcpEStatsAppHCThruOctetsAcked