Move PRU_RCVOOB request to (*pru_rcvoob)().
authormvs <mvs@openbsd.org>
Mon, 29 Aug 2022 08:08:17 +0000 (08:08 +0000)
committermvs <mvs@openbsd.org>
Mon, 29 Aug 2022 08:08:17 +0000 (08:08 +0000)
ok bluhm@

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

index 5593903..35fd195 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: uipc_usrreq.c,v 1.178 2022/08/28 21:35:11 mvs Exp $   */
+/*     $OpenBSD: uipc_usrreq.c,v 1.179 2022/08/29 08:08:17 mvs Exp $   */
 /*     $NetBSD: uipc_usrreq.c,v 1.18 1996/02/09 19:00:50 christos Exp $        */
 
 /*
@@ -247,7 +247,6 @@ uipc_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *nam,
                }
                break;
 
-       case PRU_RCVOOB:
        case PRU_SENDOOB:
                error = EOPNOTSUPP;
                break;
index 8d1185d..0ec4e3c 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: pfkeyv2.c,v 1.246 2022/08/28 21:35:11 mvs Exp $ */
+/* $OpenBSD: pfkeyv2.c,v 1.247 2022/08/29 08:08:17 mvs Exp $ */
 
 /*
  *     @(#)COPYRIGHT   1.1 (NRL) 17 January 1995
@@ -426,7 +426,6 @@ pfkeyv2_usrreq(struct socket *so, int req, struct mbuf *m,
                nam->m_len = pfkey_addr.sa_len;
                break;
 
-       case PRU_RCVOOB:
        case PRU_SENDOOB:
                error = EOPNOTSUPP;
                break;
index c7476a5..f4cfdeb 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: rtsock.c,v 1.347 2022/08/29 07:51:45 bluhm Exp $      */
+/*     $OpenBSD: rtsock.c,v 1.348 2022/08/29 08:08:17 mvs Exp $        */
 /*     $NetBSD: rtsock.c,v 1.18 1996/03/29 00:32:10 cgd Exp $  */
 
 /*
@@ -251,7 +251,6 @@ route_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *nam,
                nam->m_len = route_src.sa_len;
                break;
 
-       case PRU_RCVOOB:
        case PRU_SENDOOB:
                error = EOPNOTSUPP;
                break;
index 5a012b0..275f656 100644 (file)
@@ -1,4 +1,4 @@
-/*      $OpenBSD: ip_divert.c,v 1.80 2022/08/28 21:35:12 mvs Exp $ */
+/*      $OpenBSD: ip_divert.c,v 1.81 2022/08/29 08:08:17 mvs Exp $ */
 
 /*
  * Copyright (c) 2009 Michele Marchetto <michele@openbsd.org>
@@ -285,7 +285,6 @@ divert_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *addr,
        case PRU_SLOWTIMO:
        case PRU_PROTORCV:
        case PRU_PROTOSEND:
-       case PRU_RCVOOB:
                error =  EOPNOTSUPP;
                break;
 
index bb17045..ca617d9 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: raw_ip.c,v 1.141 2022/08/28 21:35:12 mvs Exp $        */
+/*     $OpenBSD: raw_ip.c,v 1.142 2022/08/29 08:08:17 mvs Exp $        */
 /*     $NetBSD: raw_ip.c,v 1.25 1996/02/18 18:58:33 christos Exp $     */
 
 /*
@@ -486,7 +486,6 @@ rip_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *nam,
         * Not supported.
         */
        case PRU_SENDOOB:
-       case PRU_RCVOOB:
                error = EOPNOTSUPP;
                break;
 
