Move PRU_ACCEPT request to (*pru_accept)().
authormvs <mvs@openbsd.org>
Mon, 22 Aug 2022 08:08:46 +0000 (08:08 +0000)
committermvs <mvs@openbsd.org>
Mon, 22 Aug 2022 08:08:46 +0000 (08:08 +0000)
ok bluhm@

12 files changed:
sys/kern/uipc_usrreq.c
sys/net/pfkeyv2.c
sys/net/rtsock.c
sys/netinet/ip_divert.c
sys/netinet/raw_ip.c
sys/netinet/tcp_usrreq.c
sys/netinet/tcp_var.h
sys/netinet/udp_usrreq.c
sys/netinet6/ip6_divert.c
sys/netinet6/raw_ip6.c
sys/sys/protosw.h
sys/sys/unpcb.h

index 5669d52..c927777 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: uipc_usrreq.c,v 1.171 2022/08/21 22:45:55 mvs Exp $   */
+/*     $OpenBSD: uipc_usrreq.c,v 1.172 2022/08/22 08:08:46 mvs Exp $   */
 /*     $NetBSD: uipc_usrreq.c,v 1.18 1996/02/09 19:00:50 christos Exp $        */
 
 /*
@@ -133,6 +133,7 @@ const struct pr_usrreqs uipc_usrreqs = {
        .pru_bind       = uipc_bind,
        .pru_listen     = uipc_listen,
        .pru_connect    = uipc_connect,
+       .pru_accept     = uipc_accept,
 };
 
 void
@@ -244,18 +245,6 @@ uipc_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *nam,
                unp_disconnect(unp);
                break;
 
-       case PRU_ACCEPT:
-               /*
-                * Pass back name of connected socket,
-                * if it was bound and we are still connected
-                * (our peer may have closed already!).
-                */
-               so2 = unp_solock_peer(so);
-               uipc_setaddr(unp->unp_conn, nam);
-               if (so2 != NULL && so2 != so)
-                       sounlock(so2);
-               break;
-
        case PRU_SHUTDOWN:
                socantsendmore(so);
                unp_shutdown(unp);
@@ -551,6 +540,24 @@ uipc_connect(struct socket *so, struct mbuf *nam)
        return unp_connect(so, nam, curproc);
 }
 
+int
+uipc_accept(struct socket *so, struct mbuf *nam)
+{
+       struct socket *so2;
+       struct unpcb *unp = sotounpcb(so);
+
+       /*
+        * Pass back name of connected socket, if it was bound and
+        * we are still connected (our peer may have closed already!).
+        */
+       so2 = unp_solock_peer(so);
+       uipc_setaddr(unp->unp_conn, nam);
+
+       if (so2 != NULL && so2 != so)
+               sounlock(so2);
+       return (0);
+}
+
 int
 uipc_sysctl(int *name, u_int namelen, void *oldp, size_t *oldlenp, void *newp,
     size_t newlen)
index 1b9d135..d0bef3e 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: pfkeyv2.c,v 1.238 2022/08/21 22:45:55 mvs Exp $ */
+/* $OpenBSD: pfkeyv2.c,v 1.239 2022/08/22 08:08:46 mvs Exp $ */
 
 /*
  *     @(#)COPYRIGHT   1.1 (NRL) 17 January 1995
@@ -358,7 +358,6 @@ pfkeyv2_usrreq(struct socket *so, int req, struct mbuf *m,
        switch (req) {
        /* no connect, bind, accept. Socket is connected from the start */
        case PRU_CONNECT2:
-       case PRU_ACCEPT:
                error = EOPNOTSUPP;
                break;
 
index 867cacb..8350a4d 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: rtsock.c,v 1.338 2022/08/21 22:45:55 mvs Exp $        */
+/*     $OpenBSD: rtsock.c,v 1.339 2022/08/22 08:08:46 mvs Exp $        */
 /*     $NetBSD: rtsock.c,v 1.18 1996/03/29 00:32:10 cgd Exp $  */
 
 /*
@@ -234,7 +234,6 @@ route_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *nam,
        switch (req) {
        /* no connect, bind, accept. Socket is connected from the start */
        case PRU_CONNECT2:
-       case PRU_ACCEPT:
                error = EOPNOTSUPP;
                break;
 
