The branch main has been updated by tuexen:

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

commit be3c59ff508204dbab9e3616dc82ed7620f05d0c
Author:     Michael Tuexen <[email protected]>
AuthorDate: 2025-10-20 21:21:47 +0000
Commit:     Michael Tuexen <[email protected]>
CommitDate: 2025-10-20 21:21:47 +0000

    UDP: let udp_pcblist() support UDP and UDP-Lite
    
    Provide the IPPROTO_UDP in the arg2 parameter of udp_pcblist() and use
    this to determine the inpcbinfo. This allows the same function to be
    used in an upcoming commit to provide the list of pcbs for UDP-Lite
    just by providing IPPROTO_UDPLITE in the arg2 parameter.
    
    Reviewed by:            rrs
    MFC after:              3 days
    Differential Revision:  https://reviews.freebsd.org/D53218
---
 sys/netinet/udp_usrreq.c | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/sys/netinet/udp_usrreq.c b/sys/netinet/udp_usrreq.c
index cea8a916679b..0a89d91dfc37 100644
--- a/sys/netinet/udp_usrreq.c
+++ b/sys/netinet/udp_usrreq.c
@@ -787,7 +787,8 @@ udplite_ctlinput(struct icmp *icmp)
 static int
 udp_pcblist(SYSCTL_HANDLER_ARGS)
 {
-       struct inpcb_iterator inpi = INP_ALL_ITERATOR(&V_udbinfo,
+       struct inpcbinfo *pcbinfo = udp_get_inpcbinfo(arg2);
+       struct inpcb_iterator inpi = INP_ALL_ITERATOR(pcbinfo,
            INPLOOKUP_RLOCKPCB);
        struct xinpgen xig;
        struct inpcb *inp;
@@ -799,7 +800,7 @@ udp_pcblist(SYSCTL_HANDLER_ARGS)
        if (req->oldptr == 0) {
                int n;
 
-               n = V_udbinfo.ipi_count;
+               n = pcbinfo->ipi_count;
                n += imax(n / 8, 10);
                req->oldidx = 2 * (sizeof xig) + n * sizeof(struct xinpcb);
                return (0);
@@ -810,8 +811,8 @@ udp_pcblist(SYSCTL_HANDLER_ARGS)
 
        bzero(&xig, sizeof(xig));
        xig.xig_len = sizeof xig;
-       xig.xig_count = V_udbinfo.ipi_count;
-       xig.xig_gen = V_udbinfo.ipi_gencnt;
+       xig.xig_count = pcbinfo->ipi_count;
+       xig.xig_gen = pcbinfo->ipi_gencnt;
        xig.xig_sogen = so_gencnt;
        error = SYSCTL_OUT(req, &xig, sizeof xig);
        if (error)
@@ -838,9 +839,9 @@ udp_pcblist(SYSCTL_HANDLER_ARGS)
                 * that something happened while we were processing this
                 * request, and it might be necessary to retry.
                 */
-               xig.xig_gen = V_udbinfo.ipi_gencnt;
+               xig.xig_gen = pcbinfo->ipi_gencnt;
                xig.xig_sogen = so_gencnt;
-               xig.xig_count = V_udbinfo.ipi_count;
+               xig.xig_count = pcbinfo->ipi_count;
                error = SYSCTL_OUT(req, &xig, sizeof xig);
        }
 
@@ -848,7 +849,7 @@ udp_pcblist(SYSCTL_HANDLER_ARGS)
 }
 
 SYSCTL_PROC(_net_inet_udp, UDPCTL_PCBLIST, pcblist,
-    CTLTYPE_OPAQUE | CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, 0,
+    CTLTYPE_OPAQUE | CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, IPPROTO_UDP,
     udp_pcblist, "S,xinpcb",
     "List of active UDP sockets");
 

Reply via email to