aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Scheffenegger <rscheff@FreeBSD.org>2023-06-20 21:27:11 +0000
committerRichard Scheffenegger <rscheff@FreeBSD.org>2023-06-20 21:48:56 +0000
commit04682968c3f7993cf9c07d091c9411d38fb5540b (patch)
tree3066d64924d991780f21d3e7cb8c6e80afe89be0
parent7ea8d02798055068682e80d8791556d3f81bda82 (diff)
downloadsrc-04682968c3f7993cf9c07d091c9411d38fb5540b.tar.gz
src-04682968c3f7993cf9c07d091c9411d38fb5540b.zip
tcp: expose AccECN mode and TCP FastOpen (TFO) in TCPI
Reviewed By: tuexen, #transport Sponsored by: NetApp, Inc. Differential Revision: https://reviews.freebsd.org/D40621
-rw-r--r--sys/netinet/tcp.h1
-rw-r--r--sys/netinet/tcp_usrreq.c16
2 files changed, 15 insertions, 2 deletions
diff --git a/sys/netinet/tcp.h b/sys/netinet/tcp.h
index 3c3086eabaf4..dbafc96927b2 100644
--- a/sys/netinet/tcp.h
+++ b/sys/netinet/tcp.h
@@ -336,6 +336,7 @@ struct tcphdr {
#define TCPI_OPT_ECN 0x08
#define TCPI_OPT_TOE 0x10
#define TCPI_OPT_TFO 0x20
+#define TCPI_OPT_ACE 0x40
/* Maximum length of log ID. */
#define TCP_LOG_ID_LEN 64
diff --git a/sys/netinet/tcp_usrreq.c b/sys/netinet/tcp_usrreq.c
index a9aee98f1332..629b47f04142 100644
--- a/sys/netinet/tcp_usrreq.c
+++ b/sys/netinet/tcp_usrreq.c
@@ -1556,8 +1556,20 @@ tcp_fill_info(struct tcpcb *tp, struct tcp_info *ti)
ti->tcpi_snd_wscale = tp->snd_scale;
ti->tcpi_rcv_wscale = tp->rcv_scale;
}
- if (tp->t_flags2 & (TF2_ECN_PERMIT | TF2_ACE_PERMIT))
- ti->tcpi_options |= TCPI_OPT_ECN;
+ switch (tp->t_flags2 & (TF2_ECN_PERMIT | TF2_ACE_PERMIT)) {
+ case TF2_ECN_PERMIT:
+ ti->tcpi_options |= TCPI_OPT_ECN;
+ break;
+ case TF2_ACE_PERMIT:
+ /* FALLTHROUGH */
+ case TF2_ECN_PERMIT | TF2_ACE_PERMIT:
+ ti->tcpi_options |= TCPI_OPT_ACE;
+ break;
+ default:
+ break;
+ }
+ if (IS_FASTOPEN(tp->t_flags))
+ ti->tcpi_options |= TCPI_OPT_TFO;
ti->tcpi_rto = tp->t_rxtcur * tick;
ti->tcpi_last_data_recv = ((uint32_t)ticks - tp->t_rcvtime) * tick;