On Sun, Aug 14, 2022 at 01:35:18AM +0300, Vitaliy Makkoveev wrote:
> The pr_usrreqs hunks. I replaced spaces by tab within `routesw'
> structure.

OK bluhm@

> 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