index 3afc2be..8eda878 100644 (file)
@@ -1,4 +1,4 @@
-/*      $OpenBSD: ip_divert.c,v 1.73 2022/08/21 22:45:55 mvs Exp $ */
+/*      $OpenBSD: ip_divert.c,v 1.74 2022/08/22 08:08:46 mvs Exp $ */
 
 /*
  * Copyright (c) 2009 Michele Marchetto <michele@openbsd.org>
@@ -292,7 +292,6 @@ divert_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *addr,
                break;
 
        case PRU_CONNECT2:
-       case PRU_ACCEPT:
        case PRU_DISCONNECT:
        case PRU_SENDOOB:
        case PRU_FASTTIMO:
index 68fa0ac..66c096b 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: raw_ip.c,v 1.133 2022/08/21 22:45:55 mvs Exp $        */
+/*     $OpenBSD: raw_ip.c,v 1.134 2022/08/22 08:08:46 mvs Exp $        */
 /*     $NetBSD: raw_ip.c,v 1.25 1996/02/18 18:58:33 christos Exp $     */
 
 /*
@@ -543,7 +543,6 @@ rip_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *nam,
        /*
         * Not supported.
         */
-       case PRU_ACCEPT:
        case PRU_SENDOOB:
        case PRU_RCVD:
        case PRU_RCVOOB:
index d151eba..0834800 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: tcp_usrreq.c,v 1.191 2022/08/21 22:45:55 mvs Exp $    */
+/*     $OpenBSD: tcp_usrreq.c,v 1.192 2022/08/22 08:08:46 mvs Exp $    */
 /*     $NetBSD: tcp_usrreq.c,v 1.20 1996/02/13 23:44:16 christos Exp $ */
 
 /*
@@ -118,6 +118,7 @@ const struct pr_usrreqs tcp_usrreqs = {
        .pru_bind       = tcp_bind,
        .pru_listen     = tcp_listen,
        .pru_connect    = tcp_connect,
+       .pru_accept     = tcp_accept,
 };
 
 static int pr_slowhz = PR_SLOWHZ;
@@ -236,20 +237,6 @@ tcp_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *nam,
                tp = tcp_disconnect(tp);
                break;
 
-       /*
-        * Accept a connection.  Essentially all the work is
-        * done at higher levels; just return the address
-        * of the peer, storing through addr.
-        */
-       case PRU_ACCEPT:
-#ifdef INET6
-               if (inp->inp_flags & INP_IPV6)
-                       in6_setpeeraddr(inp, nam);
-               else
-#endif
-                       in_setpeeraddr(inp, nam);
-               break;
-
        /*
         * Mark the connection as being incapable of further output.
         */
@@ -849,6 +836,37 @@ out:
        return (error);
 }
 
