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 */

Reply via email to