On Sat, Aug 13, 2022 at 09:28:46PM +0200, Alexander Bluhm wrote:
> On Sat, Aug 13, 2022 at 09:58:16PM +0300, Vitaliy Makkoveev wrote:
> > I propose to commit pru_*() hunks first.
> 
> OK bluhm@
> 

The pr_usrreqs hunks. I replaced spaces by tab within `routesw'
structure.

> These are two mechanical steps.  pru_*() wrappers and pr_usrreqs.
> Only one of them would be easier to review.  But anyway, I looked
> at both of them.
> 
> > @@ -2408,9 +2414,7 @@ const struct protosw routesw[] = {
> >    .pr_flags        = PR_ATOMIC|PR_ADDR|PR_WANTRCVD,
> >    .pr_output       = route_output,
> >    .pr_ctloutput    = route_ctloutput,
> > -  .pr_usrreq       = route_usrreq,
> > -  .pr_attach       = route_attach,
> > -  .pr_detach       = route_detach,
> > +  .pr_usrreqs   = &route_usrreqs,
> >    .pr_init = route_prinit,
> >    .pr_sysctl       = sysctl_rtable
> 
> All the others have a TAB after .pr_usrreqs.



Index: sys/kern/uipc_proto.c
===================================================================
RCS file: /cvs/src/sys/kern/uipc_proto.c,v
retrieving revision 1.22
diff -u -p -r1.22 uipc_proto.c
--- sys/kern/uipc_proto.c       25 Feb 2022 23:51:03 -0000      1.22
+++ sys/kern/uipc_proto.c       13 Aug 2022 21:59:52 -0000
@@ -50,27 +50,21 @@ const struct protosw unixsw[] = {
   .pr_domain   = &unixdomain,
   .pr_protocol = PF_UNIX,
   .pr_flags    = PR_CONNREQUIRED|PR_WANTRCVD|PR_RIGHTS,
-  .pr_usrreq   = uipc_usrreq,
-  .pr_attach   = uipc_attach,
-  .pr_detach   = uipc_detach,
+  .pr_usrreqs  = &uipc_usrreqs,
 },
 {
   .pr_type     = SOCK_SEQPACKET,
   .pr_domain   = &unixdomain,
   .pr_protocol = PF_UNIX,
   .pr_flags    = PR_ATOMIC|PR_CONNREQUIRED|PR_WANTRCVD|PR_RIGHTS,
-  .pr_usrreq   = uipc_usrreq,
-  .pr_attach   = uipc_attach,
-  .pr_detach   = uipc_detach,
+  .pr_usrreqs  = &uipc_usrreqs,
 },
 {
   .pr_type     = SOCK_DGRAM,
   .pr_domain   = &unixdomain,
   .pr_protocol = PF_UNIX,
   .pr_flags    = PR_ATOMIC|PR_ADDR|PR_RIGHTS,
-  .pr_usrreq   = uipc_usrreq,
-  .pr_attach   = uipc_attach,
-  .pr_detach   = uipc_detach,
+  .pr_usrreqs  = &uipc_usrreqs,
 }
 };
 
Index: sys/kern/uipc_socket.c
===================================================================
RCS file: /cvs/src/sys/kern/uipc_socket.c,v
retrieving revision 1.281
diff -u -p -r1.281 uipc_socket.c
--- sys/kern/uipc_socket.c      13 Aug 2022 21:01:46 -0000      1.281
+++ sys/kern/uipc_socket.c      13 Aug 2022 21:59:52 -0000
@@ -172,7 +172,7 @@ socreate(int dom, struct socket **aso, i
                prp = pffindproto(dom, proto, type);
        else
                prp = pffindtype(dom, type);
-       if (prp == NULL || prp->pr_attach == NULL)
+       if (prp == NULL || prp->pr_usrreqs == NULL)
                return (EPROTONOSUPPORT);
        if (prp->pr_type != type)
                return (EPROTOTYPE);
@@ -1296,7 +1296,7 @@ sosplice(struct socket *so, int fd, off_
        if ((error = getsock(curproc, fd, &fp)) != 0)
                return (error);
        sosp = fp->f_data;
-       if (sosp->so_proto->pr_usrreq != so->so_proto->pr_usrreq) {
+       if (sosp->so_proto->pr_usrreqs != so->so_proto->pr_usrreqs) {
                error = EPROTONOSUPPORT;
                goto frele;
        }
Index: sys/kern/uipc_usrreq.c
===================================================================
RCS file: /cvs/src/sys/kern/uipc_usrreq.c,v
retrieving revision 1.167
diff -u -p -r1.167 uipc_usrreq.c
--- sys/kern/uipc_usrreq.c      2 Jul 2022 11:49:23 -0000       1.167
+++ sys/kern/uipc_usrreq.c      13 Aug 2022 21:59:52 -0000
@@ -126,6 +126,12 @@ int        unp_rights;     /* [R] file descriptors 
 int    unp_defer;      /* [G] number of deferred fp to close by the GC task */
 int    unp_gcing;      /* [G] GC task currently running */
 
+const struct pr_usrreqs uipc_usrreqs = {
+       .pru_usrreq     = uipc_usrreq,
+       .pru_attach     = uipc_attach,
+       .pru_detach     = uipc_detach,
+};
+
 void
 unp_init(void)
 {
Index: sys/net/pfkeyv2.c
===================================================================
RCS file: /cvs/src/sys/net/pfkeyv2.c,v
retrieving revision 1.234
diff -u -p -r1.234 pfkeyv2.c
--- sys/net/pfkeyv2.c   6 Jun 2022 14:45:41 -0000       1.234
+++ sys/net/pfkeyv2.c   13 Aug 2022 21:59:52 -0000
@@ -199,6 +199,12 @@ pfdatatopacket(void *data, int len, stru
        return (0);
 }
 
+const struct pr_usrreqs pfkeyv2_usrreqs = {
+       .pru_usrreq     = pfkeyv2_usrreq,
+       .pru_attach     = pfkeyv2_attach,
+       .pru_detach     = pfkeyv2_detach,
+};
+
 const struct protosw pfkeysw[] = {
 {
   .pr_type      = SOCK_RAW,
@@ -206,9 +212,7 @@ const struct protosw pfkeysw[] = {
   .pr_protocol  = PF_KEY_V2,
   .pr_flags     = PR_ATOMIC | PR_ADDR,
   .pr_output    = pfkeyv2_output,
-  .pr_usrreq    = pfkeyv2_usrreq,
-  .pr_attach    = pfkeyv2_attach,
-  .pr_detach    = pfkeyv2_detach,
+  .pr_usrreqs   = &pfkeyv2_usrreqs,
   .pr_sysctl    = pfkeyv2_sysctl,
 }
 };
Index: sys/net/rtsock.c
===================================================================
RCS file: /cvs/src/sys/net/rtsock.c,v
retrieving revision 1.334
diff -u -p -r1.334 rtsock.c
--- sys/net/rtsock.c    28 Jun 2022 10:01:13 -0000      1.334
+++ sys/net/rtsock.c    13 Aug 2022 21:59:52 -0000
@@ -2401,6 +2401,12 @@ rt_setsource(unsigned int rtableid, stru
  * Definitions of protocols supported in the ROUTE domain.
  */
 
+const struct pr_usrreqs route_usrreqs = {
+       .pru_usrreq     = route_usrreq,
+       .pru_attach     = route_attach,
+       .pru_detach     = route_detach,
+};
+
 const struct protosw routesw[] = {
 {
   .pr_type     = SOCK_RAW,
@@ -2408,9 +2414,7 @@ const struct protosw routesw[] = {
   .pr_flags    = PR_ATOMIC|PR_ADDR|PR_WANTRCVD,
   .pr_output   = route_output,
   .pr_ctloutput        = route_ctloutput,
-  .pr_usrreq   = route_usrreq,
-  .pr_attach   = route_attach,
-  .pr_detach   = route_detach,
+  .pr_usrreqs  = &route_usrreqs,
   .pr_init     = route_prinit,
   .pr_sysctl   = sysctl_rtable
 }
Index: sys/netinet/in_proto.c
===================================================================
RCS file: /cvs/src/sys/netinet/in_proto.c,v
retrieving revision 1.98
diff -u -p -r1.98 in_proto.c
--- sys/netinet/in_proto.c      25 Feb 2022 23:51:03 -0000      1.98
+++ sys/netinet/in_proto.c      13 Aug 2022 21:59:52 -0000
@@ -189,9 +189,7 @@ const struct protosw inetsw[] = {
   .pr_input    = udp_input,
   .pr_ctlinput = udp_ctlinput,
   .pr_ctloutput        = ip_ctloutput,
-  .pr_usrreq   = udp_usrreq,
-  .pr_attach   = udp_attach,
-  .pr_detach   = udp_detach,
+  .pr_usrreqs  = &udp_usrreqs,
   .pr_init     = udp_init,
   .pr_sysctl   = udp_sysctl
 },
@@ -203,9 +201,7 @@ const struct protosw inetsw[] = {
   .pr_input    = tcp_input,
   .pr_ctlinput = tcp_ctlinput,
   .pr_ctloutput        = tcp_ctloutput,
-  .pr_usrreq   = tcp_usrreq,
-  .pr_attach   = tcp_attach,
-  .pr_detach   = tcp_detach,
+  .pr_usrreqs  = &tcp_usrreqs,
   .pr_init     = tcp_init,
   .pr_slowtimo = tcp_slowtimo,
   .pr_sysctl   = tcp_sysctl
@@ -217,9 +213,7 @@ const struct protosw inetsw[] = {
   .pr_flags    = PR_ATOMIC|PR_ADDR,
   .pr_input    = rip_input,
   .pr_ctloutput        = rip_ctloutput,
-  .pr_usrreq   = rip_usrreq,
-  .pr_attach   = rip_attach,
-  .pr_detach   = rip_detach,
+  .pr_usrreqs  = &rip_usrreqs,
 },
 {
   .pr_type     = SOCK_RAW,
@@ -228,9 +222,7 @@ const struct protosw inetsw[] = {
   .pr_flags    = PR_ATOMIC|PR_ADDR,
   .pr_input    = icmp_input,
   .pr_ctloutput        = rip_ctloutput,
-  .pr_usrreq   = rip_usrreq,
-  .pr_attach   = rip_attach,
-  .pr_detach   = rip_detach,
+  .pr_usrreqs  = &rip_usrreqs,
   .pr_init     = icmp_init,
   .pr_sysctl   = icmp_sysctl
 },
@@ -245,9 +237,7 @@ const struct protosw inetsw[] = {
   .pr_input    = ipip_input,
 #endif
   .pr_ctloutput        = rip_ctloutput,
-  .pr_usrreq   = rip_usrreq,
-  .pr_attach   = rip_attach,
-  .pr_detach   = rip_detach,
+  .pr_usrreqs  = &rip_usrreqs,
   .pr_sysctl   = ipip_sysctl,
   .pr_init     = ipip_init
 },
@@ -263,9 +253,7 @@ const struct protosw inetsw[] = {
   .pr_input    = ipip_input,
 #endif
   .pr_ctloutput        = rip_ctloutput,
-  .pr_usrreq   = rip_usrreq, /* XXX */
-  .pr_attach   = rip_attach,
-  .pr_detach   = rip_detach,
+  .pr_usrreqs  = &rip_usrreqs, /* XXX */
 },
 #endif
 #if defined(MPLS) && NGIF > 0
@@ -275,9 +263,7 @@ const struct protosw inetsw[] = {
   .pr_protocol = IPPROTO_MPLS,
   .pr_flags    = PR_ATOMIC|PR_ADDR,
   .pr_input    = in_gif_input,
-  .pr_usrreq   = rip_usrreq,
-  .pr_attach   = rip_attach,
-  .pr_detach   = rip_detach,
+  .pr_usrreqs  = &rip_usrreqs,
 },
 #endif /* MPLS && GIF */
 {
@@ -287,9 +273,7 @@ const struct protosw inetsw[] = {
   .pr_flags    = PR_ATOMIC|PR_ADDR,
   .pr_input    = igmp_input,
   .pr_ctloutput        = rip_ctloutput,
-  .pr_usrreq   = rip_usrreq,
-  .pr_attach   = rip_attach,
-  .pr_detach   = rip_detach,
+  .pr_usrreqs  = &rip_usrreqs,
   .pr_init     = igmp_init,
   .pr_fasttimo = igmp_fasttimo,
   .pr_slowtimo = igmp_slowtimo,
@@ -304,9 +288,7 @@ const struct protosw inetsw[] = {
   .pr_input    = ah46_input,
   .pr_ctlinput = ah4_ctlinput,
   .pr_ctloutput        = rip_ctloutput,
-  .pr_usrreq   = rip_usrreq,
-  .pr_attach   = rip_attach,
-  .pr_detach   = rip_detach,
+  .pr_usrreqs  = &rip_usrreqs,
   .pr_sysctl   = ah_sysctl
 },
 {
@@ -317,9 +299,7 @@ const struct protosw inetsw[] = {
   .pr_input    = esp46_input,
   .pr_ctlinput = esp4_ctlinput,
   .pr_ctloutput        = rip_ctloutput,
-  .pr_usrreq   = rip_usrreq,
-  .pr_attach   = rip_attach,
-  .pr_detach   = rip_detach,
+  .pr_usrreqs  = &rip_usrreqs,
   .pr_sysctl   = esp_sysctl
 },
 {
@@ -329,9 +309,7 @@ const struct protosw inetsw[] = {
   .pr_flags    = PR_ATOMIC|PR_ADDR,
   .pr_input    = ipcomp46_input,
   .pr_ctloutput        = rip_ctloutput,
-  .pr_usrreq   = rip_usrreq,
-  .pr_attach   = rip_attach,
-  .pr_detach   = rip_detach,
+  .pr_usrreqs  = &rip_usrreqs,
   .pr_sysctl   = ipcomp_sysctl
 },
 #endif /* IPSEC */
@@ -343,9 +321,7 @@ const struct protosw inetsw[] = {
   .pr_flags    = PR_ATOMIC|PR_ADDR,
   .pr_input    = gre_input,
   .pr_ctloutput        = rip_ctloutput,
-  .pr_usrreq   = gre_usrreq,
-  .pr_attach   = rip_attach,
-  .pr_detach   = rip_detach,
+  .pr_usrreqs  = &gre_usrreqs,
   .pr_sysctl   = gre_sysctl
 },
 #endif /* NGRE > 0 */
@@ -357,9 +333,7 @@ const struct protosw inetsw[] = {
   .pr_flags    = PR_ATOMIC|PR_ADDR,
   .pr_input    = carp_proto_input,
   .pr_ctloutput        = rip_ctloutput,
-  .pr_usrreq   = rip_usrreq,
-  .pr_attach   = rip_attach,
-  .pr_detach   = rip_detach,
+  .pr_usrreqs  = &rip_usrreqs,
   .pr_sysctl   = carp_sysctl
 },
 #endif /* NCARP > 0 */
@@ -371,9 +345,7 @@ const struct protosw inetsw[] = {
   .pr_flags    = PR_ATOMIC|PR_ADDR,
   .pr_input    = pfsync_input,
   .pr_ctloutput        = rip_ctloutput,
-  .pr_usrreq   = rip_usrreq,
-  .pr_attach   = rip_attach,
-  .pr_detach   = rip_detach,
+  .pr_usrreqs  = &rip_usrreqs,
   .pr_sysctl   = pfsync_sysctl
 },
 #endif /* NPFSYNC > 0 */
@@ -384,9 +356,7 @@ const struct protosw inetsw[] = {
   .pr_protocol = IPPROTO_DIVERT,
   .pr_flags    = PR_ATOMIC|PR_ADDR,
   .pr_ctloutput        = rip_ctloutput,
-  .pr_usrreq   = divert_usrreq,
-  .pr_attach   = divert_attach,
-  .pr_detach   = divert_detach,
+  .pr_usrreqs  = &divert_usrreqs,
   .pr_init     = divert_init,
   .pr_sysctl   = divert_sysctl
 },
@@ -399,9 +369,7 @@ const struct protosw inetsw[] = {
   .pr_flags    = PR_ATOMIC|PR_ADDR,
   .pr_input    = ip_etherip_input,
   .pr_ctloutput        = rip_ctloutput,
-  .pr_usrreq   = rip_usrreq,
-  .pr_attach   = rip_attach,
-  .pr_detach   = rip_detach,
+  .pr_usrreqs  = &rip_usrreqs,
   .pr_sysctl   = etherip_sysctl
 },
 #endif /* NETHERIP */
@@ -412,9 +380,7 @@ const struct protosw inetsw[] = {
   .pr_flags    = PR_ATOMIC|PR_ADDR,
   .pr_input    = rip_input,
   .pr_ctloutput        = rip_ctloutput,
-  .pr_usrreq   = rip_usrreq,
-  .pr_attach   = rip_attach,
-  .pr_detach   = rip_detach,
+  .pr_usrreqs  = &rip_usrreqs,
   .pr_init     = rip_init
 }
 };
Index: sys/netinet/ip_divert.c
===================================================================
RCS file: /cvs/src/sys/netinet/ip_divert.c,v
retrieving revision 1.68
diff -u -p -r1.68 ip_divert.c
--- sys/netinet/ip_divert.c     9 May 2022 19:33:46 -0000       1.68
+++ sys/netinet/ip_divert.c     13 Aug 2022 21:59:52 -0000
@@ -62,6 +62,12 @@ const struct sysctl_bounded_args divertc
        { DIVERTCTL_SENDSPACE, &divert_sendspace, 0, INT_MAX },
 };
 
+const struct pr_usrreqs divert_usrreqs = {
+       .pru_usrreq     = divert_usrreq,
+       .pru_attach     = divert_attach,
+       .pru_detach     = divert_detach,
+};
+
 int divbhashsize = DIVERTHASHSIZE;
 
 int    divert_output(struct inpcb *, struct mbuf *, struct mbuf *,
Index: sys/netinet/ip_divert.h
===================================================================
RCS file: /cvs/src/sys/netinet/ip_divert.h,v
retrieving revision 1.15
diff -u -p -r1.15 ip_divert.h
--- sys/netinet/ip_divert.h     5 May 2022 16:44:22 -0000       1.15
+++ sys/netinet/ip_divert.h     13 Aug 2022 21:59:52 -0000
@@ -65,6 +65,8 @@ divstat_inc(enum divstat_counters c)
 
 extern struct  inpcbtable      divbtable;
 
+extern const struct pr_usrreqs divert_usrreqs;
+
 void    divert_init(void);
 void    divert_packet(struct mbuf *, int, u_int16_t);
 int     divert_sysctl(int *, u_int, void *, size_t *, void *, size_t);
Index: sys/netinet/ip_gre.c
===================================================================
RCS file: /cvs/src/sys/netinet/ip_gre.c,v
retrieving revision 1.74
diff -u -p -r1.74 ip_gre.c
--- sys/netinet/ip_gre.c        26 Jun 2022 15:50:21 -0000      1.74
+++ sys/netinet/ip_gre.c        13 Aug 2022 21:59:52 -0000
@@ -53,12 +53,19 @@
 
 #include <netinet/in.h>
 #include <netinet/ip.h>
+#include <netinet/ip_gre.h>
 #include <netinet/ip_var.h>
 #include <netinet/in_pcb.h>
 
 #ifdef PIPEX
 #include <net/pipex.h>
 #endif
+
+const struct pr_usrreqs gre_usrreqs = {
+       .pru_usrreq     = gre_usrreq,
+       .pru_attach     = rip_attach,
+       .pru_detach     = rip_detach,
+};
 
 int
 gre_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *nam,
Index: sys/netinet/ip_gre.h
===================================================================
RCS file: /cvs/src/sys/netinet/ip_gre.h,v
retrieving revision 1.16
diff -u -p -r1.16 ip_gre.h
--- sys/netinet/ip_gre.h        25 Feb 2022 23:51:03 -0000      1.16
+++ sys/netinet/ip_gre.h        13 Aug 2022 21:59:52 -0000
@@ -53,6 +53,9 @@
 }
 
 #ifdef _KERNEL
+
+extern const struct pr_usrreqs gre_usrreqs;
+
 int     gre_usrreq(struct socket *, int, struct mbuf *, struct mbuf *, struct 
mbuf *, struct proc *);
 #endif /* _KERNEL */
 #endif /* _NETINET_IP_GRE_H_ */
Index: sys/netinet/ip_var.h
===================================================================
RCS file: /cvs/src/sys/netinet/ip_var.h,v
retrieving revision 1.96
diff -u -p -r1.96 ip_var.h
--- sys/netinet/ip_var.h        12 Aug 2022 14:49:15 -0000      1.96
+++ sys/netinet/ip_var.h        13 Aug 2022 21:59:52 -0000
@@ -219,6 +219,8 @@ extern int ipmforwarding;           /* enable mul
 extern int ipmultipath;                        /* enable multipath routing */
 extern int la_hold_total;
 
+extern const struct pr_usrreqs rip_usrreqs;
+
 extern struct rttimer_queue ip_mtudisc_timeout_q;
 extern struct pool ipqent_pool;
 struct route;
Index: sys/netinet/raw_ip.c
===================================================================
RCS file: /cvs/src/sys/netinet/raw_ip.c,v
retrieving revision 1.129
diff -u -p -r1.129 raw_ip.c
--- sys/netinet/raw_ip.c        6 Aug 2022 15:57:59 -0000       1.129
+++ sys/netinet/raw_ip.c        13 Aug 2022 21:59:52 -0000
@@ -103,6 +103,12 @@ struct inpcbtable rawcbtable;
  * Raw interface to IP protocol.
  */
 
+const struct pr_usrreqs rip_usrreqs = {
+       .pru_usrreq     = rip_usrreq,
+       .pru_attach     = rip_attach,
+       .pru_detach     = rip_detach,
+};
+
 /*
  * Initialize raw connection block q.
  */
Index: sys/netinet/tcp_usrreq.c
===================================================================
RCS file: /cvs/src/sys/netinet/tcp_usrreq.c,v
retrieving revision 1.186
diff -u -p -r1.186 tcp_usrreq.c
--- sys/netinet/tcp_usrreq.c    13 Aug 2022 19:13:45 -0000      1.186
+++ sys/netinet/tcp_usrreq.c    13 Aug 2022 21:59:52 -0000
@@ -111,6 +111,12 @@ u_int      tcp_sendspace = TCP_SENDSPACE;
 u_int  tcp_recvspace = TCP_RECVSPACE;
 u_int  tcp_autorcvbuf_inc = 16 * 1024;
 
+const struct pr_usrreqs tcp_usrreqs = {
+       .pru_usrreq     = tcp_usrreq,
+       .pru_attach     = tcp_attach,
+       .pru_detach     = tcp_detach,
+};
+
 static int pr_slowhz = PR_SLOWHZ;
 const struct sysctl_bounded_args tcpctl_vars[] = {
        { TCPCTL_SLOWHZ, &pr_slowhz, SYSCTL_INT_READONLY },
Index: sys/netinet/tcp_var.h
===================================================================
RCS file: /cvs/src/sys/netinet/tcp_var.h,v
retrieving revision 1.140
diff -u -p -r1.140 tcp_var.h
--- sys/netinet/tcp_var.h       11 Aug 2022 09:13:21 -0000      1.140
+++ sys/netinet/tcp_var.h       13 Aug 2022 21:59:52 -0000
@@ -637,6 +637,7 @@ tcpstat_pkt(enum tcpstat_counters pcount
        counters_pkt(tcpcounters, pcounter, bcounter, v);
 }
 
+extern const struct pr_usrreqs tcp_usrreqs;
 extern struct pool tcpcb_pool;
 extern struct inpcbtable tcbtable;     /* head of queue of active tcpcb's */
 extern u_int32_t tcp_now;              /* for RFC 1323 timestamps */
Index: sys/netinet/udp_usrreq.c
===================================================================
RCS file: /cvs/src/sys/netinet/udp_usrreq.c,v
retrieving revision 1.281
diff -u -p -r1.281 udp_usrreq.c
--- sys/netinet/udp_usrreq.c    8 Aug 2022 12:06:30 -0000       1.281
+++ sys/netinet/udp_usrreq.c    13 Aug 2022 21:59:52 -0000
@@ -122,6 +122,12 @@ u_int      udp_sendspace = 9216;           /* really m
 u_int  udp_recvspace = 40 * (1024 + sizeof(struct sockaddr_in));
                                        /* 40 1K datagrams */
 
+const struct pr_usrreqs udp_usrreqs = {
+       .pru_usrreq     = udp_usrreq,
+       .pru_attach     = udp_attach,
+       .pru_detach     = udp_detach,
+};
+
 const struct sysctl_bounded_args udpctl_vars[] = {
        { UDPCTL_CHECKSUM, &udpcksum, 0, 1 },
        { UDPCTL_RECVSPACE, &udp_recvspace, 0, INT_MAX },
Index: sys/netinet/udp_var.h
===================================================================
RCS file: /cvs/src/sys/netinet/udp_var.h,v
retrieving revision 1.37
diff -u -p -r1.37 udp_var.h
--- sys/netinet/udp_var.h       25 Feb 2022 23:51:03 -0000      1.37
+++ sys/netinet/udp_var.h       13 Aug 2022 21:59:52 -0000
@@ -126,6 +126,8 @@ udpstat_inc(enum udpstat_counters c)
 extern struct  inpcbtable udbtable;
 extern struct  udpstat udpstat;
 
+extern const struct pr_usrreqs udp_usrreqs;
+
 #ifdef INET6
 void   udp6_ctlinput(int, struct sockaddr *, u_int, void *);
 #endif /* INET6 */
Index: sys/netinet6/in6_proto.c
===================================================================
RCS file: /cvs/src/sys/netinet6/in6_proto.c,v
retrieving revision 1.109
diff -u -p -r1.109 in6_proto.c
--- sys/netinet6/in6_proto.c    25 Feb 2022 23:51:04 -0000      1.109
+++ sys/netinet6/in6_proto.c    13 Aug 2022 21:59:52 -0000
@@ -140,9 +140,7 @@ const struct protosw inet6sw[] = {
   .pr_input    = udp_input,
   .pr_ctlinput = udp6_ctlinput,
   .pr_ctloutput        = ip6_ctloutput,
-  .pr_usrreq   = udp_usrreq,
-  .pr_attach   = udp_attach,
-  .pr_detach   = udp_detach,
+  .pr_usrreqs  = &udp_usrreqs,
   .pr_sysctl   = udp_sysctl
 },
 {
@@ -153,9 +151,7 @@ const struct protosw inet6sw[] = {
   .pr_input    = tcp_input,
   .pr_ctlinput = tcp6_ctlinput,
   .pr_ctloutput        = tcp_ctloutput,
-  .pr_usrreq   = tcp_usrreq,
-  .pr_attach   = tcp_attach,
-  .pr_detach   = tcp_detach,
+  .pr_usrreqs  = &tcp_usrreqs,
   .pr_sysctl   = tcp_sysctl
 },
 {
@@ -166,9 +162,7 @@ const struct protosw inet6sw[] = {
   .pr_input    = rip6_input,
   .pr_ctlinput = rip6_ctlinput,
   .pr_ctloutput        = rip6_ctloutput,
-  .pr_usrreq   = rip6_usrreq,
-  .pr_attach   = rip6_attach,
-  .pr_detach   = rip6_detach,
+  .pr_usrreqs  = &rip6_usrreqs,
   .pr_sysctl   = rip6_sysctl
 },
 {
@@ -179,9 +173,7 @@ const struct protosw inet6sw[] = {
   .pr_input    = icmp6_input,
   .pr_ctlinput = rip6_ctlinput,
   .pr_ctloutput        = rip6_ctloutput,
-  .pr_usrreq   = rip6_usrreq,
-  .pr_attach   = rip6_attach,
-  .pr_detach   = rip6_detach,
+  .pr_usrreqs  = &rip6_usrreqs,
   .pr_init     = icmp6_init,
   .pr_fasttimo = icmp6_fasttimo,
   .pr_sysctl   = icmp6_sysctl
@@ -215,9 +207,7 @@ const struct protosw inet6sw[] = {
   .pr_flags    = PR_ATOMIC|PR_ADDR,
   .pr_input    = ah46_input,
   .pr_ctloutput        = rip6_ctloutput,
-  .pr_usrreq   = rip6_usrreq,
-  .pr_attach   = rip6_attach,
-  .pr_detach   = rip6_detach,
+  .pr_usrreqs  = &rip6_usrreqs,
   .pr_sysctl   = ah_sysctl
 },
 {
@@ -227,9 +217,7 @@ const struct protosw inet6sw[] = {
   .pr_flags    = PR_ATOMIC|PR_ADDR,
   .pr_input    = esp46_input,
   .pr_ctloutput        = rip6_ctloutput,
-  .pr_usrreq   = rip6_usrreq,
-  .pr_attach   = rip6_attach,
-  .pr_detach   = rip6_detach,
+  .pr_usrreqs  = &rip6_usrreqs,
   .pr_sysctl   = esp_sysctl
 },
 {
@@ -239,9 +227,7 @@ const struct protosw inet6sw[] = {
   .pr_flags    = PR_ATOMIC|PR_ADDR,
   .pr_input    = ipcomp46_input,
   .pr_ctloutput        = rip6_ctloutput,
-  .pr_usrreq   = rip6_usrreq,
-  .pr_attach   = rip6_attach,
-  .pr_detach   = rip6_detach,
+  .pr_usrreqs  = &rip6_usrreqs,
   .pr_sysctl   = ipcomp_sysctl
 },
 #endif /* IPSEC */
@@ -256,9 +242,7 @@ const struct protosw inet6sw[] = {
   .pr_input    = ipip_input,
 #endif
   .pr_ctloutput        = rip6_ctloutput,
-  .pr_usrreq   = rip6_usrreq,  /* XXX */
-  .pr_attach   = rip6_attach,
-  .pr_detach   = rip6_detach,
+  .pr_usrreqs  = &rip6_usrreqs,        /* XXX */
 },
 {
   .pr_type     = SOCK_RAW,
@@ -271,9 +255,7 @@ const struct protosw inet6sw[] = {
   .pr_input    = ipip_input,
 #endif
   .pr_ctloutput        = rip6_ctloutput,
-  .pr_usrreq   = rip6_usrreq,  /* XXX */
-  .pr_attach   = rip6_attach,
-  .pr_detach   = rip6_detach,
+  .pr_usrreqs  = &rip6_usrreqs,        /* XXX */
 },
 #if defined(MPLS) && NGIF > 0
 {
@@ -287,9 +269,7 @@ const struct protosw inet6sw[] = {
   .pr_input    = ipip_input,
 #endif
   .pr_ctloutput        = rip6_ctloutput,
-  .pr_usrreq   = rip6_usrreq,  /* XXX */
-  .pr_attach   = rip6_attach,
-  .pr_detach   = rip6_detach,
+  .pr_usrreqs  = &rip6_usrreqs,        /* XXX */
 },
 #endif /* MPLS */
 #if NCARP > 0
@@ -300,9 +280,7 @@ const struct protosw inet6sw[] = {
   .pr_flags    = PR_ATOMIC|PR_ADDR,
   .pr_input    = carp6_proto_input,
   .pr_ctloutput = rip6_ctloutput,
-  .pr_usrreq   = rip6_usrreq,
-  .pr_attach   = rip6_attach,
-  .pr_detach   = rip6_detach,
+  .pr_usrreqs  = &rip6_usrreqs,
   .pr_sysctl   = carp_sysctl
 },
 #endif /* NCARP */
@@ -313,9 +291,7 @@ const struct protosw inet6sw[] = {
   .pr_protocol = IPPROTO_DIVERT,
   .pr_flags    = PR_ATOMIC|PR_ADDR,
   .pr_ctloutput        = rip6_ctloutput,
-  .pr_usrreq   = divert6_usrreq,
-  .pr_attach   = divert6_attach,
-  .pr_detach   = divert6_detach,
+  .pr_usrreqs  = &divert6_usrreqs,
   .pr_init     = divert6_init,
   .pr_sysctl   = divert6_sysctl
 },
@@ -328,9 +304,7 @@ const struct protosw inet6sw[] = {
   .pr_flags    = PR_ATOMIC|PR_ADDR,
   .pr_input    = ip6_etherip_input,
   .pr_ctloutput        = rip6_ctloutput,
-  .pr_usrreq   = rip6_usrreq,
-  .pr_attach   = rip6_attach,
-  .pr_detach   = rip6_detach,
+  .pr_usrreqs  = &rip6_usrreqs,
 },
 #endif /* NETHERIP */
 #if NGRE > 0
@@ -341,9 +315,7 @@ const struct protosw inet6sw[] = {
   .pr_flags    = PR_ATOMIC|PR_ADDR,
   .pr_input    = gre_input6,
   .pr_ctloutput        = rip6_ctloutput,
-  .pr_usrreq   = rip6_usrreq,
-  .pr_attach   = rip6_attach,
-  .pr_detach   = rip6_detach,
+  .pr_usrreqs  = &rip6_usrreqs,
 },
 #endif /* NGRE */
 {
@@ -353,9 +325,7 @@ const struct protosw inet6sw[] = {
   .pr_flags    = PR_ATOMIC|PR_ADDR,
   .pr_input    = rip6_input,
   .pr_ctloutput        = rip6_ctloutput,
-  .pr_usrreq   = rip6_usrreq,
-  .pr_attach   = rip6_attach,
-  .pr_detach   = rip6_detach,
+  .pr_usrreqs  = &rip6_usrreqs,
   .pr_init     = rip6_init
 }
 };
Index: sys/netinet6/ip6_divert.c
===================================================================
RCS file: /cvs/src/sys/netinet6/ip6_divert.c,v
retrieving revision 1.67
diff -u -p -r1.67 ip6_divert.c
--- sys/netinet6/ip6_divert.c   9 May 2022 19:33:46 -0000       1.67
+++ sys/netinet6/ip6_divert.c   13 Aug 2022 21:59:52 -0000
@@ -63,6 +63,12 @@ const struct sysctl_bounded_args divert6
        { DIVERT6CTL_SENDSPACE, &divert6_sendspace, 0, INT_MAX },
 };
 
+const struct pr_usrreqs divert6_usrreqs = {
+       .pru_usrreq     = divert6_usrreq,
+       .pru_attach     = divert6_attach,
+       .pru_detach     = divert6_detach,
+};
+
 int divb6hashsize = DIVERTHASHSIZE;
 
 int    divert6_output(struct inpcb *, struct mbuf *, struct mbuf *,
Index: sys/netinet6/ip6_divert.h
===================================================================
RCS file: /cvs/src/sys/netinet6/ip6_divert.h,v
retrieving revision 1.13
diff -u -p -r1.13 ip6_divert.h
--- sys/netinet6/ip6_divert.h   5 May 2022 16:44:22 -0000       1.13
+++ sys/netinet6/ip6_divert.h   13 Aug 2022 21:59:52 -0000
@@ -65,6 +65,8 @@ div6stat_inc(enum div6stat_counters c)
 
 extern struct  inpcbtable      divb6table;
 
+extern const struct pr_usrreqs divert6_usrreqs;
+
 void    divert6_init(void);
 void    divert6_packet(struct mbuf *, int, u_int16_t);
 int     divert6_sysctl(int *, u_int, void *, size_t *, void *, size_t);
Index: sys/netinet6/ip6_var.h
===================================================================
RCS file: /cvs/src/sys/netinet6/ip6_var.h,v
retrieving revision 1.94
diff -u -p -r1.94 ip6_var.h
--- sys/netinet6/ip6_var.h      12 Aug 2022 14:49:15 -0000      1.94
+++ sys/netinet6/ip6_var.h      13 Aug 2022 21:59:52 -0000
@@ -300,6 +300,8 @@ extern int ip6_auto_linklocal;
 #define        IP6_SOIIKEY_LEN 16
 extern uint8_t ip6_soiikey[IP6_SOIIKEY_LEN];
 
+extern const struct pr_usrreqs rip6_usrreqs;
+
 struct in6pcb;
 struct inpcb;
 
Index: sys/netinet6/raw_ip6.c
===================================================================
RCS file: /cvs/src/sys/netinet6/raw_ip6.c,v
retrieving revision 1.149
diff -u -p -r1.149 raw_ip6.c
--- sys/netinet6/raw_ip6.c      8 Aug 2022 12:06:31 -0000       1.149
+++ sys/netinet6/raw_ip6.c      13 Aug 2022 21:59:52 -0000
@@ -105,6 +105,12 @@ struct     inpcbtable rawin6pcbtable;
 
 struct cpumem *rip6counters;
 
+const struct pr_usrreqs rip6_usrreqs = {
+       .pru_usrreq     = rip6_usrreq,
+       .pru_attach     = rip6_attach,
+       .pru_detach     = rip6_detach,
+};
+
 /*
  * Initialize raw connection block queue.
  */
Index: sys/sys/protosw.h
===================================================================
RCS file: /cvs/src/sys/sys/protosw.h,v
retrieving revision 1.36
diff -u -p -r1.36 protosw.h
--- sys/sys/protosw.h   13 Aug 2022 21:01:46 -0000      1.36
+++ sys/sys/protosw.h   13 Aug 2022 21:59:52 -0000
@@ -59,6 +59,15 @@ struct socket;
 struct domain;
 struct proc;
 
+struct pr_usrreqs {
+                                       /* user request: see list below */
+       int     (*pru_usrreq)(struct socket *, int, struct mbuf *,
+                   struct mbuf *, struct mbuf *, struct proc *);
+
+       int     (*pru_attach)(struct socket *, int);
+       int     (*pru_detach)(struct socket *);
+};
+
 struct protosw {
        short   pr_type;                /* socket type used for */
        const   struct domain *pr_domain; /* domain protocol a member of */
@@ -76,14 +85,9 @@ struct protosw {
                                        /* control output (from above) */
        int     (*pr_ctloutput)(int, struct socket *, int, int, struct mbuf *);
 
-/* user-protocol hook */
-                                       /* user request: see list below */
-       int     (*pr_usrreq)(struct socket *, int, struct mbuf *,
-                   struct mbuf *, struct mbuf *, struct proc *);
-
-       int     (*pr_attach)(struct socket *, int);
-       int     (*pr_detach)(struct socket *);
-
+/* user-protocol hooks */
+       const   struct pr_usrreqs *pr_usrreqs;
+       
 /* utility hooks */
        void    (*pr_init)(void);       /* initialization hook */
        void    (*pr_fasttimo)(void);   /* fast timeout (200ms) */
@@ -248,61 +252,61 @@ extern const struct protosw inet6sw[];
 static inline int
 pru_attach(struct socket *so, int proto)
 {
-       return (*so->so_proto->pr_attach)(so, proto);
+       return (*so->so_proto->pr_usrreqs->pru_attach)(so, proto);
 }
 
 static inline int
 pru_detach(struct socket *so)
 {
-       return (*so->so_proto->pr_detach)(so);
+       return (*so->so_proto->pr_usrreqs->pru_detach)(so);
 }
 
 static inline int
 pru_bind(struct socket *so, struct mbuf *nam, struct proc *p)
 {
-       return (*so->so_proto->pr_usrreq)(so,
+       return (*so->so_proto->pr_usrreqs->pru_usrreq)(so,
            PRU_BIND, NULL, nam, NULL, p);
 }
 
 static inline int
 pru_listen(struct socket *so)
 {
-       return (*so->so_proto->pr_usrreq)(so,
+       return (*so->so_proto->pr_usrreqs->pru_usrreq)(so,
            PRU_LISTEN, NULL, NULL, NULL, curproc);
 }
 
 static inline int
 pru_connect(struct socket *so, struct mbuf *nam)
 {
-       return (*so->so_proto->pr_usrreq)(so,
+       return (*so->so_proto->pr_usrreqs->pru_usrreq)(so,
            PRU_CONNECT, NULL, nam, NULL, curproc);
 }
 
 static inline int
 pru_accept(struct socket *so, struct mbuf *nam)
 {
-       return (*so->so_proto->pr_usrreq)(so,
+       return (*so->so_proto->pr_usrreqs->pru_usrreq)(so,
            PRU_ACCEPT, NULL, nam, NULL, curproc);
 }
 
 static inline int
 pru_disconnect(struct socket *so)
 {
-       return (*so->so_proto->pr_usrreq)(so,
+       return (*so->so_proto->pr_usrreqs->pru_usrreq)(so,
            PRU_DISCONNECT, NULL, NULL, NULL, curproc);
 }
 
 static inline int
 pru_shutdown(struct socket *so)
 {
-       return (*so->so_proto->pr_usrreq)(so,
+       return (*so->so_proto->pr_usrreqs->pru_usrreq)(so,
            PRU_SHUTDOWN, NULL, NULL, NULL, curproc);
 }
 
 static inline int
 pru_rcvd(struct socket *so, int flags)
 {
-       return (*so->so_proto->pr_usrreq)(so,
+       return (*so->so_proto->pr_usrreqs->pru_usrreq)(so,
            PRU_RCVD, NULL, (struct mbuf *)(long)flags, NULL, curproc);
 }
 
@@ -310,14 +314,14 @@ static inline int
 pru_send(struct socket *so, struct mbuf *top, struct mbuf *addr,
     struct mbuf *control)
 {
-       return (*so->so_proto->pr_usrreq)(so,
+       return (*so->so_proto->pr_usrreqs->pru_usrreq)(so,
            PRU_SEND, top, addr, control, curproc);
 }
 
 static inline int
 pru_abort(struct socket *so)
 {
-       return (*so->so_proto->pr_usrreq)(so,
+       return (*so->so_proto->pr_usrreqs->pru_usrreq)(so,
            PRU_ABORT, NULL, NULL, NULL, curproc);
 }
 
@@ -325,7 +329,7 @@ static inline int
 pru_control(struct socket *so, u_long cmd, caddr_t data,
     struct ifnet *ifp, struct proc *p)
 {
-       return (*so->so_proto->pr_usrreq)(so,
+       return (*so->so_proto->pr_usrreqs->pru_usrreq)(so,
            PRU_CONTROL, (struct mbuf *)cmd, (struct mbuf *)data,
            (struct mbuf *)ifp, p);
 }
@@ -333,14 +337,14 @@ pru_control(struct socket *so, u_long cm
 static inline int
 pru_sense(struct socket *so, struct stat *ub)
 {
-       return (*so->so_proto->pr_usrreq)(so,
+       return (*so->so_proto->pr_usrreqs->pru_usrreq)(so,
            PRU_SENSE, (struct mbuf *)ub, NULL, NULL, curproc);
 }
 
 static inline int
 pru_rcvoob(struct socket *so, struct mbuf *m, int flags)
 {
-       return (*so->so_proto->pr_usrreq)(so,
+       return (*so->so_proto->pr_usrreqs->pru_usrreq)(so,
            PRU_RCVOOB, m, (struct mbuf *)(long)flags, NULL, curproc);
 }
 
@@ -348,28 +352,28 @@ static inline int
 pru_sendoob(struct socket *so, struct mbuf *top, struct mbuf *addr,
     struct mbuf *control)
 {
-       return (*so->so_proto->pr_usrreq)(so,
+       return (*so->so_proto->pr_usrreqs->pru_usrreq)(so,
            PRU_SENDOOB, top, addr, control, curproc);
 }
 
 static inline int
 pru_sockaddr(struct socket *so, struct mbuf *addr)
 {
-       return (*so->so_proto->pr_usrreq)(so,
+       return (*so->so_proto->pr_usrreqs->pru_usrreq)(so,
            PRU_SOCKADDR, NULL, addr, NULL, curproc);
 }
 
 static inline int
 pru_peeraddr(struct socket *so, struct mbuf *addr)
 {
-       return (*so->so_proto->pr_usrreq)(so,
+       return (*so->so_proto->pr_usrreqs->pru_usrreq)(so,
            PRU_PEERADDR, NULL, addr, NULL, curproc);
 }
 
 static inline int
 pru_connect2(struct socket *so1, struct socket *so2)
 {
-       return (*so1->so_proto->pr_usrreq)(so1,
+       return (*so1->so_proto->pr_usrreqs->pru_usrreq)(so1,
            PRU_CONNECT2, NULL, (struct mbuf *)so2, NULL, curproc);
 }
 
Index: sys/sys/unpcb.h
===================================================================
RCS file: /cvs/src/sys/sys/unpcb.h,v
retrieving revision 1.26
diff -u -p -r1.26 unpcb.h
--- sys/sys/unpcb.h     1 Jul 2022 09:56:17 -0000       1.26
+++ sys/sys/unpcb.h     13 Aug 2022 21:59:52 -0000
@@ -107,6 +107,8 @@ struct fdpass {
        int              flags;
 };
 
+extern const struct pr_usrreqs uipc_usrreqs;
+
 int    uipc_usrreq(struct socket *, int , struct mbuf *,
                         struct mbuf *, struct mbuf *, struct proc *);
 int    uipc_attach(struct socket *, int);

Reply via email to