git: 5de91610cc74 - main - tcp_hostcache: limit scope of struct hc_metrics_lite and rename with tcp_ prefix

Richard Scheffenegger <[email protected]>
Newsgroups gmane.os.freebsd.devel.cvs.src
Message-ID <6a691d34.1f7b5.2170b8c3__10814.249613189$1785273685$gmane$org@gitrepo.freebsd.org>
The branch main has been updated by rscheff:

URL: https://cgit.FreeBSD.org/src/commit/?id=5de91610cc744815244c1adfe202408dbfc9dbf2

commit 5de91610cc744815244c1adfe202408dbfc9dbf2
Author:     Richard Scheffenegger <[email protected]>
AuthorDate: 2026-07-28 20:38:32 +0000
Commit:     Richard Scheffenegger <[email protected]>
CommitDate: 2026-07-28 21:13:08 +0000

    tcp_hostcache: limit scope of struct hc_metrics_lite and rename with tcp_ prefix
    
        Restrict the scope of the struct hc_metrics_lite to the kernel only.
        Update the naming to align with other kernel structures and add a tcp_ prefix.
    
    Reviewed by:            glebius
    MFC after:              2 weeks
    Sponsored by:           NetApp, Inc.
    Differential Revision:  https://reviews.freebsd.org/D58440
---
 sys/netinet/tcp_hostcache.c | 69 +++++++++++++++++++++++----------------------
 sys/netinet/tcp_input.c     | 10 +++----
 sys/netinet/tcp_subr.c      |  2 +-
 sys/netinet/tcp_var.h       | 10 ++++---
 4 files changed, 47 insertions(+), 44 deletions(-)

diff --git a/sys/netinet/tcp_hostcache.c b/sys/netinet/tcp_hostcache.c
index fbf81b1f2303..2ed035b6fd06 100644
--- a/sys/netinet/tcp_hostcache.c
+++ b/sys/netinet/tcp_hostcache.c
@@ -53,7 +53,7 @@
  * entry if a hash is full.  Value updates for an entry shall be atomic.
  *
  * TCP stack(s) communication with tcp_hostcache() is done via KBI functions
- * tcp_hc_*() and the hc_metrics_lite structure.
+ * tcp_hc_*() and the tcp_hc_metrics structure.
  *
  * Since tcp_hostcache is only caching information, there are no fatal
  * consequences if we either can't allocate a new entry or have to drop
