Message ID | 20250416091538.7902-1-jgh@exim.org (mailing list archive) |
---|---|
State | New |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | TCP: Fast-Open observability | expand |
From: Jeremy Harris <jgh@exim.org> Date: Wed, 16 Apr 2025 10:15:38 +0100 > Signed-off-by: Jeremy Harris <jgh@exim.org> > --- > include/uapi/linux/tcp.h | 1 + > net/ipv4/tcp.c | 2 ++ > 2 files changed, 3 insertions(+) > > diff --git a/include/uapi/linux/tcp.h b/include/uapi/linux/tcp.h > index dc8fdc80e16b..ae8c5a8af0e5 100644 > --- a/include/uapi/linux/tcp.h > +++ b/include/uapi/linux/tcp.h > @@ -184,6 +184,7 @@ enum tcp_fastopen_client_fail { > #define TCPI_OPT_ECN_SEEN 16 /* we received at least one packet with ECT */ > #define TCPI_OPT_SYN_DATA 32 /* SYN-ACK acked data in SYN sent or rcvd */ > #define TCPI_OPT_USEC_TS 64 /* usec timestamps */ > +#define TCPI_OPT_TFO_SEEN 128 /* we accepted a Fast Open option on SYN */ This is the last bit of tcpi_options. We can add another field at the end of the struct if necessary in the future, but from the cover letter and commit message, I didn't get why this info is needed at per-socket granurality. Also, This can be retrieved with BPF. > > /* > * Sender's congestion state indicating normal or abnormal situations > diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c > index e0e96f8fd47c..b45eb7cb2909 100644 > --- a/net/ipv4/tcp.c > +++ b/net/ipv4/tcp.c > @@ -4164,6 +4164,8 @@ void tcp_get_info(struct sock *sk, struct tcp_info *info) > info->tcpi_options |= TCPI_OPT_SYN_DATA; > if (tp->tcp_usec_ts) > info->tcpi_options |= TCPI_OPT_USEC_TS; > + if (tp->syn_fastopen_in) > + info->tcpi_options |= TCPI_OPT_TFO_SEEN; > > info->tcpi_rto = jiffies_to_usecs(icsk->icsk_rto); > info->tcpi_ato = jiffies_to_usecs(min_t(u32, icsk->icsk_ack.ato, > -- > 2.49.0
On 2025/04/16 8:26 PM, Kuniyuki Iwashima wrote: >> +#define TCPI_OPT_TFO_SEEN 128 /* we accepted a Fast Open option on SYN */ > > This is the last bit of tcpi_options. > > We can add another field at the end of the struct if necessary in > the future, but from the cover letter and commit message, I didn't > get why this info is needed at per-socket granurality. An application is operating at socket granularity. The provision is so that an application can tell what is going on with each one of its comms channels independently, rather than (for instance) the rolled-up information on the entire system that the existing statistics counter offers. > Also, This can be retrieved with BPF. If I understand correctly, BPF is aimed at sysadminss probing or modifying system operations rather than production use by an application. While your point is true, I don't think BPF is a good fit.
diff --git a/include/uapi/linux/tcp.h b/include/uapi/linux/tcp.h index dc8fdc80e16b..ae8c5a8af0e5 100644 --- a/include/uapi/linux/tcp.h +++ b/include/uapi/linux/tcp.h @@ -184,6 +184,7 @@ enum tcp_fastopen_client_fail { #define TCPI_OPT_ECN_SEEN 16 /* we received at least one packet with ECT */ #define TCPI_OPT_SYN_DATA 32 /* SYN-ACK acked data in SYN sent or rcvd */ #define TCPI_OPT_USEC_TS 64 /* usec timestamps */ +#define TCPI_OPT_TFO_SEEN 128 /* we accepted a Fast Open option on SYN */ /* * Sender's congestion state indicating normal or abnormal situations diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index e0e96f8fd47c..b45eb7cb2909 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -4164,6 +4164,8 @@ void tcp_get_info(struct sock *sk, struct tcp_info *info) info->tcpi_options |= TCPI_OPT_SYN_DATA; if (tp->tcp_usec_ts) info->tcpi_options |= TCPI_OPT_USEC_TS; + if (tp->syn_fastopen_in) + info->tcpi_options |= TCPI_OPT_TFO_SEEN; info->tcpi_rto = jiffies_to_usecs(icsk->icsk_rto); info->tcpi_ato = jiffies_to_usecs(min_t(u32, icsk->icsk_ack.ato,
Signed-off-by: Jeremy Harris <jgh@exim.org> --- include/uapi/linux/tcp.h | 1 + net/ipv4/tcp.c | 2 ++ 2 files changed, 3 insertions(+)