Index: sys/kern/uipc_usrreq.c
===================================================================
RCS file: /cvs/src/sys/kern/uipc_usrreq.c,v
retrieving revision 1.181
diff -u -p -r1.181 uipc_usrreq.c
--- sys/kern/uipc_usrreq.c      31 Aug 2022 21:23:02 -0000      1.181
+++ sys/kern/uipc_usrreq.c      31 Aug 2022 22:23:52 -0000
@@ -140,6 +140,7 @@ const struct pr_usrreqs uipc_usrreqs = {
        .pru_send       = uipc_send,
        .pru_abort      = uipc_abort,
        .pru_sense      = uipc_sense,
+       .pru_connect2   = uipc_connect2,
 };
 
 void
@@ -215,7 +216,6 @@ uipc_usrreq(struct socket *so, int req, 
     struct mbuf *control, struct proc *p)
 {
        struct unpcb *unp = sotounpcb(so);
-       struct unpcb *unp2;
        struct socket *so2;
        int error = 0;
 
@@ -232,21 +232,6 @@ uipc_usrreq(struct socket *so, int req, 
 
        switch (req) {
 
-       case PRU_CONNECT2:
-               error = unp_connect2(so, (struct socket *)nam);
-               if (!error) {
-                       unp->unp_connid.uid = p->p_ucred->cr_uid;
-                       unp->unp_connid.gid = p->p_ucred->cr_gid;
-                       unp->unp_connid.pid = p->p_p->ps_pid;
-                       unp->unp_flags |= UNP_FEIDS;
-                       unp2 = sotounpcb((struct socket *)nam);
-                       unp2->unp_connid.uid = p->p_ucred->cr_uid;
-                       unp2->unp_connid.gid = p->p_ucred->cr_gid;
-                       unp2->unp_connid.pid = p->p_p->ps_pid;
-                       unp2->unp_flags |= UNP_FEIDS;
-               }
-               break;
-
        case PRU_SOCKADDR:
                uipc_setaddr(unp, nam);
                break;
@@ -592,6 +577,27 @@ uipc_sense(struct socket *so, struct sta
            sb->st_mtim.tv_nsec =
            sb->st_ctim.tv_nsec = unp->unp_ctime.tv_nsec;
        sb->st_ino = unp->unp_ino;
+
+       return (0);
+}
+
+int
+uipc_connect2(struct socket *so, struct socket *so2)
+{
+       struct unpcb *unp = sotounpcb(so), *unp2 = sotounpcb(so2);
+       int error;
+       
+       if ((error = unp_connect2(so, so2)))
+               return (error);
+
+       unp->unp_connid.uid = curproc->p_ucred->cr_uid;
+       unp->unp_connid.gid = curproc->p_ucred->cr_gid;
+       unp->unp_connid.pid = curproc->p_p->ps_pid;
+       unp->unp_flags |= UNP_FEIDS;
+       unp2->unp_connid.uid = curproc->p_ucred->cr_uid;
+       unp2->unp_connid.gid = curproc->p_ucred->cr_gid;
+       unp2->unp_connid.pid = curproc->p_p->ps_pid;
+       unp2->unp_flags |= UNP_FEIDS;
 
        return (0);
 }
Index: sys/net/pfkeyv2.c
===================================================================
RCS file: /cvs/src/sys/net/pfkeyv2.c,v
retrieving revision 1.248
diff -u -p -r1.248 pfkeyv2.c
--- sys/net/pfkeyv2.c   31 Aug 2022 21:23:02 -0000      1.248
+++ sys/net/pfkeyv2.c   31 Aug 2022 22:23:52 -0000
@@ -412,11 +412,6 @@ pfkeyv2_usrreq(struct socket *so, int re
        }
 
        switch (req) {
-       /* no connect, bind, accept. Socket is connected from the start */
-       case PRU_CONNECT2:
-               error = EOPNOTSUPP;
-               break;
-
        /* minimal support, just implement a fake peer address */
        case PRU_SOCKADDR:
                error = EINVAL;
Index: sys/net/rtsock.c
===================================================================
RCS file: /cvs/src/sys/net/rtsock.c,v
retrieving revision 1.349
diff -u -p -r1.349 rtsock.c
--- sys/net/rtsock.c    31 Aug 2022 21:23:02 -0000      1.349
+++ sys/net/rtsock.c    31 Aug 2022 22:23:52 -0000
@@ -237,11 +237,6 @@ route_usrreq(struct socket *so, int req,
        }
 
        switch (req) {
-       /* no connect, bind, accept. Socket is connected from the start */
-       case PRU_CONNECT2:
-               error = EOPNOTSUPP;
-               break;
-
        /* minimal support, just implement a fake peer address */
        case PRU_SOCKADDR:
                error = EINVAL;
Index: sys/netinet/ip_divert.c
===================================================================
RCS file: /cvs/src/sys/netinet/ip_divert.c,v
retrieving revision 1.82
diff -u -p -r1.82 ip_divert.c
--- sys/netinet/ip_divert.c     31 Aug 2022 21:23:02 -0000      1.82
+++ sys/netinet/ip_divert.c     31 Aug 2022 22:23:52 -0000
@@ -279,7 +279,6 @@ divert_usrreq(struct socket *so, int req
                in_setpeeraddr(inp, addr);
                break;
 
-       case PRU_CONNECT2:
        case PRU_FASTTIMO:
        case PRU_SLOWTIMO:
        case PRU_PROTORCV:
Index: sys/netinet/raw_ip.c
===================================================================
RCS file: /cvs/src/sys/netinet/raw_ip.c,v
retrieving revision 1.143
diff -u -p -r1.143 raw_ip.c
--- sys/netinet/raw_ip.c        31 Aug 2022 21:23:02 -0000      1.143
+++ sys/netinet/raw_ip.c        31 Aug 2022 22:23:52 -0000
@@ -478,10 +478,6 @@ rip_usrreq(struct socket *so, int req, s
 
        switch (req) {
 
-       case PRU_CONNECT2:
-               error = EOPNOTSUPP;
-               break;
-
        case PRU_SOCKADDR:
                in_setsockaddr(inp, nam);
                break;
Index: sys/netinet/tcp_usrreq.c
===================================================================
RCS file: /cvs/src/sys/netinet/tcp_usrreq.c,v
retrieving revision 1.202
diff -u -p -r1.202 tcp_usrreq.c
--- sys/netinet/tcp_usrreq.c    31 Aug 2022 21:23:02 -0000      1.202
+++ sys/netinet/tcp_usrreq.c    31 Aug 2022 22:23:52 -0000
@@ -223,13 +223,6 @@ tcp_usrreq(struct socket *so, int req, s
 
        switch (req) {
 
-       /*
-        * Create a TCP connection between two sockets.
-        */
-       case PRU_CONNECT2:
-               error = EOPNOTSUPP;
-               break;
-
        case PRU_SOCKADDR:
 #ifdef INET6
                if (inp->inp_flags & INP_IPV6)
Index: sys/netinet/udp_usrreq.c
===================================================================
RCS file: /cvs/src/sys/netinet/udp_usrreq.c,v
retrieving revision 1.297
diff -u -p -r1.297 udp_usrreq.c
--- sys/netinet/udp_usrreq.c    31 Aug 2022 21:23:02 -0000      1.297
+++ sys/netinet/udp_usrreq.c    31 Aug 2022 22:23:52 -0000
@@ -1089,10 +1089,6 @@ udp_usrreq(struct socket *so, int req, s
         */
        switch (req) {
 
-       case PRU_CONNECT2:
-               error = EOPNOTSUPP;
-               break;
-
        case PRU_SOCKADDR:
 #ifdef INET6
                if (inp->inp_flags & INP_IPV6)
Index: sys/netinet6/ip6_divert.c
===================================================================
RCS file: /cvs/src/sys/netinet6/ip6_divert.c,v
retrieving revision 1.81
diff -u -p -r1.81 ip6_divert.c
--- sys/netinet6/ip6_divert.c   31 Aug 2022 21:23:02 -0000      1.81
+++ sys/netinet6/ip6_divert.c   31 Aug 2022 22:23:52 -0000
@@ -285,7 +285,6 @@ divert6_usrreq(struct socket *so, int re
                in6_setpeeraddr(inp, addr);
                break;
 
-       case PRU_CONNECT2:
        case PRU_FASTTIMO:
        case PRU_SLOWTIMO:
        case PRU_PROTORCV:
Index: sys/netinet6/raw_ip6.c
===================================================================
RCS file: /cvs/src/sys/netinet6/raw_ip6.c,v
retrieving revision 1.164
diff -u -p -r1.164 raw_ip6.c
--- sys/netinet6/raw_ip6.c      31 Aug 2022 21:23:02 -0000      1.164
+++ sys/netinet6/raw_ip6.c      31 Aug 2022 22:23:52 -0000
@@ -593,10 +593,6 @@ rip6_usrreq(struct socket *so, int req, 
        }
 
        switch (req) {
-       case PRU_CONNECT2:
-               error = EOPNOTSUPP;
-               break;
-
        case PRU_SOCKADDR:
                in6_setsockaddr(in6p, nam);
                break;
Index: sys/sys/protosw.h
===================================================================
RCS file: /cvs/src/sys/sys/protosw.h,v
retrieving revision 1.50
diff -u -p -r1.50 protosw.h
--- sys/sys/protosw.h   31 Aug 2022 21:23:02 -0000      1.50
+++ sys/sys/protosw.h   31 Aug 2022 22:23:52 -0000
@@ -81,6 +81,7 @@ struct pr_usrreqs {
        int     (*pru_rcvoob)(struct socket *, struct mbuf *, int);
        int     (*pru_sendoob)(struct socket *, struct mbuf *, struct mbuf *,
                    struct mbuf *);
+       int     (*pru_connect2)(struct socket *, struct socket *);
 };
 
 struct protosw {
@@ -395,8 +396,9 @@ pru_peeraddr(struct socket *so, struct m
 static inline int
 pru_connect2(struct socket *so1, struct socket *so2)
 {
-       return (*so1->so_proto->pr_usrreqs->pru_usrreq)(so1,
-           PRU_CONNECT2, NULL, (struct mbuf *)so2, NULL, curproc);
+       if (so1->so_proto->pr_usrreqs->pru_connect2)
+               return (*so1->so_proto->pr_usrreqs->pru_connect2)(so1, so2);
+       return (EOPNOTSUPP);
 }
 
 #endif
Index: sys/sys/unpcb.h
===================================================================
RCS file: /cvs/src/sys/sys/unpcb.h,v
retrieving revision 1.37
diff -u -p -r1.37 unpcb.h
--- sys/sys/unpcb.h     28 Aug 2022 21:35:12 -0000      1.37
+++ sys/sys/unpcb.h     31 Aug 2022 22:23:52 -0000
@@ -127,6 +127,7 @@ int uipc_send(struct socket *, struct mb
            struct mbuf *);
 int    uipc_abort(struct socket *);
 int    uipc_sense(struct socket *, struct stat *);
+int    uipc_connect2(struct socket *, struct socket *);
 
 void   unp_init(void);
 int    unp_bind(struct unpcb *, struct mbuf *, struct proc *);

Reply via email to