@@ -371,12 +371,12 @@ tcp_hc_lookup(const struct in_conninfo *inc)
  */
 void
 tcp_hc_get(const struct in_conninfo *inc,
-    struct hc_metrics_lite *hc_metrics_lite)
+    struct tcp_hc_metrics *hc_metrics)
 {
 	struct hc_metrics *hc_entry;
 
 	if (!V_tcp_use_hostcache) {
-		bzero(hc_metrics_lite, sizeof(*hc_metrics_lite));
+		bzero(hc_metrics, sizeof(*hc_metrics));
 		return;
 	}
 
@@ -389,17 +389,17 @@ tcp_hc_get(const struct in_conninfo *inc,
 	 * If we don't have an existing object.
 	 */
 	if (hc_entry == NULL) {
-		bzero(hc_metrics_lite, sizeof(*hc_metrics_lite));
+		bzero(hc_metrics, sizeof(*hc_metrics));
 		return;
 	}
 
-	hc_metrics_lite->hc_mtu = atomic_load_32(&hc_entry->hc_mtu);
-	hc_metrics_lite->hc_ssthresh = atomic_load_32(&hc_entry->hc_ssthresh);
-	hc_metrics_lite->hc_rtt = atomic_load_32(&hc_entry->hc_rtt);
-	hc_metrics_lite->hc_rttvar = atomic_load_32(&hc_entry->hc_rttvar);
-	hc_metrics_lite->hc_cwnd = atomic_load_32(&hc_entry->hc_cwnd);
-	hc_metrics_lite->hc_sendpipe = atomic_load_32(&hc_entry->hc_sendpipe);
-	hc_metrics_lite->hc_recvpipe = atomic_load_32(&hc_entry->hc_recvpipe);
+	hc_metrics->hc_mtu = atomic_load_32(&hc_entry->hc_mtu);
+	hc_metrics->hc_ssthresh = atomic_load_32(&hc_entry->hc_ssthresh);
+	hc_metrics->hc_rtt = atomic_load_32(&hc_entry->hc_rtt);
+	hc_metrics->hc_rttvar = atomic_load_32(&hc_entry->hc_rttvar);
+	hc_metrics->hc_cwnd = atomic_load_32(&hc_entry->hc_cwnd);
+	hc_metrics->hc_sendpipe = atomic_load_32(&hc_entry->hc_sendpipe);
+	hc_metrics->hc_recvpipe = atomic_load_32(&hc_entry->hc_recvpipe);
 
 	smr_exit(V_tcp_hostcache.smr);
 }
@@ -436,9 +436,9 @@ tcp_hc_getmtu(const struct in_conninfo *inc)
 void
 tcp_hc_updatemtu(const struct in_conninfo *inc, uint32_t mtu)
 {
-	struct hc_metrics_lite hcml = { .hc_mtu = mtu };
+	struct tcp_hc_metrics hcm = { .hc_mtu = mtu };
 
-	return (tcp_hc_update(inc, &hcml));
+	return (tcp_hc_update(inc, &hcm));
 }
 
 /*
@@ -446,7 +446,7 @@ tcp_hc_updatemtu(const struct in_conninfo *inc, uint32_t mtu)
  * Creates a new entry if none was found.
  */
 void
-tcp_hc_update(const struct in_conninfo *inc, struct hc_metrics_lite *hcml)
+tcp_hc_update(const struct in_conninfo *inc, struct tcp_hc_metrics *hcm)
 {
 	struct hc_head *hc_head;
 	struct hc_metrics *hc_entry, *hc_prev;
@@ -543,59 +543,60 @@ tcp_hc_update(const struct in_conninfo *inc, struct hc_metrics_lite *hcml)
 	 * Fill in data.  Use atomics, since an existing entry is
 	 * accessible by readers in SMR section.
 	 */
-	if (hcml->hc_mtu != 0) {
-		atomic_store_32(&hc_entry->hc_mtu, hcml->hc_mtu);
+	if (hcm->hc_mtu != 0) {
+		atomic_store_32(&hc_entry->hc_mtu, hcm->hc_mtu);
 	}
-	if (hcml->hc_rtt != 0) {
+	if (hcm->hc_rtt != 0) {
 		if (hc_entry->hc_rtt == 0)
-			v = hcml->hc_rtt;
+			v = hcm->hc_rtt;
 		else
 			v = ((uint64_t)hc_entry->hc_rtt +
-			    (uint64_t)hcml->hc_rtt) / 2;
+			    (uint64_t)hcm->hc_rtt) / 2;
 		atomic_store_32(&hc_entry->hc_rtt, v);
 		TCPSTAT_INC(tcps_cachedrtt);
 	}
-	if (hcml->hc_rttvar != 0) {
+	if (hcm->hc_rttvar != 0) {
 	        if (hc_entry->hc_rttvar == 0)
-			v = hcml->hc_rttvar;
+			v = hcm->hc_rttvar;
 		else
 			v = ((uint64_t)hc_entry->hc_rttvar +
-			    (uint64_t)hcml->hc_rttvar) / 2;
+			    (uint64_t)hcm->hc_rttvar) / 2;
 		atomic_store_32(&hc_entry->hc_rttvar, v);
 		TCPSTAT_INC(tcps_cachedrttvar);
 	}
-	if (hcml->hc_ssthresh != 0) {
+	if (hcm->hc_ssthresh != 0) {
 		if (hc_entry->hc_ssthresh == 0)
-			v = hcml->hc_ssthresh;
+			v = hcm->hc_ssthresh;
 		else
-			v = (hc_entry->hc_ssthresh + hcml->hc_ssthresh) / 2;
+			v = (hc_entry->hc_ssthresh +
+			    hcm->hc_ssthresh) / 2;
 		atomic_store_32(&hc_entry->hc_ssthresh, v);
 		TCPSTAT_INC(tcps_cachedssthresh);
 	}
-	if (hcml->hc_cwnd != 0) {
+	if (hcm->hc_cwnd != 0) {
 		if (hc_entry->hc_cwnd == 0)
-			v = hcml->hc_cwnd;
+			v = hcm->hc_cwnd;
 		else
 			v = ((uint64_t)hc_entry->hc_cwnd +
-			    (uint64_t)hcml->hc_cwnd) / 2;
+			    (uint64_t)hcm->hc_cwnd) / 2;
 		atomic_store_32(&hc_entry->hc_cwnd, v);
 		/* TCPSTAT_INC(tcps_cachedcwnd); */
 	}
-	if (hcml->hc_sendpipe != 0) {
+	if (hcm->hc_sendpipe != 0) {
 		if (hc_entry->hc_sendpipe == 0)
-			v = hcml->hc_sendpipe;
+			v = hcm->hc_sendpipe;
 		else
 			v = ((uint64_t)hc_entry->hc_sendpipe +
-			    (uint64_t)hcml->hc_sendpipe) /2;
+			    (uint64_t)hcm->hc_sendpipe) / 2;
 		atomic_store_32(&hc_entry->hc_sendpipe, v);
 		/* TCPSTAT_INC(tcps_cachedsendpipe); */
 	}
-	if (hcml->hc_recvpipe != 0) {
+	if (hcm->hc_recvpipe != 0) {
 		if (hc_entry->hc_recvpipe == 0)
-			v = hcml->hc_recvpipe;
+			v = hcm->hc_recvpipe;
 		else
 			v = ((uint64_t)hc_entry->hc_recvpipe +
-			    (uint64_t)hcml->hc_recvpipe) /2;
+			    (uint64_t)hcm->hc_recvpipe) / 2;
 		atomic_store_32(&hc_entry->hc_recvpipe, v);
 		/* TCPSTAT_INC(tcps_cachedrecvpipe); */
 	}
diff --git a/sys/netinet/tcp_input.c b/sys/netinet/tcp_input.c
index 37706343d621..bfef374af2d9 100644
--- a/sys/netinet/tcp_input.c
+++ b/sys/netinet/tcp_input.c
@@ -359,7 +359,7 @@ cc_ack_received(struct tcpcb *tp, struct tcphdr *th, uint16_t nsegs,
 void
 cc_conn_init(struct tcpcb *tp)
 {
-	struct hc_metrics_lite metrics;
+	struct tcp_hc_metrics metrics;
 	struct inpcb *inp = tptoinpcb(tp);
 	u_int maxseg;
 	int rtt;
@@ -3714,12 +3714,12 @@ tcp_xmit_timer(struct tcpcb *tp, int rtt)
  */
 void
 tcp_mss_update(struct tcpcb *tp, int offer, int mtuoffer,
-    struct hc_metrics_lite *metricptr, struct tcp_ifcap *cap)
+    struct tcp_hc_metrics *metricptr, struct tcp_ifcap *cap)
 {
 	int mss = 0;
 	uint32_t maxmtu = 0;
 	struct inpcb *inp = tptoinpcb(tp);
-	struct hc_metrics_lite metrics;
+	struct tcp_hc_metrics metrics;
 #ifdef INET6
 	int isipv6 = ((inp->inp_vflag & INP_IPV6) != 0) ? 1 : 0;
 	size_t min_protoh = isipv6 ?
@@ -3765,7 +3765,7 @@ tcp_mss_update(struct tcpcb *tp, int offer, int mtuoffer,
 		 * if there was no cache hit.
 		 */
 		if (metricptr != NULL)
-			bzero(metricptr, sizeof(struct hc_metrics_lite));
+			bzero(metricptr, sizeof(struct tcp_hc_metrics));
 		return;
 	}
 
@@ -3876,7 +3876,7 @@ tcp_mss(struct tcpcb *tp, int offer)
 	uint32_t bufsize;
 	struct inpcb *inp = tptoinpcb(tp);
 	struct socket *so;
-	struct hc_metrics_lite metrics;
+	struct tcp_hc_metrics metrics;
 	struct tcp_ifcap cap;
 
 	KASSERT(tp != NULL, ("%s: tp == NULL", __func__));
diff --git a/sys/netinet/tcp_subr.c b/sys/netinet/tcp_subr.c
index 7c56a7a77cb5..af381b0b4102 100644
--- a/sys/netinet/tcp_subr.c
+++ b/sys/netinet/tcp_subr.c
@@ -2479,7 +2479,7 @@ tcp_discardcb(struct tcpcb *tp)
 	 * say srtt etc into the general one used by other stacks.
 	 */
 	if (tp->t_rttupdated >= 4) {
-		struct hc_metrics_lite metrics;
+		struct tcp_hc_metrics metrics;
 		uint32_t ssthresh;
 
 		bzero(&metrics, sizeof(metrics));
diff --git a/sys/netinet/tcp_var.h b/sys/netinet/tcp_var.h
index fa8fdb570897..4f1e8fa9fd49 100644
--- a/sys/netinet/tcp_var.h
+++ b/sys/netinet/tcp_var.h
@@ -906,7 +906,8 @@ struct tcpopt {
  */
 #define	TO_SYN		0x01		/* parse SYN-only options */
 
-struct hc_metrics_lite {	/* must stay in sync with hc_metrics */
+#ifdef _KERNEL
+struct tcp_hc_metrics {
 	uint32_t	hc_mtu;		/* MTU for this path */
 	uint32_t	hc_ssthresh;	/* outbound gateway buffer limit */
 	uint32_t	hc_rtt;		/* estimated round trip time */
@@ -915,6 +916,7 @@ struct hc_metrics_lite {	/* must stay in sync with hc_metrics */
 	uint32_t	hc_sendpipe;	/* outbound delay-bandwidth product */
 	uint32_t	hc_recvpipe;	/* inbound delay-bandwidth product */
 };
+#endif	/* _KERNEL */
 
 #ifndef _NETINET_IN_PCB_H_
 struct in_conninfo;
@@ -1480,7 +1482,7 @@ uint32_t tcp_maxmtu6(struct in_conninfo *, struct tcp_ifcap *);
 void	 tcp6_use_min_mtu(struct tcpcb *);
 u_int	 tcp_maxseg(const struct tcpcb *);
 u_int	 tcp_fixed_maxseg(const struct tcpcb *);
-void	 tcp_mss_update(struct tcpcb *, int, int, struct hc_metrics_lite *,
+void	 tcp_mss_update(struct tcpcb *, int, int, struct tcp_hc_metrics *,
 	    struct tcp_ifcap *);
 void	 tcp_mss(struct tcpcb *, int);
 int	 tcp_mssopt(struct in_conninfo *);
@@ -1510,10 +1512,10 @@ void	 tcp_hc_init(void);
 #ifdef VIMAGE
 void	 tcp_hc_destroy(void);
 #endif
-void	 tcp_hc_get(const struct in_conninfo *, struct hc_metrics_lite *);
+void	 tcp_hc_get(const struct in_conninfo *, struct tcp_hc_metrics *);
 uint32_t tcp_hc_getmtu(const struct in_conninfo *);
 void	 tcp_hc_updatemtu(const struct in_conninfo *, uint32_t);
-void	 tcp_hc_update(const struct in_conninfo *, struct hc_metrics_lite *);
+void	 tcp_hc_update(const struct in_conninfo *, struct tcp_hc_metrics *);
 void 	 cc_after_idle(struct tcpcb *tp);
 
 extern	struct protosw tcp_protosw;		/* shared for TOE */
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.