On Mon, Jan 19, 2026 at 7:59 PM <[email protected]> wrote:
>
> From: Chia-Yu Chang <[email protected]>
>
> Add 2-bit tcpi_ecn_mode feild within tcp_info to indicate which ECN
> mode is negotiated: ECN_MODE_DISABLED, ECN_MODE_RFC3168, ECN_MODE_ACCECN,
> or ECN_MODE_PENDING. This is done by utilizing available bits from
> tcpi_accecn_opt_seen (reduced from 16 bits to 2 bits) and
> tcpi_accecn_fail_mode (reduced from 16 bits to 4 bits).
>
> Also, an extra 24-bit tcpi_options2 field is identified to represent
> newer options and connection features, as all 8 bits of tcpi_options
> field have been used.
>
> Signed-off-by: Chia-Yu Chang <[email protected]>
> Co-developed-by: Neal Cardwell <[email protected]>
> Signed-off-by: Neal Cardwell <[email protected]>
Are you sure Neal Cardwell really is ok with this patch, saw it and
gave his SOB ?
> ---
> struct tcp_info {
> __u8 tcpi_state;
> __u8 tcpi_ca_state;
> @@ -316,15 +334,17 @@ struct tcp_info {
> * in milliseconds, including any
> * unfinished recovery.
> */
> - __u32 tcpi_received_ce; /* # of CE marks received */
> + __u32 tcpi_ecn_mode:2,
> + tcpi_accecn_opt_seen:2,
> + tcpi_accecn_fail_mode:4,
> + tcpi_options2:24;
> + __u32 tcpi_received_ce; /* # of CE marked segments received */
> __u32 tcpi_delivered_e1_bytes; /* Accurate ECN byte counters */
> __u32 tcpi_delivered_e0_bytes;
> __u32 tcpi_delivered_ce_bytes;
> __u32 tcpi_received_e1_bytes;
> __u32 tcpi_received_e0_bytes;
> __u32 tcpi_received_ce_bytes;
> - __u16 tcpi_accecn_fail_mode;
> - __u16 tcpi_accecn_opt_seen;
> };
tcp_info is ABI.
We can not add/remove fields in the middle.
You must add fields at the end of it only.