+/*
+ * Accept a connection.  Essentially all the work is done at higher
+ * levels; just return the address of the peer, storing through addr.
+ */
+int
+tcp_accept(struct socket *so, struct mbuf *nam)
+{
+       struct inpcb *inp;
+       struct tcpcb *tp;
+       int error;
+       short ostate;
+
+       soassertlocked(so);
+
+       if ((error = tcp_sogetpcb(so, &inp, &tp)))
+               return (error);
+
+       if (so->so_options & SO_DEBUG)
+               ostate = tp->t_state;
+
+#ifdef INET6
+       if (inp->inp_flags & INP_IPV6)
+               in6_setpeeraddr(inp, nam);
+       else
+#endif
+               in_setpeeraddr(inp, nam);
+
+       if (so->so_options & SO_DEBUG)
+               tcp_trace(TA_USER, ostate, tp, tp, NULL, PRU_ACCEPT, 0);
+       return (error);
+}
 
 /*
  * Initiate (or continue) disconnect.
index 6250b3f..5657627 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: tcp_var.h,v 1.144 2022/08/21 22:45:55 mvs Exp $       */
+/*     $OpenBSD: tcp_var.h,v 1.145 2022/08/22 08:08:46 mvs Exp $       */
 /*     $NetBSD: tcp_var.h,v 1.17 1996/02/13 23:44:24 christos Exp $    */
 
 /*
@@ -717,6 +717,7 @@ int  tcp_detach(struct socket *);
 int     tcp_bind(struct socket *, struct mbuf *, struct proc *);
 int     tcp_listen(struct socket *);
 int     tcp_connect(struct socket *, struct mbuf *);
+int     tcp_accept(struct socket *, struct mbuf *);
 void    tcp_xmit_timer(struct tcpcb *, int);
 void    tcpdropoldhalfopen(struct tcpcb *, u_int16_t);
 void    tcp_sack_option(struct tcpcb *,struct tcphdr *,u_char *,int);
index 2f0c795..e813571 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: udp_usrreq.c,v 1.285 2022/08/21 22:45:55 mvs Exp $    */
+/*     $OpenBSD: udp_usrreq.c,v 1.286 2022/08/22 08:08:46 mvs Exp $    */
 /*     $NetBSD: udp_usrreq.c,v 1.28 1996/03/16 23:54:03 christos Exp $ */
 
 /*
@@ -1080,10 +1080,6 @@ udp_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *addr,
                error = EOPNOTSUPP;
                break;
 
-       case PRU_ACCEPT:
-               error = EOPNOTSUPP;
-               break;
-
        case PRU_DISCONNECT:
 #ifdef INET6
                if (inp->inp_flags & INP_IPV6) {
index e3b0898..050894e 100644 (file)
@@ -1,4 +1,4 @@
-/*      $OpenBSD: ip6_divert.c,v 1.72 2022/08/21 22:45:55 mvs Exp $ */
+/*      $OpenBSD: ip6_divert.c,v 1.73 2022/08/22 08:08:46 mvs Exp $ */
 
 /*
  * Copyright (c) 2009 Michele Marchetto <michele@openbsd.org>
@@ -298,7 +298,6 @@ divert6_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *addr,
                break;
 
        case PRU_CONNECT2:
-       case PRU_ACCEPT:
        case PRU_DISCONNECT:
        case PRU_SENDOOB:
        case PRU_FASTTIMO:
index d4bd78e..3809f77 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: raw_ip6.c,v 1.153 2022/08/21 22:45:55 mvs Exp $       */
+/*     $OpenBSD: raw_ip6.c,v 1.154 2022/08/22 08:08:46 mvs Exp $       */
 /*     $KAME: raw_ip6.c,v 1.69 2001/03/04 15:55:44 itojun Exp $        */
 
 /*
@@ -660,7 +660,6 @@ rip6_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *nam,
        /*
         * Not supported.
         */
-       case PRU_ACCEPT:
        case PRU_SENDOOB:
        case PRU_RCVD:
        case PRU_RCVOOB:
index f153e45..549d489 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: protosw.h,v 1.40 2022/08/21 22:45:55 mvs Exp $        */
+/*     $OpenBSD: protosw.h,v 1.41 2022/08/22 08:08:47 mvs Exp $        */
 /*     $NetBSD: protosw.h,v 1.10 1996/04/09 20:55:32 cgd Exp $ */
 
 /*-
@@ -69,6 +69,7 @@ struct pr_usrreqs {
        int     (*pru_bind)(struct socket *, struct mbuf *, struct proc *);
        int     (*pru_listen)(struct socket *);
        int     (*pru_connect)(struct socket *, struct mbuf *);
+       int     (*pru_accept)(struct socket *, struct mbuf *);
 };
 
 struct protosw {
@@ -291,8 +292,9 @@ pru_connect(struct socket *so, struct mbuf *nam)
 static inline int
 pru_accept(struct socket *so, struct mbuf *nam)
 {
-       return (*so->so_proto->pr_usrreqs->pru_usrreq)(so,
-           PRU_ACCEPT, NULL, nam, NULL, curproc);
+       if (so->so_proto->pr_usrreqs->pru_accept)
+               return (*so->so_proto->pr_usrreqs->pru_accept)(so, nam);
+       return (EOPNOTSUPP);
 }
 
 static inline int
index 6498168..c319632 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: unpcb.h,v 1.30 2022/08/21 22:45:55 mvs Exp $  */
+/*     $OpenBSD: unpcb.h,v 1.31 2022/08/22 08:08:47 mvs Exp $  */
 /*     $NetBSD: unpcb.h,v 1.6 1994/06/29 06:46:08 cgd Exp $    */
 
 /*
@@ -116,6 +116,7 @@ int uipc_detach(struct socket *);
 int    uipc_bind(struct socket *, struct mbuf *, struct proc *);
 int    uipc_listen(struct socket *);
 int    uipc_connect(struct socket *, struct mbuf *);
+int    uipc_accept(struct socket *, struct mbuf *);
 
 void   unp_init(void);
 int    unp_bind(struct unpcb *, struct mbuf *, struct proc *);