index cbb64ba..889acc2 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: tcp_usrreq.c,v 1.198 2022/08/28 21:35:12 mvs Exp $    */
+/*     $OpenBSD: tcp_usrreq.c,v 1.199 2022/08/29 08:08:17 mvs Exp $    */
 /*     $NetBSD: tcp_usrreq.c,v 1.20 1996/02/13 23:44:16 christos Exp $ */
 
 /*
@@ -125,6 +125,7 @@ const struct pr_usrreqs tcp_usrreqs = {
        .pru_send       = tcp_send,
        .pru_abort      = tcp_abort,
        .pru_sense      = tcp_sense,
+       .pru_rcvoob     = tcp_rcvoob,
 };
 
 static int pr_slowhz = PR_SLOWHZ;
@@ -228,24 +229,6 @@ tcp_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *nam,
                error = EOPNOTSUPP;
                break;
 
-       case PRU_RCVOOB:
-               if ((so->so_oobmark == 0 &&
-                   (so->so_state & SS_RCVATMARK) == 0) ||
-                   so->so_options & SO_OOBINLINE ||
-                   tp->t_oobflags & TCPOOB_HADDATA) {
-                       error = EINVAL;
-                       break;
-               }
-               if ((tp->t_oobflags & TCPOOB_HAVEDATA) == 0) {
-                       error = EWOULDBLOCK;
-                       break;
-               }
-               m->m_len = 1;
-               *mtod(m, caddr_t) = tp->t_iobc;
-               if (((long)nam & MSG_PEEK) == 0)
-                       tp->t_oobflags ^= (TCPOOB_HAVEDATA | TCPOOB_HADDATA);
-               break;
-
        case PRU_SENDOOB:
                if (sbspace(so, &so->so_snd) < -512) {
                        m_freem(m);
@@ -1000,6 +983,39 @@ tcp_sense(struct socket *so, struct stat *ub)
        return (0);
 }
 
+int
+tcp_rcvoob(struct socket *so, struct mbuf *m, int flags)
+{
+       struct inpcb *inp;
+       struct tcpcb *tp;
+       int error;
+
+       soassertlocked(so);
+
+       if ((error = tcp_sogetpcb(so, &inp, &tp)))
+               return (error);
+
+       if ((so->so_oobmark == 0 &&
+           (so->so_state & SS_RCVATMARK) == 0) ||
+           so->so_options & SO_OOBINLINE ||
+           tp->t_oobflags & TCPOOB_HADDATA) {
+               error = EINVAL;
+               goto out;
+       }
+       if ((tp->t_oobflags & TCPOOB_HAVEDATA) == 0) {
+               error = EWOULDBLOCK;
+               goto out;
+       }
+       m->m_len = 1;
+       *mtod(m, caddr_t) = tp->t_iobc;
+       if ((flags & MSG_PEEK) == 0)
+               tp->t_oobflags ^= (TCPOOB_HAVEDATA | TCPOOB_HADDATA);
+out:
+       if (so->so_options & SO_DEBUG)
+               tcp_trace(TA_USER, tp->t_state, tp, tp, NULL, PRU_RCVOOB, 0);
+       return (error);
+}
+
 /*
  * Initiate (or continue) disconnect.
  * If embryonic state, just send reset (once).
index 9d7f83b..56b9785 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: tcp_var.h,v 1.151 2022/08/28 21:35:12 mvs Exp $       */
+/*     $OpenBSD: tcp_var.h,v 1.152 2022/08/29 08:08:17 mvs Exp $       */
 /*     $NetBSD: tcp_var.h,v 1.17 1996/02/13 23:44:24 christos Exp $    */
 
 /*
@@ -726,6 +726,7 @@ int  tcp_send(struct socket *, struct mbuf *, struct mbuf *,
             struct mbuf *);
 int     tcp_abort(struct socket *);
 int     tcp_sense(struct socket *, struct stat *);
+int     tcp_rcvoob(struct socket *, struct mbuf *, int);
 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 ebd152c..2edbff0 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: udp_usrreq.c,v 1.293 2022/08/28 21:35:12 mvs Exp $    */
+/*     $OpenBSD: udp_usrreq.c,v 1.294 2022/08/29 08:08:17 mvs Exp $    */
 /*     $NetBSD: udp_usrreq.c,v 1.28 1996/03/16 23:54:03 christos Exp $ */
 
 /*
@@ -1111,7 +1111,6 @@ udp_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *addr,
        case PRU_SLOWTIMO:
        case PRU_PROTORCV:
        case PRU_PROTOSEND:
-       case PRU_RCVOOB:
                error =  EOPNOTSUPP;
                break;
 
index 93e1fe1..847e3c3 100644 (file)
@@ -1,4 +1,4 @@
-/*      $OpenBSD: ip6_divert.c,v 1.79 2022/08/28 21:35:12 mvs Exp $ */
+/*      $OpenBSD: ip6_divert.c,v 1.80 2022/08/29 08:08:17 mvs Exp $ */
 
 /*
  * Copyright (c) 2009 Michele Marchetto <michele@openbsd.org>
@@ -291,7 +291,6 @@ divert6_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *addr,
        case PRU_SLOWTIMO:
        case PRU_PROTORCV:
        case PRU_PROTOSEND:
-       case PRU_RCVOOB:
                error =  EOPNOTSUPP;
                break;
 
index deb4811..00fe919 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: raw_ip6.c,v 1.161 2022/08/28 21:35:12 mvs Exp $       */
+/*     $OpenBSD: raw_ip6.c,v 1.162 2022/08/29 08:08:17 mvs Exp $       */
 /*     $KAME: raw_ip6.c,v 1.69 2001/03/04 15:55:44 itojun Exp $        */
 
 /*
@@ -601,7 +601,6 @@ rip6_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *nam,
         * Not supported.
         */
        case PRU_SENDOOB:
-       case PRU_RCVOOB:
                error = EOPNOTSUPP;
                break;
 
index 6552a33..490d155 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: protosw.h,v 1.48 2022/08/28 21:35:12 mvs Exp $        */
+/*     $OpenBSD: protosw.h,v 1.49 2022/08/29 08:08:17 mvs Exp $        */
 /*     $NetBSD: protosw.h,v 1.10 1996/04/09 20:55:32 cgd Exp $ */
 
 /*-
@@ -78,6 +78,7 @@ struct pr_usrreqs {
                    struct mbuf *);
        int     (*pru_abort)(struct socket *);
        int     (*pru_sense)(struct socket *, struct stat *);
+       int     (*pru_rcvoob)(struct socket *, struct mbuf *, int);
 };
 
 struct protosw {
@@ -357,8 +358,9 @@ pru_sense(struct socket *so, struct stat *ub)
 static inline int
 pru_rcvoob(struct socket *so, struct mbuf *m, int flags)
 {
-       return (*so->so_proto->pr_usrreqs->pru_usrreq)(so,
-           PRU_RCVOOB, m, (struct mbuf *)(long)flags, NULL, curproc);
+       if (so->so_proto->pr_usrreqs->pru_rcvoob)
+               return (*so->so_proto->pr_usrreqs->pru_rcvoob)(so, m, flags);
+       return (EOPNOTSUPP);
 }
 
 static inline int