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);