Module Name: src
Committed By: rtr
Date: Wed Jul 23 13:17:19 UTC 2014
Modified Files:
src/sys/dev: kttcp.c
src/sys/kern: uipc_socket.c uipc_usrreq.c
src/sys/net: raw_usrreq.c rtsock.c
src/sys/netatalk: ddp_usrreq.c
src/sys/netbt: hci_socket.c l2cap_socket.c rfcomm_socket.c sco_socket.c
src/sys/netinet: raw_ip.c tcp_usrreq.c udp_usrreq.c
src/sys/netinet6: raw_ip6.c udp6_usrreq.c
src/sys/netipsec: keysock.c
src/sys/netmpls: mpls_proto.c
src/sys/netnatm: natm.c
src/sys/rump/net/lib/libsockin: sockin.c
src/sys/sys: protosw.h
Log Message:
split PRU_SENDOOB and PRU_RCVOOB function out of pr_generic() usrreq
switches and put into separate functions
xxx_sendoob(struct socket *, struct mbuf *, struct mbuf *)
xxx_recvoob(struct socket *, struct mbuf *, int)
- always KASSERT(solocked(so)) even if request is not implemented
- replace calls to pr_generic() with req = PRU_{SEND,RCV}OOB with
calls to pr_{send,recv}oob() respectively.
there is still some tweaking of m_freem(m) and m_freem(control) to come
for consistency. not performed with this commit for clarity.
reviewed by rmind
To generate a diff of this commit:
cvs rdiff -u -r1.33 -r1.34 src/sys/dev/kttcp.c
cvs rdiff -u -r1.225 -r1.226 src/sys/kern/uipc_socket.c
cvs rdiff -u -r1.159 -r1.160 src/sys/kern/uipc_usrreq.c
cvs rdiff -u -r1.43 -r1.44 src/sys/net/raw_usrreq.c
cvs rdiff -u -r1.155 -r1.156 src/sys/net/rtsock.c
cvs rdiff -u -r1.53 -r1.54 src/sys/netatalk/ddp_usrreq.c
cvs rdiff -u -r1.32 -r1.33 src/sys/netbt/hci_socket.c
cvs rdiff -u -r1.23 -r1.24 src/sys/netbt/l2cap_socket.c
cvs rdiff -u -r1.24 -r1.25 src/sys/netbt/rfcomm_socket.c
cvs rdiff -u -r1.25 -r1.26 src/sys/netbt/sco_socket.c
cvs rdiff -u -r1.134 -r1.135 src/sys/netinet/raw_ip.c
cvs rdiff -u -r1.188 -r1.189 src/sys/netinet/tcp_usrreq.c
cvs rdiff -u -r1.208 -r1.209 src/sys/netinet/udp_usrreq.c
cvs rdiff -u -r1.127 -r1.128 src/sys/netinet6/raw_ip6.c
cvs rdiff -u -r1.107 -r1.108 src/sys/netinet6/udp6_usrreq.c
cvs rdiff -u -r1.35 -r1.36 src/sys/netipsec/keysock.c
cvs rdiff -u -r1.15 -r1.16 src/sys/netmpls/mpls_proto.c
cvs rdiff -u -r1.37 -r1.38 src/sys/netnatm/natm.c
cvs rdiff -u -r1.49 -r1.50 src/sys/rump/net/lib/libsockin/sockin.c
cvs rdiff -u -r1.52 -r1.53 src/sys/sys/protosw.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/dev/kttcp.c
diff -u src/sys/dev/kttcp.c:1.33 src/sys/dev/kttcp.c:1.34
--- src/sys/dev/kttcp.c:1.33 Sun May 18 14:46:15 2014
+++ src/sys/dev/kttcp.c Wed Jul 23 13:17:18 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: kttcp.c,v 1.33 2014/05/18 14:46:15 rmind Exp $ */
+/* $NetBSD: kttcp.c,v 1.34 2014/07/23 13:17:18 rtr Exp $ */
/*
* Copyright (c) 2002 Wasabi Systems, Inc.
@@ -42,7 +42,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kttcp.c,v 1.33 2014/05/18 14:46:15 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kttcp.c,v 1.34 2014/07/23 13:17:18 rtr Exp $");
#include <sys/param.h>
#include <sys/types.h>
@@ -319,9 +319,12 @@ nopages:
so->so_options |= SO_DONTROUTE;
if (resid > 0)
so->so_state |= SS_MORETOCOME;
- error = (*so->so_proto->pr_usrreqs->pr_generic)(so,
- (flags & MSG_OOB) ? PRU_SENDOOB : PRU_SEND,
- top, NULL, NULL, l);
+ if (flags & MSG_OOB)
+ error = (*so->so_proto->pr_usrreqs->pr_sendoob)(so,
+ top, NULL);
+ else
+ error = (*so->so_proto->pr_usrreqs->pr_generic)(so,
+ PRU_SEND, top, NULL, NULL, l);
if (dontroute)
so->so_options &= ~SO_DONTROUTE;
if (resid > 0)
@@ -367,8 +370,7 @@ kttcp_soreceive(struct socket *so, unsig
if (flags & MSG_OOB) {
m = m_get(M_WAIT, MT_DATA);
solock(so);
- error = (*pr->pr_usrreqs->pr_generic)(so, PRU_RCVOOB, m,
- (struct mbuf *)(long)(flags & MSG_PEEK), NULL, NULL);
+ error = (*pr->pr_usrreqs->pr_recvoob)(so, m, flags & MSG_PEEK);
sounlock(so);
if (error)
goto bad;
Index: src/sys/kern/uipc_socket.c
diff -u src/sys/kern/uipc_socket.c:1.225 src/sys/kern/uipc_socket.c:1.226
--- src/sys/kern/uipc_socket.c:1.225 Wed Jul 9 14:41:42 2014
+++ src/sys/kern/uipc_socket.c Wed Jul 23 13:17:18 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: uipc_socket.c,v 1.225 2014/07/09 14:41:42 rtr Exp $ */
+/* $NetBSD: uipc_socket.c,v 1.226 2014/07/23 13:17:18 rtr Exp $ */
/*-
* Copyright (c) 2002, 2007, 2008, 2009 The NetBSD Foundation, Inc.
@@ -71,7 +71,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uipc_socket.c,v 1.225 2014/07/09 14:41:42 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uipc_socket.c,v 1.226 2014/07/23 13:17:18 rtr Exp $");
#include "opt_compat_netbsd.h"
#include "opt_sock_counters.h"
@@ -1053,9 +1053,12 @@ sosend(struct socket *so, struct mbuf *a
so->so_options |= SO_DONTROUTE;
if (resid > 0)
so->so_state |= SS_MORETOCOME;
- error = (*so->so_proto->pr_usrreqs->pr_generic)(so,
- (flags & MSG_OOB) ? PRU_SENDOOB : PRU_SEND,
- top, addr, control, curlwp);
+ if (flags & MSG_OOB)
+ error = (*so->so_proto->pr_usrreqs->pr_sendoob)(so,
+ top, control);
+ else
+ error = (*so->so_proto->pr_usrreqs->pr_generic)(so,
+ PRU_SEND, top, addr, control, curlwp);
if (dontroute)
so->so_options &= ~SO_DONTROUTE;
if (resid > 0)
@@ -1167,8 +1170,7 @@ soreceive(struct socket *so, struct mbuf
if (flags & MSG_OOB) {
m = m_get(M_WAIT, MT_DATA);
solock(so);
- error = (*pr->pr_usrreqs->pr_generic)(so, PRU_RCVOOB, m,
- (struct mbuf *)(long)(flags & MSG_PEEK), NULL, l);
+ error = (*pr->pr_usrreqs->pr_recvoob)(so, m, flags & MSG_PEEK);
sounlock(so);
if (error)
goto bad;
Index: src/sys/kern/uipc_usrreq.c
diff -u src/sys/kern/uipc_usrreq.c:1.159 src/sys/kern/uipc_usrreq.c:1.160
--- src/sys/kern/uipc_usrreq.c:1.159 Wed Jul 9 14:41:42 2014
+++ src/sys/kern/uipc_usrreq.c Wed Jul 23 13:17:18 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: uipc_usrreq.c,v 1.159 2014/07/09 14:41:42 rtr Exp $ */
+/* $NetBSD: uipc_usrreq.c,v 1.160 2014/07/23 13:17:18 rtr Exp $ */
/*-
* Copyright (c) 1998, 2000, 2004, 2008, 2009 The NetBSD Foundation, Inc.
@@ -96,7 +96,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uipc_usrreq.c,v 1.159 2014/07/09 14:41:42 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uipc_usrreq.c,v 1.160 2014/07/23 13:17:18 rtr Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -366,6 +366,25 @@ unp_setaddr(struct socket *so, struct mb
}
static int
+unp_recvoob(struct socket *so, struct mbuf *m, int flags)
+{
+ KASSERT(solocked(so));
+
+ return EOPNOTSUPP;
+}
+
+static int
+unp_sendoob(struct socket *so, struct mbuf *m, struct mbuf * control)
+{
+ KASSERT(solocked(so));
+
+ m_freem(m);
+ m_freem(control);
+
+ return EOPNOTSUPP;
+}
+
+static int
unp_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *nam,
struct mbuf *control, struct lwp *l)
{
@@ -381,11 +400,13 @@ unp_usrreq(struct socket *so, int req, s
KASSERT(req != PRU_SENSE);
KASSERT(req != PRU_PEERADDR);
KASSERT(req != PRU_SOCKADDR);
+ KASSERT(req != PRU_RCVOOB);
+ KASSERT(req != PRU_SENDOOB);
KASSERT(solocked(so));
unp = sotounpcb(so);
- KASSERT(!control || (req == PRU_SEND || req == PRU_SENDOOB));
+ KASSERT(!control || req == PRU_SEND);
if (unp == NULL) {
error = EINVAL;
goto release;
@@ -581,16 +602,6 @@ unp_usrreq(struct socket *so, int req, s
unp_detach(so);
break;
- case PRU_RCVOOB:
- error = EOPNOTSUPP;
- break;
-
- case PRU_SENDOOB:
- m_freem(control);
- m_freem(m);
- error = EOPNOTSUPP;
- break;
-
default:
panic("piusrreq");
}
@@ -1862,5 +1873,7 @@ const struct pr_usrreqs unp_usrreqs = {
.pr_stat = unp_stat,
.pr_peeraddr = unp_peeraddr,
.pr_sockaddr = unp_sockaddr,
+ .pr_recvoob = unp_recvoob,
+ .pr_sendoob = unp_sendoob,
.pr_generic = unp_usrreq,
};
Index: src/sys/net/raw_usrreq.c
diff -u src/sys/net/raw_usrreq.c:1.43 src/sys/net/raw_usrreq.c:1.44
--- src/sys/net/raw_usrreq.c:1.43 Wed Jul 9 14:41:42 2014
+++ src/sys/net/raw_usrreq.c Wed Jul 23 13:17:18 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: raw_usrreq.c,v 1.43 2014/07/09 14:41:42 rtr Exp $ */
+/* $NetBSD: raw_usrreq.c,v 1.44 2014/07/23 13:17:18 rtr Exp $ */
/*
* Copyright (c) 1980, 1986, 1993
@@ -36,7 +36,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: raw_usrreq.c,v 1.43 2014/07/09 14:41:42 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: raw_usrreq.c,v 1.44 2014/07/23 13:17:18 rtr Exp $");
#include <sys/param.h>
#include <sys/mbuf.h>
@@ -167,11 +167,13 @@ raw_usrreq(struct socket *so, int req, s
KASSERT(req != PRU_SENSE);
KASSERT(req != PRU_PEERADDR);
KASSERT(req != PRU_SOCKADDR);
+ KASSERT(req != PRU_RCVOOB);
+ KASSERT(req != PRU_SENDOOB);
s = splsoftnet();
KERNEL_LOCK(1, NULL);
- KASSERT(!control || (req == PRU_SEND || req == PRU_SENDOOB));
+ KASSERT(!control || req == PRU_SEND);
if (rp == NULL) {
error = EINVAL;
goto release;
@@ -241,19 +243,6 @@ raw_usrreq(struct socket *so, int req, s
raw_disconnect(rp);
break;
- /*
- * Not supported.
- */
- case PRU_RCVOOB:
- error = EOPNOTSUPP;
- break;
-
- case PRU_SENDOOB:
- m_freem(control);
- m_freem(m);
- error = EOPNOTSUPP;
- break;
-
default:
panic("raw_usrreq");
}
Index: src/sys/net/rtsock.c
diff -u src/sys/net/rtsock.c:1.155 src/sys/net/rtsock.c:1.156
--- src/sys/net/rtsock.c:1.155 Wed Jul 9 14:41:42 2014
+++ src/sys/net/rtsock.c Wed Jul 23 13:17:18 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: rtsock.c,v 1.155 2014/07/09 14:41:42 rtr Exp $ */
+/* $NetBSD: rtsock.c,v 1.156 2014/07/23 13:17:18 rtr Exp $ */
/*
* Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -61,7 +61,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rtsock.c,v 1.155 2014/07/09 14:41:42 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rtsock.c,v 1.156 2014/07/23 13:17:18 rtr Exp $");
#ifdef _KERNEL_OPT
#include "opt_inet.h"
@@ -281,6 +281,26 @@ COMPATNAME(route_sockaddr)(struct socket
}
static int
+COMPATNAME(route_recvoob)(struct socket *so, struct mbuf *m, int flags)
+{
+ KASSERT(solocked(so));
+
+ return EOPNOTSUPP;
+}
+
+static int
+COMPATNAME(route_sendoob)(struct socket *so, struct mbuf *m,
+ struct mbuf *control)
+{
+ KASSERT(solocked(so));
+
+ m_freem(m);
+ m_freem(control);
+
+ return EOPNOTSUPP;
+}
+
+static int
COMPATNAME(route_usrreq)(struct socket *so, int req, struct mbuf *m,
struct mbuf *nam, struct mbuf *control, struct lwp *l)
{
@@ -293,6 +313,8 @@ COMPATNAME(route_usrreq)(struct socket *
KASSERT(req != PRU_SENSE);
KASSERT(req != PRU_PEERADDR);
KASSERT(req != PRU_SOCKADDR);
+ KASSERT(req != PRU_RCVOOB);
+ KASSERT(req != PRU_SENDOOB);
s = splsoftnet();
error = raw_usrreq(so, req, m, nam, control, l);
@@ -1394,6 +1416,8 @@ static const struct pr_usrreqs route_usr
.pr_stat = COMPATNAME(route_stat_wrapper),
.pr_peeraddr = COMPATNAME(route_peeraddr_wrapper),
.pr_sockaddr = COMPATNAME(route_sockaddr_wrapper),
+ .pr_recvoob = COMPATNAME(route_recvoob_wrapper),
+ .pr_sendoob = COMPATNAME(route_sendoob_wrapper),
.pr_generic = COMPATNAME(route_usrreq_wrapper),
};
Index: src/sys/netatalk/ddp_usrreq.c
diff -u src/sys/netatalk/ddp_usrreq.c:1.53 src/sys/netatalk/ddp_usrreq.c:1.54
--- src/sys/netatalk/ddp_usrreq.c:1.53 Wed Jul 9 14:41:42 2014
+++ src/sys/netatalk/ddp_usrreq.c Wed Jul 23 13:17:18 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: ddp_usrreq.c,v 1.53 2014/07/09 14:41:42 rtr Exp $ */
+/* $NetBSD: ddp_usrreq.c,v 1.54 2014/07/23 13:17:18 rtr Exp $ */
/*
* Copyright (c) 1990,1991 Regents of The University of Michigan.
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ddp_usrreq.c,v 1.53 2014/07/09 14:41:42 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ddp_usrreq.c,v 1.54 2014/07/23 13:17:18 rtr Exp $");
#include "opt_mbuftrace.h"
@@ -89,6 +89,8 @@ ddp_usrreq(struct socket *so, int req, s
KASSERT(req != PRU_SENSE);
KASSERT(req != PRU_PEERADDR);
KASSERT(req != PRU_SOCKADDR);
+ KASSERT(req != PRU_RCVOOB);
+ KASSERT(req != PRU_SENDOOB);
ddp = sotoddpcb(so);
@@ -171,7 +173,6 @@ ddp_usrreq(struct socket *so, int req, s
case PRU_LISTEN:
case PRU_CONNECT2:
- case PRU_SENDOOB:
case PRU_FASTTIMO:
case PRU_SLOWTIMO:
case PRU_PROTORCV:
@@ -180,7 +181,6 @@ ddp_usrreq(struct socket *so, int req, s
break;
case PRU_RCVD:
- case PRU_RCVOOB:
/*
* Don't mfree. Good architecture...
*/
@@ -512,6 +512,25 @@ ddp_sockaddr(struct socket *so, struct m
return 0;
}
+static int
+ddp_recvoob(struct socket *so, struct mbuf *m, int flags)
+{
+ KASSERT(solocked(so));
+
+ return EOPNOTSUPP;
+}
+
+static int
+ddp_sendoob(struct socket *so, struct mbuf *m, struct mbuf *control)
+{
+ KASSERT(solocked(so));
+
+ if (m)
+ m_freem(m);
+
+ return EOPNOTSUPP;
+}
+
/*
* For the moment, this just find the pcb with the correct local address.
* In the future, this will actually do some real searching, so we can use
@@ -590,6 +609,8 @@ PR_WRAP_USRREQS(ddp)
#define ddp_stat ddp_stat_wrapper
#define ddp_peeraddr ddp_peeraddr_wrapper
#define ddp_sockaddr ddp_sockaddr_wrapper
+#define ddp_recvoob ddp_recvoob_wrapper
+#define ddp_sendoob ddp_sendoob_wrapper
#define ddp_usrreq ddp_usrreq_wrapper
const struct pr_usrreqs ddp_usrreqs = {
@@ -600,6 +621,8 @@ const struct pr_usrreqs ddp_usrreqs = {
.pr_stat = ddp_stat,
.pr_peeraddr = ddp_peeraddr,
.pr_sockaddr = ddp_sockaddr,
+ .pr_recvoob = ddp_recvoob,
+ .pr_sendoob = ddp_sendoob,
.pr_generic = ddp_usrreq,
};
Index: src/sys/netbt/hci_socket.c
diff -u src/sys/netbt/hci_socket.c:1.32 src/sys/netbt/hci_socket.c:1.33
--- src/sys/netbt/hci_socket.c:1.32 Wed Jul 9 14:41:42 2014
+++ src/sys/netbt/hci_socket.c Wed Jul 23 13:17:18 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: hci_socket.c,v 1.32 2014/07/09 14:41:42 rtr Exp $ */
+/* $NetBSD: hci_socket.c,v 1.33 2014/07/23 13:17:18 rtr Exp $ */
/*-
* Copyright (c) 2005 Iain Hibbert.
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: hci_socket.c,v 1.32 2014/07/09 14:41:42 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: hci_socket.c,v 1.33 2014/07/23 13:17:18 rtr Exp $");
/* load symbolic names */
#ifdef BLUETOOTH_DEBUG
@@ -547,6 +547,27 @@ hci_sockaddr(struct socket *so, struct m
return 0;
}
+static int
+hci_recvoob(struct socket *so, struct mbuf *m, int flags)
+{
+ KASSERT(solocked(so));
+
+ return EOPNOTSUPP;
+}
+
+static int
+hci_sendoob(struct socket *so, struct mbuf *m, struct mbuf *control)
+{
+ KASSERT(solocked(so));
+
+ if (m)
+ m_freem(m);
+ if (control)
+ m_freem(control);
+
+ return EOPNOTSUPP;
+}
+
/*
* User Request.
* up is socket
@@ -573,6 +594,8 @@ hci_usrreq(struct socket *up, int req, s
KASSERT(req != PRU_SENSE);
KASSERT(req != PRU_PEERADDR);
KASSERT(req != PRU_SOCKADDR);
+ KASSERT(req != PRU_RCVOOB);
+ KASSERT(req != PRU_SENDOOB);
switch(req) {
case PRU_PURGEIF:
@@ -665,12 +688,10 @@ hci_usrreq(struct socket *up, int req, s
return hci_send(pcb, m, (sa ? &sa->bt_bdaddr : &pcb->hp_raddr));
case PRU_RCVD:
- case PRU_RCVOOB:
return EOPNOTSUPP; /* (no release) */
case PRU_CONNECT2:
case PRU_LISTEN:
- case PRU_SENDOOB:
case PRU_FASTTIMO:
case PRU_SLOWTIMO:
case PRU_PROTORCV:
@@ -905,6 +926,8 @@ PR_WRAP_USRREQS(hci)
#define hci_stat hci_stat_wrapper
#define hci_peeraddr hci_peeraddr_wrapper
#define hci_sockaddr hci_sockaddr_wrapper
+#define hci_recvoob hci_recvoob_wrapper
+#define hci_sendoob hci_sendoob_wrapper
#define hci_usrreq hci_usrreq_wrapper
const struct pr_usrreqs hci_usrreqs = {
@@ -915,5 +938,7 @@ const struct pr_usrreqs hci_usrreqs = {
.pr_stat = hci_stat,
.pr_peeraddr = hci_peeraddr,
.pr_sockaddr = hci_sockaddr,
+ .pr_recvoob = hci_recvoob,
+ .pr_sendoob = hci_sendoob,
.pr_generic = hci_usrreq,
};
Index: src/sys/netbt/l2cap_socket.c
diff -u src/sys/netbt/l2cap_socket.c:1.23 src/sys/netbt/l2cap_socket.c:1.24
--- src/sys/netbt/l2cap_socket.c:1.23 Wed Jul 9 14:41:42 2014
+++ src/sys/netbt/l2cap_socket.c Wed Jul 23 13:17:18 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: l2cap_socket.c,v 1.23 2014/07/09 14:41:42 rtr Exp $ */
+/* $NetBSD: l2cap_socket.c,v 1.24 2014/07/23 13:17:18 rtr Exp $ */
/*-
* Copyright (c) 2005 Iain Hibbert.
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: l2cap_socket.c,v 1.23 2014/07/09 14:41:42 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: l2cap_socket.c,v 1.24 2014/07/23 13:17:18 rtr Exp $");
/* load symbolic names */
#ifdef BLUETOOTH_DEBUG
@@ -177,6 +177,27 @@ l2cap_sockaddr(struct socket *so, struct
return l2cap_sockaddr_pcb(pcb, sa);
}
+static int
+l2cap_recvoob(struct socket *so, struct mbuf *m, int flags)
+{
+ KASSERT(solocked(so));
+
+ return EOPNOTSUPP;
+}
+
+static int
+l2cap_sendoob(struct socket *so, struct mbuf *m, struct mbuf *control)
+{
+ KASSERT(solocked(so));
+
+ if (m)
+ m_freem(m);
+ if (control)
+ m_freem(control);
+
+ return EOPNOTSUPP;
+}
+
/*
* User Request.
* up is socket
@@ -209,6 +230,8 @@ l2cap_usrreq(struct socket *up, int req,
KASSERT(req != PRU_SENSE);
KASSERT(req != PRU_PEERADDR);
KASSERT(req != PRU_SOCKADDR);
+ KASSERT(req != PRU_RCVOOB);
+ KASSERT(req != PRU_SENDOOB);
switch (req) {
case PRU_PURGEIF:
@@ -283,14 +306,12 @@ l2cap_usrreq(struct socket *up, int req,
return l2cap_send(pcb, m0);
case PRU_RCVD:
- case PRU_RCVOOB:
return EOPNOTSUPP; /* (no release) */
case PRU_LISTEN:
return l2cap_listen(pcb);
case PRU_CONNECT2:
- case PRU_SENDOOB:
case PRU_FASTTIMO:
case PRU_SLOWTIMO:
case PRU_PROTORCV:
@@ -459,6 +480,8 @@ PR_WRAP_USRREQS(l2cap)
#define l2cap_stat l2cap_stat_wrapper
#define l2cap_peeraddr l2cap_peeraddr_wrapper
#define l2cap_sockaddr l2cap_sockaddr_wrapper
+#define l2cap_recvoob l2cap_recvoob_wrapper
+#define l2cap_sendoob l2cap_sendoob_wrapper
#define l2cap_usrreq l2cap_usrreq_wrapper
const struct pr_usrreqs l2cap_usrreqs = {
@@ -469,5 +492,7 @@ const struct pr_usrreqs l2cap_usrreqs =
.pr_stat = l2cap_stat,
.pr_peeraddr = l2cap_peeraddr,
.pr_sockaddr = l2cap_sockaddr,
+ .pr_recvoob = l2cap_recvoob,
+ .pr_sendoob = l2cap_sendoob,
.pr_generic = l2cap_usrreq,
};
Index: src/sys/netbt/rfcomm_socket.c
diff -u src/sys/netbt/rfcomm_socket.c:1.24 src/sys/netbt/rfcomm_socket.c:1.25
--- src/sys/netbt/rfcomm_socket.c:1.24 Wed Jul 9 14:41:42 2014
+++ src/sys/netbt/rfcomm_socket.c Wed Jul 23 13:17:18 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: rfcomm_socket.c,v 1.24 2014/07/09 14:41:42 rtr Exp $ */
+/* $NetBSD: rfcomm_socket.c,v 1.25 2014/07/23 13:17:18 rtr Exp $ */
/*-
* Copyright (c) 2006 Itronix Inc.
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rfcomm_socket.c,v 1.24 2014/07/09 14:41:42 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rfcomm_socket.c,v 1.25 2014/07/23 13:17:18 rtr Exp $");
/* load symbolic names */
#ifdef BLUETOOTH_DEBUG
@@ -185,6 +185,27 @@ rfcomm_sockaddr(struct socket *so, struc
return rfcomm_sockaddr_pcb(pcb, sa);
}
+static int
+rfcomm_recvoob(struct socket *so, struct mbuf *m, int flags)
+{
+ KASSERT(solocked(so));
+
+ return EOPNOTSUPP;
+}
+
+static int
+rfcomm_sendoob(struct socket *so, struct mbuf *m, struct mbuf *control)
+{
+ KASSERT(solocked(so));
+
+ if (m)
+ m_freem(m);
+ if (control)
+ m_freem(control);
+
+ return EOPNOTSUPP;
+}
+
/*
* User Request.
* up is socket
@@ -217,6 +238,8 @@ rfcomm_usrreq(struct socket *up, int req
KASSERT(req != PRU_SENSE);
KASSERT(req != PRU_PEERADDR);
KASSERT(req != PRU_SOCKADDR);
+ KASSERT(req != PRU_RCVOOB);
+ KASSERT(req != PRU_SENDOOB);
switch (req) {
case PRU_PURGEIF:
@@ -284,14 +307,10 @@ rfcomm_usrreq(struct socket *up, int req
case PRU_RCVD:
return rfcomm_rcvd(pcb, sbspace(&up->so_rcv));
- case PRU_RCVOOB:
- return EOPNOTSUPP; /* (no release) */
-
case PRU_LISTEN:
return rfcomm_listen(pcb);
case PRU_CONNECT2:
- case PRU_SENDOOB:
case PRU_FASTTIMO:
case PRU_SLOWTIMO:
case PRU_PROTORCV:
@@ -472,6 +491,8 @@ PR_WRAP_USRREQS(rfcomm)
#define rfcomm_stat rfcomm_stat_wrapper
#define rfcomm_peeraddr rfcomm_peeraddr_wrapper
#define rfcomm_sockaddr rfcomm_sockaddr_wrapper
+#define rfcomm_recvoob rfcomm_recvoob_wrapper
+#define rfcomm_sendoob rfcomm_sendoob_wrapper
#define rfcomm_usrreq rfcomm_usrreq_wrapper
const struct pr_usrreqs rfcomm_usrreqs = {
@@ -482,5 +503,7 @@ const struct pr_usrreqs rfcomm_usrreqs =
.pr_stat = rfcomm_stat,
.pr_peeraddr = rfcomm_peeraddr,
.pr_sockaddr = rfcomm_sockaddr,
+ .pr_recvoob = rfcomm_recvoob,
+ .pr_sendoob = rfcomm_sendoob,
.pr_generic = rfcomm_usrreq,
};
Index: src/sys/netbt/sco_socket.c
diff -u src/sys/netbt/sco_socket.c:1.25 src/sys/netbt/sco_socket.c:1.26
--- src/sys/netbt/sco_socket.c:1.25 Wed Jul 9 14:41:42 2014
+++ src/sys/netbt/sco_socket.c Wed Jul 23 13:17:18 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: sco_socket.c,v 1.25 2014/07/09 14:41:42 rtr Exp $ */
+/* $NetBSD: sco_socket.c,v 1.26 2014/07/23 13:17:18 rtr Exp $ */
/*-
* Copyright (c) 2006 Itronix Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sco_socket.c,v 1.25 2014/07/09 14:41:42 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sco_socket.c,v 1.26 2014/07/23 13:17:18 rtr Exp $");
/* load symbolic names */
#ifdef BLUETOOTH_DEBUG
@@ -168,6 +168,27 @@ sco_sockaddr(struct socket *so, struct m
return sco_sockaddr_pcb(pcb, sa);
}
+static int
+sco_recvoob(struct socket *so, struct mbuf *m, int flags)
+{
+ KASSERT(solocked(so));
+
+ return EOPNOTSUPP;
+}
+
+static int
+sco_sendoob(struct socket *so, struct mbuf *m, struct mbuf *control)
+{
+ KASSERT(solocked(so));
+
+ if (m)
+ m_freem(m);
+ if (control)
+ m_freem(control);
+
+ return EOPNOTSUPP;
+}
+
/*
* User Request.
* up is socket
@@ -196,6 +217,8 @@ sco_usrreq(struct socket *up, int req, s
KASSERT(req != PRU_SENSE);
KASSERT(req != PRU_PEERADDR);
KASSERT(req != PRU_SOCKADDR);
+ KASSERT(req != PRU_RCVOOB);
+ KASSERT(req != PRU_SENDOOB);
switch(req) {
case PRU_PURGEIF:
@@ -271,14 +294,12 @@ sco_usrreq(struct socket *up, int req, s
return sco_send(pcb, m0);
case PRU_RCVD:
- case PRU_RCVOOB:
return EOPNOTSUPP; /* (no release) */
case PRU_LISTEN:
return sco_listen(pcb);
case PRU_CONNECT2:
- case PRU_SENDOOB:
case PRU_FASTTIMO:
case PRU_SLOWTIMO:
case PRU_PROTORCV:
@@ -426,6 +447,8 @@ PR_WRAP_USRREQS(sco)
#define sco_stat sco_stat_wrapper
#define sco_peeraddr sco_peeraddr_wrapper
#define sco_sockaddr sco_sockaddr_wrapper
+#define sco_recvoob sco_recvoob_wrapper
+#define sco_sendoob sco_sendoob_wrapper
#define sco_usrreq sco_usrreq_wrapper
const struct pr_usrreqs sco_usrreqs = {
@@ -436,5 +459,7 @@ const struct pr_usrreqs sco_usrreqs = {
.pr_stat = sco_stat,
.pr_peeraddr = sco_peeraddr,
.pr_sockaddr = sco_sockaddr,
+ .pr_recvoob = sco_recvoob,
+ .pr_sendoob = sco_sendoob,
.pr_generic = sco_usrreq,
};
Index: src/sys/netinet/raw_ip.c
diff -u src/sys/netinet/raw_ip.c:1.134 src/sys/netinet/raw_ip.c:1.135
--- src/sys/netinet/raw_ip.c:1.134 Mon Jul 14 13:39:18 2014
+++ src/sys/netinet/raw_ip.c Wed Jul 23 13:17:18 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: raw_ip.c,v 1.134 2014/07/14 13:39:18 rtr Exp $ */
+/* $NetBSD: raw_ip.c,v 1.135 2014/07/23 13:17:18 rtr Exp $ */
/*
* Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -65,7 +65,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: raw_ip.c,v 1.134 2014/07/14 13:39:18 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: raw_ip.c,v 1.135 2014/07/23 13:17:18 rtr Exp $");
#include "opt_inet.h"
#include "opt_compat_netbsd.h"
@@ -613,6 +613,25 @@ rip_sockaddr(struct socket *so, struct m
return 0;
}
+static int
+rip_recvoob(struct socket *so, struct mbuf *m, int flags)
+{
+ KASSERT(solocked(so));
+
+ return EOPNOTSUPP;
+}
+
+static int
+rip_sendoob(struct socket *so, struct mbuf *m, struct mbuf *control)
+{
+ KASSERT(solocked(so));
+
+ m_freem(m);
+ m_freem(control);
+
+ return EOPNOTSUPP;
+}
+
int
rip_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *nam,
struct mbuf *control, struct lwp *l)
@@ -627,6 +646,8 @@ rip_usrreq(struct socket *so, int req, s
KASSERT(req != PRU_SENSE);
KASSERT(req != PRU_PEERADDR);
KASSERT(req != PRU_SOCKADDR);
+ KASSERT(req != PRU_RCVOOB);
+ KASSERT(req != PRU_SENDOOB);
s = splsoftnet();
if (req == PRU_PURGEIF) {
@@ -720,16 +741,6 @@ rip_usrreq(struct socket *so, int req, s
}
break;
- case PRU_RCVOOB:
- error = EOPNOTSUPP;
- break;
-
- case PRU_SENDOOB:
- m_freem(control);
- m_freem(m);
- error = EOPNOTSUPP;
- break;
-
default:
panic("rip_usrreq");
}
@@ -746,6 +757,8 @@ PR_WRAP_USRREQS(rip)
#define rip_stat rip_stat_wrapper
#define rip_peeraddr rip_peeraddr_wrapper
#define rip_sockaddr rip_sockaddr_wrapper
+#define rip_recvoob rip_recvoob_wrapper
+#define rip_sendoob rip_sendoob_wrapper
#define rip_usrreq rip_usrreq_wrapper
const struct pr_usrreqs rip_usrreqs = {
@@ -756,6 +769,8 @@ const struct pr_usrreqs rip_usrreqs = {
.pr_stat = rip_stat,
.pr_peeraddr = rip_peeraddr,
.pr_sockaddr = rip_sockaddr,
+ .pr_recvoob = rip_recvoob,
+ .pr_sendoob = rip_sendoob,
.pr_generic = rip_usrreq,
};
Index: src/sys/netinet/tcp_usrreq.c
diff -u src/sys/netinet/tcp_usrreq.c:1.188 src/sys/netinet/tcp_usrreq.c:1.189
--- src/sys/netinet/tcp_usrreq.c:1.188 Mon Jul 14 13:20:41 2014
+++ src/sys/netinet/tcp_usrreq.c Wed Jul 23 13:17:18 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: tcp_usrreq.c,v 1.188 2014/07/14 13:20:41 rtr Exp $ */
+/* $NetBSD: tcp_usrreq.c,v 1.189 2014/07/23 13:17:18 rtr Exp $ */
/*
* Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -99,7 +99,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tcp_usrreq.c,v 1.188 2014/07/14 13:20:41 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tcp_usrreq.c,v 1.189 2014/07/23 13:17:18 rtr Exp $");
#include "opt_inet.h"
#include "opt_ipsec.h"
@@ -203,6 +203,8 @@ tcp_usrreq(struct socket *so, int req, s
KASSERT(req != PRU_SENSE);
KASSERT(req != PRU_PEERADDR);
KASSERT(req != PRU_SOCKADDR);
+ KASSERT(req != PRU_RCVOOB);
+ KASSERT(req != PRU_SENDOOB);
family = so->so_proto->pr_domain->dom_family;
@@ -256,7 +258,7 @@ tcp_usrreq(struct socket *so, int req, s
splx(s);
return EAFNOSUPPORT;
}
- KASSERT(!control || (req == PRU_SEND || req == PRU_SENDOOB));
+ KASSERT(!control || req == PRU_SEND);
#ifdef INET6
/* XXX: KASSERT((inp != NULL) ^ (in6p != NULL)); */
#endif
@@ -472,45 +474,6 @@ tcp_usrreq(struct socket *so, int req, s
tp = tcp_drop(tp, ECONNABORTED);
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, char *) = tp->t_iobc;
- if (((long)nam & MSG_PEEK) == 0)
- tp->t_oobflags ^= (TCPOOB_HAVEDATA | TCPOOB_HADDATA);
- break;
-
- case PRU_SENDOOB:
- if (sbspace(&so->so_snd) < -512) {
- m_freem(m);
- error = ENOBUFS;
- break;
- }
- /*
- * According to RFC961 (Assigned Protocols),
- * the urgent pointer points to the last octet
- * of urgent data. We continue, however,
- * to consider it to indicate the first octet
- * of data past the urgent section.
- * Otherwise, snd_up should be one lower.
- */
- sbappendstream(&so->so_snd, m);
- tp->snd_up = tp->snd_una + so->so_snd.sb_cc;
- tp->t_force = 1;
- error = tcp_output(tp);
- tp->t_force = 0;
- break;
-
default:
panic("tcp_usrreq");
}
@@ -1098,6 +1061,139 @@ tcp_sockaddr(struct socket *so, struct m
return 0;
}
+static int
+tcp_recvoob(struct socket *so, struct mbuf *m, int flags)
+{
+ struct inpcb *inp = NULL;
+#ifdef INET6
+ struct in6pcb *in6p = NULL;
+#endif
+ struct tcpcb *tp = NULL;
+ int ostate = 0;
+
+ switch (so->so_proto->pr_domain->dom_family) {
+#ifdef INET
+ case PF_INET:
+ inp = sotoinpcb(so);
+ break;
+#endif
+#ifdef INET6
+ case PF_INET6:
+ in6p = sotoin6pcb(so);
+ break;
+#endif
+ default:
+ return EAFNOSUPPORT;
+ }
+
+ if (inp == NULL
+#ifdef INET6
+ && in6p == NULL
+#endif
+ )
+ return EINVAL;
+
+#ifdef INET
+ if (inp) {
+ tp = intotcpcb(inp);
+ ostate = tcp_debug_capture(tp, PRU_RCVOOB);
+ }
+#endif
+#ifdef INET6
+ if (in6p) {
+ tp = in6totcpcb(in6p);
+ ostate = tcp_debug_capture(tp, PRU_RCVOOB);
+ }
+#endif
+
+ if ((so->so_oobmark == 0 &&
+ (so->so_state & SS_RCVATMARK) == 0) ||
+ so->so_options & SO_OOBINLINE ||
+ tp->t_oobflags & TCPOOB_HADDATA)
+ return EINVAL;
+
+ if ((tp->t_oobflags & TCPOOB_HAVEDATA) == 0)
+ return EWOULDBLOCK;
+
+ m->m_len = 1;
+ *mtod(m, char *) = tp->t_iobc;
+ if ((flags & MSG_PEEK) == 0)
+ tp->t_oobflags ^= (TCPOOB_HAVEDATA | TCPOOB_HADDATA);
+
+ tcp_debug_trace(so, tp, ostate, PRU_RCVOOB);
+
+ return 0;
+}
+
+static int
+tcp_sendoob(struct socket *so, struct mbuf *m, struct mbuf *control)
+{
+ struct inpcb *inp = NULL;
+#ifdef INET6
+ struct in6pcb *in6p = NULL;
+#endif
+ struct tcpcb *tp = NULL;
+ int ostate = 0;
+ int error = 0;
+
+ switch (so->so_proto->pr_domain->dom_family) {
+#ifdef INET
+ case PF_INET:
+ inp = sotoinpcb(so);
+ break;
+#endif
+#ifdef INET6
+ case PF_INET6:
+ in6p = sotoin6pcb(so);
+ break;
+#endif
+ default:
+ return EAFNOSUPPORT;
+ }
+
+ if (inp == NULL
+#ifdef INET6
+ && in6p == NULL
+#endif
+ )
+ return EINVAL;
+
+#ifdef INET
+ if (inp) {
+ tp = intotcpcb(inp);
+ ostate = tcp_debug_capture(tp, PRU_SENDOOB);
+ }
+#endif
+#ifdef INET6
+ if (in6p) {
+ tp = in6totcpcb(in6p);
+ ostate = tcp_debug_capture(tp, PRU_SENDOOB);
+ }
+#endif
+
+ if (sbspace(&so->so_snd) < -512) {
+ m_freem(m);
+ return ENOBUFS;
+ }
+ /*
+ * According to RFC961 (Assigned Protocols),
+ * the urgent pointer points to the last octet
+ * of urgent data. We continue, however,
+ * to consider it to indicate the first octet
+ * of data past the urgent section.
+ * Otherwise, snd_up should be one lower.
+ */
+ sbappendstream(&so->so_snd, m);
+ tp->snd_up = tp->snd_una + so->so_snd.sb_cc;
+ tp->t_force = 1;
+ error = tcp_output(tp);
+ tp->t_force = 0;
+
+ tcp_debug_trace(so, tp, ostate, PRU_SENDOOB);
+
+ return error;
+}
+
/*
* Initiate (or continue) disconnect.
* If embryonic state, just send reset (once).
@@ -2339,6 +2435,8 @@ PR_WRAP_USRREQS(tcp)
#define tcp_stat tcp_stat_wrapper
#define tcp_peeraddr tcp_peeraddr_wrapper
#define tcp_sockaddr tcp_sockaddr_wrapper
+#define tcp_recvoob tcp_recvoob_wrapper
+#define tcp_sendoob tcp_sendoob_wrapper
#define tcp_usrreq tcp_usrreq_wrapper
const struct pr_usrreqs tcp_usrreqs = {
@@ -2349,5 +2447,7 @@ const struct pr_usrreqs tcp_usrreqs = {
.pr_stat = tcp_stat,
.pr_peeraddr = tcp_peeraddr,
.pr_sockaddr = tcp_sockaddr,
+ .pr_recvoob = tcp_recvoob,
+ .pr_sendoob = tcp_sendoob,
.pr_generic = tcp_usrreq,
};
Index: src/sys/netinet/udp_usrreq.c
diff -u src/sys/netinet/udp_usrreq.c:1.208 src/sys/netinet/udp_usrreq.c:1.209
--- src/sys/netinet/udp_usrreq.c:1.208 Wed Jul 9 14:41:42 2014
+++ src/sys/netinet/udp_usrreq.c Wed Jul 23 13:17:18 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: udp_usrreq.c,v 1.208 2014/07/09 14:41:42 rtr Exp $ */
+/* $NetBSD: udp_usrreq.c,v 1.209 2014/07/23 13:17:18 rtr Exp $ */
/*
* Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -66,7 +66,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: udp_usrreq.c,v 1.208 2014/07/09 14:41:42 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: udp_usrreq.c,v 1.209 2014/07/23 13:17:18 rtr Exp $");
#include "opt_inet.h"
#include "opt_compat_netbsd.h"
@@ -942,6 +942,25 @@ udp_sockaddr(struct socket *so, struct m
}
static int
+udp_recvoob(struct socket *so, struct mbuf *m, int flags)
+{
+ KASSERT(solocked(so));
+
+ return EOPNOTSUPP;
+}
+
+static int
+udp_sendoob(struct socket *so, struct mbuf *m, struct mbuf *control)
+{
+ KASSERT(solocked(so));
+
+ m_freem(m);
+ m_freem(control);
+
+ return EOPNOTSUPP;
+}
+
+static int
udp_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *nam,
struct mbuf *control, struct lwp *l)
{
@@ -955,6 +974,8 @@ udp_usrreq(struct socket *so, int req, s
KASSERT(req != PRU_SENSE);
KASSERT(req != PRU_PEERADDR);
KASSERT(req != PRU_SOCKADDR);
+ KASSERT(req != PRU_RCVOOB);
+ KASSERT(req != PRU_SENDOOB);
s = splsoftnet();
if (req == PRU_PURGEIF) {
@@ -970,7 +991,7 @@ udp_usrreq(struct socket *so, int req, s
KASSERT(solocked(so));
inp = sotoinpcb(so);
- KASSERT(!control || (req == PRU_SEND || req == PRU_SENDOOB));
+ KASSERT(!control || req == PRU_SEND);
if (inp == NULL) {
splx(s);
return EINVAL;
@@ -1055,16 +1076,6 @@ udp_usrreq(struct socket *so, int req, s
}
break;
- case PRU_RCVOOB:
- error = EOPNOTSUPP;
- break;
-
- case PRU_SENDOOB:
- m_freem(control);
- m_freem(m);
- error = EOPNOTSUPP;
- break;
-
default:
panic("udp_usrreq");
}
@@ -1298,6 +1309,8 @@ PR_WRAP_USRREQS(udp)
#define udp_stat udp_stat_wrapper
#define udp_peeraddr udp_peeraddr_wrapper
#define udp_sockaddr udp_sockaddr_wrapper
+#define udp_recvoob udp_recvoob_wrapper
+#define udp_sendoob udp_sendoob_wrapper
#define udp_usrreq udp_usrreq_wrapper
const struct pr_usrreqs udp_usrreqs = {
@@ -1308,5 +1321,7 @@ const struct pr_usrreqs udp_usrreqs = {
.pr_stat = udp_stat,
.pr_peeraddr = udp_peeraddr,
.pr_sockaddr = udp_sockaddr,
+ .pr_recvoob = udp_recvoob,
+ .pr_sendoob = udp_sendoob,
.pr_generic = udp_usrreq,
};
Index: src/sys/netinet6/raw_ip6.c
diff -u src/sys/netinet6/raw_ip6.c:1.127 src/sys/netinet6/raw_ip6.c:1.128
--- src/sys/netinet6/raw_ip6.c:1.127 Wed Jul 9 14:41:42 2014
+++ src/sys/netinet6/raw_ip6.c Wed Jul 23 13:17:18 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: raw_ip6.c,v 1.127 2014/07/09 14:41:42 rtr Exp $ */
+/* $NetBSD: raw_ip6.c,v 1.128 2014/07/23 13:17:18 rtr Exp $ */
/* $KAME: raw_ip6.c,v 1.82 2001/07/23 18:57:56 jinmei Exp $ */
/*
@@ -62,7 +62,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: raw_ip6.c,v 1.127 2014/07/09 14:41:42 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: raw_ip6.c,v 1.128 2014/07/23 13:17:18 rtr Exp $");
#include "opt_ipsec.h"
@@ -689,6 +689,25 @@ rip6_sockaddr(struct socket *so, struct
return 0;
}
+static int
+rip6_recvoob(struct socket *so, struct mbuf *m, int flags)
+{
+ KASSERT(solocked(so));
+
+ return EOPNOTSUPP;
+}
+
+static int
+rip6_sendoob(struct socket *so, struct mbuf *m, struct mbuf *control)
+{
+ KASSERT(solocked(so));
+
+ if (m)
+ m_freem(m);
+
+ return EOPNOTSUPP;
+}
+
int
rip6_usrreq(struct socket *so, int req, struct mbuf *m,
struct mbuf *nam, struct mbuf *control, struct lwp *l)
@@ -701,6 +720,8 @@ rip6_usrreq(struct socket *so, int req,
KASSERT(req != PRU_SENSE);
KASSERT(req != PRU_PEERADDR);
KASSERT(req != PRU_SOCKADDR);
+ KASSERT(req != PRU_RCVOOB);
+ KASSERT(req != PRU_SENDOOB);
if (req == PRU_PURGEIF) {
mutex_enter(softnet_lock);
@@ -872,10 +893,8 @@ rip6_usrreq(struct socket *so, int req,
/*
* Not supported.
*/
- case PRU_RCVOOB:
case PRU_RCVD:
case PRU_LISTEN:
- case PRU_SENDOOB:
error = EOPNOTSUPP;
break;
@@ -934,6 +953,8 @@ PR_WRAP_USRREQS(rip6)
#define rip6_stat rip6_stat_wrapper
#define rip6_peeraddr rip6_peeraddr_wrapper
#define rip6_sockaddr rip6_sockaddr_wrapper
+#define rip6_recvoob rip6_recvoob_wrapper
+#define rip6_sendoob rip6_sendoob_wrapper
#define rip6_usrreq rip6_usrreq_wrapper
const struct pr_usrreqs rip6_usrreqs = {
@@ -944,5 +965,7 @@ const struct pr_usrreqs rip6_usrreqs = {
.pr_stat = rip6_stat,
.pr_peeraddr = rip6_peeraddr,
.pr_sockaddr = rip6_sockaddr,
+ .pr_recvoob = rip6_recvoob,
+ .pr_sendoob = rip6_sendoob,
.pr_generic = rip6_usrreq,
};
Index: src/sys/netinet6/udp6_usrreq.c
diff -u src/sys/netinet6/udp6_usrreq.c:1.107 src/sys/netinet6/udp6_usrreq.c:1.108
--- src/sys/netinet6/udp6_usrreq.c:1.107 Wed Jul 9 14:41:42 2014
+++ src/sys/netinet6/udp6_usrreq.c Wed Jul 23 13:17:18 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: udp6_usrreq.c,v 1.107 2014/07/09 14:41:42 rtr Exp $ */
+/* $NetBSD: udp6_usrreq.c,v 1.108 2014/07/23 13:17:18 rtr Exp $ */
/* $KAME: udp6_usrreq.c,v 1.86 2001/05/27 17:33:00 itojun Exp $ */
/*
@@ -62,7 +62,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: udp6_usrreq.c,v 1.107 2014/07/09 14:41:42 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: udp6_usrreq.c,v 1.108 2014/07/23 13:17:18 rtr Exp $");
#include "opt_inet.h"
#include "opt_inet_csum.h"
@@ -732,6 +732,27 @@ udp6_sockaddr(struct socket *so, struct
return 0;
}
+static int
+udp6_recvoob(struct socket *so, struct mbuf *m, int flags)
+{
+ KASSERT(solocked(so));
+
+ return EOPNOTSUPP;
+}
+
+static int
+udp6_sendoob(struct socket *so, struct mbuf *m, struct mbuf *control)
+{
+ KASSERT(solocked(so));
+
+ if (m)
+ m_freem(m);
+ if (control)
+ m_freem(control);
+
+ return EOPNOTSUPP;
+}
+
int
udp6_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *addr6,
struct mbuf *control, struct lwp *l)
@@ -746,6 +767,8 @@ udp6_usrreq(struct socket *so, int req,
KASSERT(req != PRU_SENSE);
KASSERT(req != PRU_PEERADDR);
KASSERT(req != PRU_SOCKADDR);
+ KASSERT(req != PRU_RCVOOB);
+ KASSERT(req != PRU_SENDOOB);
if (req == PRU_PURGEIF) {
mutex_enter(softnet_lock);
@@ -810,7 +833,6 @@ udp6_usrreq(struct socket *so, int req,
case PRU_LISTEN:
case PRU_CONNECT2:
- case PRU_SENDOOB:
case PRU_FASTTIMO:
case PRU_SLOWTIMO:
case PRU_PROTORCV:
@@ -819,7 +841,6 @@ udp6_usrreq(struct socket *so, int req,
break;
case PRU_RCVD:
- case PRU_RCVOOB:
return EOPNOTSUPP; /* do not free mbuf's */
default:
@@ -910,6 +931,8 @@ PR_WRAP_USRREQS(udp6)
#define udp6_stat udp6_stat_wrapper
#define udp6_peeraddr udp6_peeraddr_wrapper
#define udp6_sockaddr udp6_sockaddr_wrapper
+#define udp6_recvoob udp6_recvoob_wrapper
+#define udp6_sendoob udp6_sendoob_wrapper
#define udp6_usrreq udp6_usrreq_wrapper
const struct pr_usrreqs udp6_usrreqs = {
@@ -920,5 +943,7 @@ const struct pr_usrreqs udp6_usrreqs = {
.pr_stat = udp6_stat,
.pr_peeraddr = udp6_peeraddr,
.pr_sockaddr = udp6_sockaddr,
+ .pr_recvoob = udp6_recvoob,
+ .pr_sendoob = udp6_sendoob,
.pr_generic = udp6_usrreq,
};
Index: src/sys/netipsec/keysock.c
diff -u src/sys/netipsec/keysock.c:1.35 src/sys/netipsec/keysock.c:1.36
--- src/sys/netipsec/keysock.c:1.35 Wed Jul 9 14:41:42 2014
+++ src/sys/netipsec/keysock.c Wed Jul 23 13:17:18 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: keysock.c,v 1.35 2014/07/09 14:41:42 rtr Exp $ */
+/* $NetBSD: keysock.c,v 1.36 2014/07/23 13:17:18 rtr Exp $ */
/* $FreeBSD: src/sys/netipsec/keysock.c,v 1.3.2.1 2003/01/24 05:11:36 sam Exp $ */
/* $KAME: keysock.c,v 1.25 2001/08/13 20:07:41 itojun Exp $ */
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: keysock.c,v 1.35 2014/07/09 14:41:42 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: keysock.c,v 1.36 2014/07/23 13:17:18 rtr Exp $");
#include "opt_ipsec.h"
@@ -540,6 +540,25 @@ key_sockaddr(struct socket *so, struct m
return 0;
}
+static int
+key_recvoob(struct socket *so, struct mbuf *m, int flags)
+{
+ KASSERT(solocked(so));
+
+ return EOPNOTSUPP;
+}
+
+static int
+key_sendoob(struct socket *so, struct mbuf *m, struct mbuf *control)
+{
+ KASSERT(solocked(so));
+
+ m_freem(m);
+ m_freem(control);
+
+ return EOPNOTSUPP;
+}
+
/*
* key_usrreq()
* derived from net/rtsock.c:route_usrreq()
@@ -557,6 +576,8 @@ key_usrreq(struct socket *so, int req,st
KASSERT(req != PRU_SENSE);
KASSERT(req != PRU_PEERADDR);
KASSERT(req != PRU_SOCKADDR);
+ KASSERT(req != PRU_RCVOOB);
+ KASSERT(req != PRU_SENDOOB);
s = splsoftnet();
error = raw_usrreq(so, req, m, nam, control, l);
@@ -580,6 +601,8 @@ PR_WRAP_USRREQS(key)
#define key_stat key_stat_wrapper
#define key_peeraddr key_peeraddr_wrapper
#define key_sockaddr key_sockaddr_wrapper
+#define key_recvoob key_recvoob_wrapper
+#define key_sendoob key_sendoob_wrapper
#define key_usrreq key_usrreq_wrapper
const struct pr_usrreqs key_usrreqs = {
@@ -590,6 +613,8 @@ const struct pr_usrreqs key_usrreqs = {
.pr_stat = key_stat,
.pr_peeraddr = key_peeraddr,
.pr_sockaddr = key_sockaddr,
+ .pr_recvoob = key_recvoob,
+ .pr_sendoob = key_sendoob,
.pr_generic = key_usrreq,
};
Index: src/sys/netmpls/mpls_proto.c
diff -u src/sys/netmpls/mpls_proto.c:1.15 src/sys/netmpls/mpls_proto.c:1.16
--- src/sys/netmpls/mpls_proto.c:1.15 Wed Jul 9 14:41:42 2014
+++ src/sys/netmpls/mpls_proto.c Wed Jul 23 13:17:19 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: mpls_proto.c,v 1.15 2014/07/09 14:41:42 rtr Exp $ */
+/* $NetBSD: mpls_proto.c,v 1.16 2014/07/23 13:17:19 rtr Exp $ */
/*
* Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mpls_proto.c,v 1.15 2014/07/09 14:41:42 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mpls_proto.c,v 1.16 2014/07/23 13:17:19 rtr Exp $");
#include "opt_inet.h"
#include "opt_mbuftrace.h"
@@ -133,6 +133,22 @@ mpls_sockaddr(struct socket *so, struct
}
static int
+mpls_recvoob(struct socket *so, struct mbuf *m, int flags)
+{
+ KASSERT(solocked(so));
+
+ return EOPNOTSUPP;
+}
+
+static int
+mpls_sendoob(struct socket *so, struct mbuf *m, struct mbuf *control)
+{
+ KASSERT(solocked(so));
+
+ return EOPNOTSUPP;
+}
+
+static int
mpls_usrreq(struct socket *so, int req, struct mbuf *m,
struct mbuf *nam, struct mbuf *control, struct lwp *l)
{
@@ -228,6 +244,8 @@ PR_WRAP_USRREQS(mpls)
#define mpls_stat mpls_stat_wrapper
#define mpls_peeraddr mpls_peeraddr_wrapper
#define mpls_sockaddr mpls_sockaddr_wrapper
+#define mpls_recvoob mpls_recvoob_wrapper
+#define mpls_sendoob mpls_sendoob_wrapper
#define mpls_usrreq mpls_usrreq_wrapper
static const struct pr_usrreqs mpls_usrreqs = {
@@ -238,6 +256,8 @@ static const struct pr_usrreqs mpls_usrr
.pr_stat = mpls_stat,
.pr_peeraddr = mpls_peeraddr,
.pr_sockaddr = mpls_sockaddr,
+ .pr_recvoob = mpls_recvoob,
+ .pr_sendoob = mpls_sendoob,
.pr_generic = mpls_usrreq,
};
Index: src/sys/netnatm/natm.c
diff -u src/sys/netnatm/natm.c:1.37 src/sys/netnatm/natm.c:1.38
--- src/sys/netnatm/natm.c:1.37 Wed Jul 9 14:41:42 2014
+++ src/sys/netnatm/natm.c Wed Jul 23 13:17:19 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: natm.c,v 1.37 2014/07/09 14:41:42 rtr Exp $ */
+/* $NetBSD: natm.c,v 1.38 2014/07/23 13:17:19 rtr Exp $ */
/*
* Copyright (c) 1996 Charles D. Cranor and Washington University.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: natm.c,v 1.37 2014/07/09 14:41:42 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: natm.c,v 1.38 2014/07/23 13:17:19 rtr Exp $");
#include <sys/param.h>
#include <sys/kmem.h>
@@ -181,6 +181,22 @@ natm_sockaddr(struct socket *so, struct
return EOPNOTSUPP;
}
+static int
+natm_recvoob(struct socket *so, struct mbuf *m, int flags)
+{
+ KASSERT(solocked(so));
+
+ return EOPNOTSUPP;
+}
+
+static int
+natm_sendoob(struct socket *so, struct mbuf *m, struct mbuf *control)
+{
+ KASSERT(solocked(so));
+
+ return EOPNOTSUPP;
+}
+
/*
* user requests
*/
@@ -204,6 +220,8 @@ natm_usrreq(struct socket *so, int req,
KASSERT(req != PRU_SENSE);
KASSERT(req != PRU_PEERADDR);
KASSERT(req != PRU_SOCKADDR);
+ KASSERT(req != PRU_RCVOOB);
+ KASSERT(req != PRU_SENDOOB);
s = SPLSOFTNET();
@@ -348,8 +366,6 @@ natm_usrreq(struct socket *so, int req,
case PRU_RCVD: /* have taken data; more room now */
case PRU_FASTTIMO: /* 200ms timeout */
case PRU_SLOWTIMO: /* 500ms timeout */
- case PRU_RCVOOB: /* retrieve out of band data */
- case PRU_SENDOOB: /* send out of band data */
case PRU_PROTORCV: /* receive from below */
case PRU_PROTOSEND: /* send to below */
#ifdef DIAGNOSTIC
@@ -452,6 +468,8 @@ PR_WRAP_USRREQS(natm)
#define natm_stat natm_stat_wrapper
#define natm_peeraddr natm_peeraddr_wrapper
#define natm_sockaddr natm_sockaddr_wrapper
+#define natm_recvoob natm_recvoob_wrapper
+#define natm_sendoob natm_sendoob_wrapper
#define natm_usrreq natm_usrreq_wrapper
const struct pr_usrreqs natm_usrreqs = {
@@ -462,5 +480,7 @@ const struct pr_usrreqs natm_usrreqs = {
.pr_stat = natm_stat,
.pr_peeraddr = natm_peeraddr,
.pr_sockaddr = natm_sockaddr,
+ .pr_recvoob = natm_recvoob,
+ .pr_sendoob = natm_sendoob,
.pr_generic = natm_usrreq,
};
Index: src/sys/rump/net/lib/libsockin/sockin.c
diff -u src/sys/rump/net/lib/libsockin/sockin.c:1.49 src/sys/rump/net/lib/libsockin/sockin.c:1.50
--- src/sys/rump/net/lib/libsockin/sockin.c:1.49 Wed Jul 9 15:37:55 2014
+++ src/sys/rump/net/lib/libsockin/sockin.c Wed Jul 23 13:17:19 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: sockin.c,v 1.49 2014/07/09 15:37:55 rtr Exp $ */
+/* $NetBSD: sockin.c,v 1.50 2014/07/23 13:17:19 rtr Exp $ */
/*
* Copyright (c) 2008, 2009 Antti Kantee. All Rights Reserved.
@@ -26,7 +26,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sockin.c,v 1.49 2014/07/09 15:37:55 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sockin.c,v 1.50 2014/07/23 13:17:19 rtr Exp $");
#include <sys/param.h>
#include <sys/condvar.h>
@@ -73,6 +73,8 @@ static int sockin_ioctl(struct socket *,
static int sockin_stat(struct socket *, struct stat *);
static int sockin_peeraddr(struct socket *, struct mbuf *);
static int sockin_sockaddr(struct socket *, struct mbuf *);
+static int sockin_recvoob(struct socket *, struct mbuf *, int);
+static int sockin_sendoob(struct socket *, struct mbuf *, struct mbuf *);
static int sockin_usrreq(struct socket *, int, struct mbuf *,
struct mbuf *, struct mbuf *, struct lwp *);
static int sockin_ctloutput(int op, struct socket *, struct sockopt *);
@@ -85,6 +87,8 @@ static const struct pr_usrreqs sockin_us
.pr_stat = sockin_stat,
.pr_peeraddr = sockin_peeraddr,
.pr_sockaddr = sockin_sockaddr,
+ .pr_recvoob = sockin_recvoob,
+ .pr_sendoob = sockin_sendoob,
.pr_generic = sockin_usrreq,
};
@@ -513,6 +517,18 @@ sockin_sockaddr(struct socket *so, struc
}
static int
+sockin_recvoob(struct socket *so, struct mbuf *m, int flags)
+{
+ panic("sockin_recvoob: IMPLEMENT ME, recvoob not supported");
+}
+
+static int
+sockin_sendoob(struct socket *so, struct mbuf *m, struct mbuf *control)
+{
+ panic("sockin_sendoob: IMPLEMENT ME, sendoob not supported");
+}
+
+static int
sockin_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *nam,
struct mbuf *control, struct lwp *l)
{
@@ -523,6 +539,8 @@ sockin_usrreq(struct socket *so, int req
KASSERT(req != PRU_SENSE);
KASSERT(req != PRU_PEERADDR);
KASSERT(req != PRU_SOCKADDR);
+ KASSERT(req != PRU_RCVOOB);
+ KASSERT(req != PRU_SENDOOB);
switch (req) {
case PRU_BIND:
Index: src/sys/sys/protosw.h
diff -u src/sys/sys/protosw.h:1.52 src/sys/sys/protosw.h:1.53
--- src/sys/sys/protosw.h:1.52 Wed Jul 9 14:41:43 2014
+++ src/sys/sys/protosw.h Wed Jul 23 13:17:19 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: protosw.h,v 1.52 2014/07/09 14:41:43 rtr Exp $ */
+/* $NetBSD: protosw.h,v 1.53 2014/07/23 13:17:19 rtr Exp $ */
/*-
* Copyright (c) 1982, 1986, 1993
@@ -243,6 +243,8 @@ struct pr_usrreqs {
int (*pr_stat)(struct socket *, struct stat *);
int (*pr_peeraddr)(struct socket *, struct mbuf *);
int (*pr_sockaddr)(struct socket *, struct mbuf *);
+ int (*pr_recvoob)(struct socket *, struct mbuf *, int);
+ int (*pr_sendoob)(struct socket *, struct mbuf *, struct mbuf *);
int (*pr_generic)(struct socket *, int, struct mbuf *,
struct mbuf *, struct mbuf *, struct lwp *);
};
@@ -341,6 +343,26 @@ name##_sockaddr_wrapper(struct socket *a
return rv; \
} \
static int \
+name##_recvoob_wrapper(struct socket *a, \
+ struct mbuf *b, int c) \
+{ \
+ int rv; \
+ KERNEL_LOCK(1, NULL); \
+ rv = name##_recvoob(a, b, c); \
+ KERNEL_UNLOCK_ONE(NULL); \
+ return rv; \
+} \
+static int \
+name##_sendoob_wrapper(struct socket *a, \
+ struct mbuf *b, struct mbuf *c) \
+{ \
+ int rv; \
+ KERNEL_LOCK(1, NULL); \
+ rv = name##_sendoob(a, b, c); \
+ KERNEL_UNLOCK_ONE(NULL); \
+ return rv; \
+} \
+static int \
name##_usrreq_wrapper(struct socket *a, int b, \
struct mbuf *c, struct mbuf *d, struct mbuf *e, \
struct lwp *f) \