Module Name: src
Committed By: rtr
Date: Fri Aug 8 03:05:45 UTC 2014
Modified Files:
src/sys/dev: kttcp.c
src/sys/kern: uipc_socket.c uipc_usrreq.c
src/sys/net: if_gre.c link_proto.c raw_usrreq.c rtsock.c
src/sys/netatalk: ddp_usrreq.c
src/sys/netbt: hci_socket.c l2cap_socket.c rfcomm.h rfcomm_socket.c
rfcomm_upper.c sco_socket.c
src/sys/netinet: raw_ip.c tcp_input.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_RCVD function out of pr_generic() usrreq switches and put into
separate functions
- always KASSERT(solocked(so)) even if not implemented
- replace calls to pr_generic() with req = PRU_RCVD with calls to
pr_rcvd()
To generate a diff of this commit:
cvs rdiff -u -r1.36 -r1.37 src/sys/dev/kttcp.c
cvs rdiff -u -r1.232 -r1.233 src/sys/kern/uipc_socket.c
cvs rdiff -u -r1.167 -r1.168 src/sys/kern/uipc_usrreq.c
cvs rdiff -u -r1.158 -r1.159 src/sys/net/if_gre.c
cvs rdiff -u -r1.22 -r1.23 src/sys/net/link_proto.c
cvs rdiff -u -r1.50 -r1.51 src/sys/net/raw_usrreq.c
cvs rdiff -u -r1.161 -r1.162 src/sys/net/rtsock.c
cvs rdiff -u -r1.61 -r1.62 src/sys/netatalk/ddp_usrreq.c
cvs rdiff -u -r1.38 -r1.39 src/sys/netbt/hci_socket.c
cvs rdiff -u -r1.29 -r1.30 src/sys/netbt/l2cap_socket.c
cvs rdiff -u -r1.17 -r1.18 src/sys/netbt/rfcomm.h
cvs rdiff -u -r1.31 -r1.32 src/sys/netbt/rfcomm_socket.c \
src/sys/netbt/sco_socket.c
cvs rdiff -u -r1.20 -r1.21 src/sys/netbt/rfcomm_upper.c
cvs rdiff -u -r1.143 -r1.144 src/sys/netinet/raw_ip.c
cvs rdiff -u -r1.333 -r1.334 src/sys/netinet/tcp_input.c
cvs rdiff -u -r1.198 -r1.199 src/sys/netinet/tcp_usrreq.c
cvs rdiff -u -r1.215 -r1.216 src/sys/netinet/udp_usrreq.c
cvs rdiff -u -r1.134 -r1.135 src/sys/netinet6/raw_ip6.c
cvs rdiff -u -r1.113 -r1.114 src/sys/netinet6/udp6_usrreq.c
cvs rdiff -u -r1.41 -r1.42 src/sys/netipsec/keysock.c
cvs rdiff -u -r1.22 -r1.23 src/sys/netmpls/mpls_proto.c
cvs rdiff -u -r1.43 -r1.44 src/sys/netnatm/natm.c
cvs rdiff -u -r1.56 -r1.57 src/sys/rump/net/lib/libsockin/sockin.c
cvs rdiff -u -r1.58 -r1.59 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.36 src/sys/dev/kttcp.c:1.37
--- src/sys/dev/kttcp.c:1.36 Tue Aug 5 07:55:31 2014
+++ src/sys/dev/kttcp.c Fri Aug 8 03:05:44 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: kttcp.c,v 1.36 2014/08/05 07:55:31 rtr Exp $ */
+/* $NetBSD: kttcp.c,v 1.37 2014/08/08 03:05:44 rtr Exp $ */
/*
* Copyright (c) 2002 Wasabi Systems, Inc.
@@ -42,7 +42,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kttcp.c,v 1.36 2014/08/05 07:55:31 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kttcp.c,v 1.37 2014/08/08 03:05:44 rtr Exp $");
#include <sys/param.h>
#include <sys/types.h>
@@ -635,8 +635,7 @@ kttcp_soreceive(struct socket *so, unsig
* get it filled again.
*/
if ((pr->pr_flags & PR_WANTRCVD) && so->so_pcb) {
- (*pr->pr_usrreqs->pr_generic)(so, PRU_RCVD, NULL,
- (struct mbuf *)(long)flags, NULL, NULL);
+ (*pr->pr_usrreqs->pr_rcvd)(so, flags, l);
}
SBLASTRECORDCHK(&so->so_rcv,
"kttcp_soreceive sbwait 2");
@@ -675,8 +674,7 @@ kttcp_soreceive(struct socket *so, unsig
SBLASTRECORDCHK(&so->so_rcv, "kttcp_soreceive 4");
SBLASTMBUFCHK(&so->so_rcv, "kttcp_soreceive 4");
if (pr->pr_flags & PR_WANTRCVD && so->so_pcb) {
- (*pr->pr_usrreqs->pr_generic)(so, PRU_RCVD, NULL,
- (struct mbuf *)(long)flags, NULL, NULL);
+ (*pr->pr_usrreqs->pr_rcvd)(so, flags, l);
}
}
if (orig_resid == resid && orig_resid &&
Index: src/sys/kern/uipc_socket.c
diff -u src/sys/kern/uipc_socket.c:1.232 src/sys/kern/uipc_socket.c:1.233
--- src/sys/kern/uipc_socket.c:1.232 Tue Aug 5 07:55:31 2014
+++ src/sys/kern/uipc_socket.c Fri Aug 8 03:05:45 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: uipc_socket.c,v 1.232 2014/08/05 07:55:31 rtr Exp $ */
+/* $NetBSD: uipc_socket.c,v 1.233 2014/08/08 03:05:45 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.232 2014/08/05 07:55:31 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uipc_socket.c,v 1.233 2014/08/08 03:05:45 rtr Exp $");
#include "opt_compat_netbsd.h"
#include "opt_sock_counters.h"
@@ -1532,8 +1532,7 @@ soreceive(struct socket *so, struct mbuf
* get it filled again.
*/
if ((pr->pr_flags & PR_WANTRCVD) && so->so_pcb)
- (*pr->pr_usrreqs->pr_generic)(so, PRU_RCVD,
- NULL, (struct mbuf *)(long)flags, NULL, l);
+ (*pr->pr_usrreqs->pr_rcvd)(so, flags, l);
SBLASTRECORDCHK(&so->so_rcv, "soreceive sbwait 2");
SBLASTMBUFCHK(&so->so_rcv, "soreceive sbwait 2");
if (wakeup_state & SS_RESTARTSYS)
@@ -1574,8 +1573,7 @@ soreceive(struct socket *so, struct mbuf
SBLASTRECORDCHK(&so->so_rcv, "soreceive 4");
SBLASTMBUFCHK(&so->so_rcv, "soreceive 4");
if (pr->pr_flags & PR_WANTRCVD && so->so_pcb)
- (*pr->pr_usrreqs->pr_generic)(so, PRU_RCVD, NULL,
- (struct mbuf *)(long)flags, NULL, l);
+ (*pr->pr_usrreqs->pr_rcvd)(so, flags, l);
}
if (orig_resid == uio->uio_resid && orig_resid &&
(flags & MSG_EOR) == 0 && (so->so_state & SS_CANTRCVMORE) == 0) {
Index: src/sys/kern/uipc_usrreq.c
diff -u src/sys/kern/uipc_usrreq.c:1.167 src/sys/kern/uipc_usrreq.c:1.168
--- src/sys/kern/uipc_usrreq.c:1.167 Tue Aug 5 08:52:10 2014
+++ src/sys/kern/uipc_usrreq.c Fri Aug 8 03:05:45 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: uipc_usrreq.c,v 1.167 2014/08/05 08:52:10 rtr Exp $ */
+/* $NetBSD: uipc_usrreq.c,v 1.168 2014/08/08 03:05:45 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.167 2014/08/05 08:52:10 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uipc_usrreq.c,v 1.168 2014/08/08 03:05:45 rtr Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -369,6 +369,52 @@ unp_setaddr(struct socket *so, struct mb
}
static int
+unp_rcvd(struct socket *so, int flags, struct lwp *l)
+{
+ struct unpcb *unp = sotounpcb(so);
+ struct socket *so2;
+ u_int newhiwat;
+
+ KASSERT(solocked(so));
+ KASSERT(unp != NULL);
+
+ switch (so->so_type) {
+
+ case SOCK_DGRAM:
+ panic("uipc 1");
+ /*NOTREACHED*/
+
+ case SOCK_SEQPACKET: /* FALLTHROUGH */
+ case SOCK_STREAM:
+#define rcv (&so->so_rcv)
+#define snd (&so2->so_snd)
+ if (unp->unp_conn == 0)
+ break;
+ so2 = unp->unp_conn->unp_socket;
+ KASSERT(solocked2(so, so2));
+ /*
+ * Adjust backpressure on sender
+ * and wakeup any waiting to write.
+ */
+ snd->sb_mbmax += unp->unp_mbcnt - rcv->sb_mbcnt;
+ unp->unp_mbcnt = rcv->sb_mbcnt;
+ newhiwat = snd->sb_hiwat + unp->unp_cc - rcv->sb_cc;
+ (void)chgsbsize(so2->so_uidinfo,
+ &snd->sb_hiwat, newhiwat, RLIM_INFINITY);
+ unp->unp_cc = rcv->sb_cc;
+ sowwakeup(so2);
+#undef snd
+#undef rcv
+ break;
+
+ default:
+ panic("uipc 2");
+ }
+
+ return 0;
+}
+
+static int
unp_recvoob(struct socket *so, struct mbuf *m, int flags)
{
KASSERT(solocked(so));
@@ -520,8 +566,6 @@ unp_usrreq(struct socket *so, int req, s
struct mbuf *control, struct lwp *l)
{
struct unpcb *unp;
- struct socket *so2;
- u_int newhiwat;
int error = 0;
KASSERT(req != PRU_ATTACH);
@@ -537,6 +581,7 @@ unp_usrreq(struct socket *so, int req, s
KASSERT(req != PRU_SENSE);
KASSERT(req != PRU_PEERADDR);
KASSERT(req != PRU_SOCKADDR);
+ KASSERT(req != PRU_RCVD);
KASSERT(req != PRU_RCVOOB);
KASSERT(req != PRU_SEND);
KASSERT(req != PRU_SENDOOB);
@@ -555,41 +600,6 @@ unp_usrreq(struct socket *so, int req, s
error = unp_connect2(so, (struct socket *)nam, PRU_CONNECT2);
break;
- case PRU_RCVD:
- switch (so->so_type) {
-
- case SOCK_DGRAM:
- panic("uipc 1");
- /*NOTREACHED*/
-
- case SOCK_SEQPACKET: /* FALLTHROUGH */
- case SOCK_STREAM:
-#define rcv (&so->so_rcv)
-#define snd (&so2->so_snd)
- if (unp->unp_conn == 0)
- break;
- so2 = unp->unp_conn->unp_socket;
- KASSERT(solocked2(so, so2));
- /*
- * Adjust backpressure on sender
- * and wakeup any waiting to write.
- */
- snd->sb_mbmax += unp->unp_mbcnt - rcv->sb_mbcnt;
- unp->unp_mbcnt = rcv->sb_mbcnt;
- newhiwat = snd->sb_hiwat + unp->unp_cc - rcv->sb_cc;
- (void)chgsbsize(so2->so_uidinfo,
- &snd->sb_hiwat, newhiwat, RLIM_INFINITY);
- unp->unp_cc = rcv->sb_cc;
- sowwakeup(so2);
-#undef snd
-#undef rcv
- break;
-
- default:
- panic("uipc 2");
- }
- break;
-
default:
panic("piusrreq");
}
@@ -1925,6 +1935,7 @@ const struct pr_usrreqs unp_usrreqs = {
.pr_stat = unp_stat,
.pr_peeraddr = unp_peeraddr,
.pr_sockaddr = unp_sockaddr,
+ .pr_rcvd = unp_rcvd,
.pr_recvoob = unp_recvoob,
.pr_send = unp_send,
.pr_sendoob = unp_sendoob,
Index: src/sys/net/if_gre.c
diff -u src/sys/net/if_gre.c:1.158 src/sys/net/if_gre.c:1.159
--- src/sys/net/if_gre.c:1.158 Tue Aug 5 07:55:31 2014
+++ src/sys/net/if_gre.c Fri Aug 8 03:05:45 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: if_gre.c,v 1.158 2014/08/05 07:55:31 rtr Exp $ */
+/* $NetBSD: if_gre.c,v 1.159 2014/08/08 03:05:45 rtr Exp $ */
/*
* Copyright (c) 1998, 2008 The NetBSD Foundation, Inc.
@@ -45,7 +45,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_gre.c,v 1.158 2014/08/05 07:55:31 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_gre.c,v 1.159 2014/08/08 03:05:45 rtr Exp $");
#include "opt_atalk.h"
#include "opt_gre.h"
@@ -724,8 +724,7 @@ gre_soreceive(struct socket *so, struct
SBLASTRECORDCHK(&so->so_rcv, "soreceive 4");
SBLASTMBUFCHK(&so->so_rcv, "soreceive 4");
if (pr->pr_flags & PR_WANTRCVD && so->so_pcb)
- (*pr->pr_usrreqs->pr_generic)(so, PRU_RCVD, NULL,
- (struct mbuf *)(long)flags, NULL, curlwp);
+ (*pr->pr_usrreqs->pr_rcvd)(so, flags, curlwp);
if (*mp0 == NULL && (flags & MSG_EOR) == 0 &&
(so->so_state & SS_CANTRCVMORE) == 0) {
sbunlock(&so->so_rcv);
Index: src/sys/net/link_proto.c
diff -u src/sys/net/link_proto.c:1.22 src/sys/net/link_proto.c:1.23
--- src/sys/net/link_proto.c:1.22 Tue Aug 5 07:55:31 2014
+++ src/sys/net/link_proto.c Fri Aug 8 03:05:45 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: link_proto.c,v 1.22 2014/08/05 07:55:31 rtr Exp $ */
+/* $NetBSD: link_proto.c,v 1.23 2014/08/08 03:05:45 rtr Exp $ */
/*-
* Copyright (c) 1982, 1986, 1993
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: link_proto.c,v 1.22 2014/08/05 07:55:31 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: link_proto.c,v 1.23 2014/08/08 03:05:45 rtr Exp $");
#include <sys/param.h>
#include <sys/socket.h>
@@ -61,6 +61,7 @@ static int link_ioctl(struct socket *, u
static int link_stat(struct socket *, struct stat *);
static int link_peeraddr(struct socket *, struct mbuf *);
static int link_sockaddr(struct socket *, struct mbuf *);
+static int link_rcvd(struct socket *, int, struct lwp *);
static int link_recvoob(struct socket *, struct mbuf *, int);
static int link_send(struct socket *, struct mbuf *, struct mbuf *,
struct mbuf *, struct lwp *);
@@ -89,6 +90,7 @@ static const struct pr_usrreqs link_usrr
.pr_stat = link_stat,
.pr_peeraddr = link_peeraddr,
.pr_sockaddr = link_sockaddr,
+ .pr_rcvd = link_rcvd,
.pr_recvoob = link_recvoob,
.pr_send = link_send,
.pr_sendoob = link_sendoob,
@@ -346,6 +348,14 @@ link_sockaddr(struct socket *so, struct
}
static int
+link_rcvd(struct socket *so, int flags, struct lwp *l)
+{
+ KASSERT(solocked(so));
+
+ return EOPNOTSUPP;
+}
+
+static int
link_recvoob(struct socket *so, struct mbuf *m, int flags)
{
KASSERT(solocked(so));
@@ -387,6 +397,7 @@ link_usrreq(struct socket *so, int req,
KASSERT(req != PRU_SENSE);
KASSERT(req != PRU_PEERADDR);
KASSERT(req != PRU_SOCKADDR);
+ KASSERT(req != PRU_RCVD);
KASSERT(req != PRU_RCVOOB);
KASSERT(req != PRU_SEND);
KASSERT(req != PRU_SENDOOB);
Index: src/sys/net/raw_usrreq.c
diff -u src/sys/net/raw_usrreq.c:1.50 src/sys/net/raw_usrreq.c:1.51
--- src/sys/net/raw_usrreq.c:1.50 Tue Aug 5 07:55:31 2014
+++ src/sys/net/raw_usrreq.c Fri Aug 8 03:05:45 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: raw_usrreq.c,v 1.50 2014/08/05 07:55:31 rtr Exp $ */
+/* $NetBSD: raw_usrreq.c,v 1.51 2014/08/08 03:05:45 rtr Exp $ */
/*
* Copyright (c) 1980, 1986, 1993
@@ -36,7 +36,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: raw_usrreq.c,v 1.50 2014/08/05 07:55:31 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: raw_usrreq.c,v 1.51 2014/08/08 03:05:45 rtr Exp $");
#include <sys/param.h>
#include <sys/mbuf.h>
@@ -215,6 +215,7 @@ raw_usrreq(struct socket *so, int req, s
KASSERT(req != PRU_SENSE);
KASSERT(req != PRU_PEERADDR);
KASSERT(req != PRU_SOCKADDR);
+ KASSERT(req != PRU_RCVD);
KASSERT(req != PRU_RCVOOB);
KASSERT(req != PRU_SEND);
KASSERT(req != PRU_SENDOOB);
@@ -239,10 +240,6 @@ raw_usrreq(struct socket *so, int req, s
error = EOPNOTSUPP;
break;
- case PRU_RCVD:
- error = EOPNOTSUPP;
- break;
-
default:
panic("raw_usrreq");
}
Index: src/sys/net/rtsock.c
diff -u src/sys/net/rtsock.c:1.161 src/sys/net/rtsock.c:1.162
--- src/sys/net/rtsock.c:1.161 Tue Aug 5 07:55:31 2014
+++ src/sys/net/rtsock.c Fri Aug 8 03:05:45 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: rtsock.c,v 1.161 2014/08/05 07:55:31 rtr Exp $ */
+/* $NetBSD: rtsock.c,v 1.162 2014/08/08 03:05:45 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.161 2014/08/05 07:55:31 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rtsock.c,v 1.162 2014/08/08 03:05:45 rtr Exp $");
#ifdef _KERNEL_OPT
#include "opt_inet.h"
@@ -348,6 +348,14 @@ COMPATNAME(route_sockaddr)(struct socket
}
static int
+COMPATNAME(route_rcvd)(struct socket *so, int flags, struct lwp *l)
+{
+ KASSERT(solocked(so));
+
+ return EOPNOTSUPP;
+}
+
+static int
COMPATNAME(route_recvoob)(struct socket *so, struct mbuf *m, int flags)
{
KASSERT(solocked(so));
@@ -402,6 +410,7 @@ COMPATNAME(route_usrreq)(struct socket *
KASSERT(req != PRU_SENSE);
KASSERT(req != PRU_PEERADDR);
KASSERT(req != PRU_SOCKADDR);
+ KASSERT(req != PRU_RCVD);
KASSERT(req != PRU_RCVOOB);
KASSERT(req != PRU_SEND);
KASSERT(req != PRU_SENDOOB);
@@ -1512,6 +1521,7 @@ 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_rcvd = COMPATNAME(route_rcvd_wrapper),
.pr_recvoob = COMPATNAME(route_recvoob_wrapper),
.pr_send = COMPATNAME(route_send_wrapper),
.pr_sendoob = COMPATNAME(route_sendoob_wrapper),
Index: src/sys/netatalk/ddp_usrreq.c
diff -u src/sys/netatalk/ddp_usrreq.c:1.61 src/sys/netatalk/ddp_usrreq.c:1.62
--- src/sys/netatalk/ddp_usrreq.c:1.61 Thu Aug 7 07:51:28 2014
+++ src/sys/netatalk/ddp_usrreq.c Fri Aug 8 03:05:45 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: ddp_usrreq.c,v 1.61 2014/08/07 07:51:28 rtr Exp $ */
+/* $NetBSD: ddp_usrreq.c,v 1.62 2014/08/08 03:05:45 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.61 2014/08/07 07:51:28 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ddp_usrreq.c,v 1.62 2014/08/08 03:05:45 rtr Exp $");
#include "opt_mbuftrace.h"
@@ -95,6 +95,7 @@ ddp_usrreq(struct socket *so, int req, s
KASSERT(req != PRU_SENSE);
KASSERT(req != PRU_PEERADDR);
KASSERT(req != PRU_SOCKADDR);
+ KASSERT(req != PRU_RCVD);
KASSERT(req != PRU_RCVOOB);
KASSERT(req != PRU_SEND);
KASSERT(req != PRU_SENDOOB);
@@ -124,12 +125,6 @@ ddp_usrreq(struct socket *so, int req, s
error = EOPNOTSUPP;
break;
- case PRU_RCVD:
- /*
- * Don't mfree. Good architecture...
- */
- return (EOPNOTSUPP);
-
default:
error = EOPNOTSUPP;
}
@@ -528,6 +523,14 @@ ddp_sockaddr(struct socket *so, struct m
}
static int
+ddp_rcvd(struct socket *so, int flags, struct lwp *l)
+{
+ KASSERT(solocked(so));
+
+ return EOPNOTSUPP;
+}
+
+static int
ddp_recvoob(struct socket *so, struct mbuf *m, int flags)
{
KASSERT(solocked(so));
@@ -665,6 +668,7 @@ PR_WRAP_USRREQS(ddp)
#define ddp_stat ddp_stat_wrapper
#define ddp_peeraddr ddp_peeraddr_wrapper
#define ddp_sockaddr ddp_sockaddr_wrapper
+#define ddp_rcvd ddp_rcvd_wrapper
#define ddp_recvoob ddp_recvoob_wrapper
#define ddp_send ddp_send_wrapper
#define ddp_sendoob ddp_sendoob_wrapper
@@ -684,6 +688,7 @@ const struct pr_usrreqs ddp_usrreqs = {
.pr_stat = ddp_stat,
.pr_peeraddr = ddp_peeraddr,
.pr_sockaddr = ddp_sockaddr,
+ .pr_rcvd = ddp_rcvd,
.pr_recvoob = ddp_recvoob,
.pr_send = ddp_send,
.pr_sendoob = ddp_sendoob,
Index: src/sys/netbt/hci_socket.c
diff -u src/sys/netbt/hci_socket.c:1.38 src/sys/netbt/hci_socket.c:1.39
--- src/sys/netbt/hci_socket.c:1.38 Tue Aug 5 07:55:31 2014
+++ src/sys/netbt/hci_socket.c Fri Aug 8 03:05:45 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: hci_socket.c,v 1.38 2014/08/05 07:55:31 rtr Exp $ */
+/* $NetBSD: hci_socket.c,v 1.39 2014/08/08 03:05:45 rtr Exp $ */
/*-
* Copyright (c) 2005 Iain Hibbert.
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: hci_socket.c,v 1.38 2014/08/05 07:55:31 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: hci_socket.c,v 1.39 2014/08/08 03:05:45 rtr Exp $");
/* load symbolic names */
#ifdef BLUETOOTH_DEBUG
@@ -647,6 +647,14 @@ hci_sockaddr(struct socket *so, struct m
}
static int
+hci_rcvd(struct socket *so, int flags, struct lwp *l)
+{
+ KASSERT(solocked(so));
+
+ return EOPNOTSUPP;
+}
+
+static int
hci_recvoob(struct socket *so, struct mbuf *m, int flags)
{
KASSERT(solocked(so));
@@ -735,6 +743,7 @@ hci_usrreq(struct socket *up, int req, s
KASSERT(req != PRU_SENSE);
KASSERT(req != PRU_PEERADDR);
KASSERT(req != PRU_SOCKADDR);
+ KASSERT(req != PRU_RCVD);
KASSERT(req != PRU_RCVOOB);
KASSERT(req != PRU_SEND);
KASSERT(req != PRU_SENDOOB);
@@ -751,9 +760,6 @@ hci_usrreq(struct socket *up, int req, s
}
switch(req) {
- case PRU_RCVD:
- return EOPNOTSUPP; /* (no release) */
-
case PRU_CONNECT2:
case PRU_FASTTIMO:
case PRU_SLOWTIMO:
@@ -995,6 +1001,7 @@ PR_WRAP_USRREQS(hci)
#define hci_stat hci_stat_wrapper
#define hci_peeraddr hci_peeraddr_wrapper
#define hci_sockaddr hci_sockaddr_wrapper
+#define hci_rcvd hci_rcvd_wrapper
#define hci_recvoob hci_recvoob_wrapper
#define hci_send hci_send_wrapper
#define hci_sendoob hci_sendoob_wrapper
@@ -1014,6 +1021,7 @@ const struct pr_usrreqs hci_usrreqs = {
.pr_stat = hci_stat,
.pr_peeraddr = hci_peeraddr,
.pr_sockaddr = hci_sockaddr,
+ .pr_rcvd = hci_rcvd,
.pr_recvoob = hci_recvoob,
.pr_send = hci_send,
.pr_sendoob = hci_sendoob,
Index: src/sys/netbt/l2cap_socket.c
diff -u src/sys/netbt/l2cap_socket.c:1.29 src/sys/netbt/l2cap_socket.c:1.30
--- src/sys/netbt/l2cap_socket.c:1.29 Tue Aug 5 07:55:31 2014
+++ src/sys/netbt/l2cap_socket.c Fri Aug 8 03:05:45 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: l2cap_socket.c,v 1.29 2014/08/05 07:55:31 rtr Exp $ */
+/* $NetBSD: l2cap_socket.c,v 1.30 2014/08/08 03:05:45 rtr Exp $ */
/*-
* Copyright (c) 2005 Iain Hibbert.
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: l2cap_socket.c,v 1.29 2014/08/05 07:55:31 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: l2cap_socket.c,v 1.30 2014/08/08 03:05:45 rtr Exp $");
/* load symbolic names */
#ifdef BLUETOOTH_DEBUG
@@ -275,6 +275,14 @@ l2cap_sockaddr(struct socket *so, struct
}
static int
+l2cap_rcvd(struct socket *so, int flags, struct lwp *l)
+{
+ KASSERT(solocked(so));
+
+ return EOPNOTSUPP;
+}
+
+static int
l2cap_recvoob(struct socket *so, struct mbuf *m, int flags)
{
KASSERT(solocked(so));
@@ -342,9 +350,6 @@ l2cap_sendoob(struct socket *so, struct
* User Request.
* up is socket
* m is optional mbuf chain containing message
- * nam is either
- * optional mbuf chain containing an address
- * message flags (PRU_RCVD)
* ctl is either
* optional mbuf chain containing socket options
* optional interface pointer PRU_PURGEIF
@@ -374,6 +379,7 @@ l2cap_usrreq(struct socket *up, int req,
KASSERT(req != PRU_SENSE);
KASSERT(req != PRU_PEERADDR);
KASSERT(req != PRU_SOCKADDR);
+ KASSERT(req != PRU_RCVD);
KASSERT(req != PRU_RCVOOB);
KASSERT(req != PRU_SEND);
KASSERT(req != PRU_SENDOOB);
@@ -389,9 +395,6 @@ l2cap_usrreq(struct socket *up, int req,
}
switch(req) {
- case PRU_RCVD:
- return EOPNOTSUPP; /* (no release) */
-
case PRU_CONNECT2:
case PRU_FASTTIMO:
case PRU_SLOWTIMO:
@@ -567,6 +570,7 @@ PR_WRAP_USRREQS(l2cap)
#define l2cap_stat l2cap_stat_wrapper
#define l2cap_peeraddr l2cap_peeraddr_wrapper
#define l2cap_sockaddr l2cap_sockaddr_wrapper
+#define l2cap_rcvd l2cap_rcvd_wrapper
#define l2cap_recvoob l2cap_recvoob_wrapper
#define l2cap_send l2cap_send_wrapper
#define l2cap_sendoob l2cap_sendoob_wrapper
@@ -586,6 +590,7 @@ const struct pr_usrreqs l2cap_usrreqs =
.pr_stat = l2cap_stat,
.pr_peeraddr = l2cap_peeraddr,
.pr_sockaddr = l2cap_sockaddr,
+ .pr_rcvd = l2cap_rcvd,
.pr_recvoob = l2cap_recvoob,
.pr_send = l2cap_send,
.pr_sendoob = l2cap_sendoob,
Index: src/sys/netbt/rfcomm.h
diff -u src/sys/netbt/rfcomm.h:1.17 src/sys/netbt/rfcomm.h:1.18
--- src/sys/netbt/rfcomm.h:1.17 Tue Aug 5 07:55:32 2014
+++ src/sys/netbt/rfcomm.h Fri Aug 8 03:05:45 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: rfcomm.h,v 1.17 2014/08/05 07:55:32 rtr Exp $ */
+/* $NetBSD: rfcomm.h,v 1.18 2014/08/08 03:05:45 rtr Exp $ */
/*-
* Copyright (c) 2006 Itronix Inc.
@@ -55,7 +55,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: rfcomm.h,v 1.17 2014/08/05 07:55:32 rtr Exp $
+ * $Id: rfcomm.h,v 1.18 2014/08/08 03:05:45 rtr Exp $
* $FreeBSD: src/sys/netgraph/bluetooth/include/ng_btsocket_rfcomm.h,v 1.4 2005/01/11 01:39:53 emax Exp $
*/
@@ -416,7 +416,7 @@ int rfcomm_disconnect_pcb(struct rfcomm_
void rfcomm_detach_pcb(struct rfcomm_dlc **);
int rfcomm_listen_pcb(struct rfcomm_dlc *);
int rfcomm_send_pcb(struct rfcomm_dlc *, struct mbuf *);
-int rfcomm_rcvd(struct rfcomm_dlc *, size_t);
+int rfcomm_rcvd_pcb(struct rfcomm_dlc *, size_t);
int rfcomm_setopt(struct rfcomm_dlc *, const struct sockopt *);
int rfcomm_getopt(struct rfcomm_dlc *, struct sockopt *);
Index: src/sys/netbt/rfcomm_socket.c
diff -u src/sys/netbt/rfcomm_socket.c:1.31 src/sys/netbt/rfcomm_socket.c:1.32
--- src/sys/netbt/rfcomm_socket.c:1.31 Tue Aug 5 07:55:32 2014
+++ src/sys/netbt/rfcomm_socket.c Fri Aug 8 03:05:45 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: rfcomm_socket.c,v 1.31 2014/08/05 07:55:32 rtr Exp $ */
+/* $NetBSD: rfcomm_socket.c,v 1.32 2014/08/08 03:05:45 rtr Exp $ */
/*-
* Copyright (c) 2006 Itronix Inc.
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rfcomm_socket.c,v 1.31 2014/08/05 07:55:32 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rfcomm_socket.c,v 1.32 2014/08/08 03:05:45 rtr Exp $");
/* load symbolic names */
#ifdef BLUETOOTH_DEBUG
@@ -108,7 +108,7 @@ rfcomm_attach(struct socket *so, int pro
if (error)
return error;
- error = rfcomm_rcvd(so->so_pcb, sbspace(&so->so_rcv));
+ error = rfcomm_rcvd_pcb(so->so_pcb, sbspace(&so->so_rcv));
if (error) {
rfcomm_detach_pcb((struct rfcomm_dlc **)&so->so_pcb);
return error;
@@ -283,6 +283,19 @@ rfcomm_sockaddr(struct socket *so, struc
}
static int
+rfcomm_rcvd(struct socket *so, int flags, struct lwp *l)
+{
+ struct rfcomm_dlc *pcb = so->so_pcb;
+
+ KASSERT(solocked(so));
+
+ if (pcb == NULL)
+ return EINVAL;
+
+ return rfcomm_rcvd_pcb(pcb, sbspace(&so->so_rcv));
+}
+
+static int
rfcomm_recvoob(struct socket *so, struct mbuf *m, int flags)
{
KASSERT(solocked(so));
@@ -340,9 +353,6 @@ rfcomm_sendoob(struct socket *so, struct
* User Request.
* up is socket
* m is optional mbuf chain containing message
- * nam is either
- * optional mbuf chain containing an address
- * message flags (PRU_RCVD)
* ctl is either
* optional mbuf chain containing socket options
* optional interface pointer PRU_PURGEIF
@@ -372,6 +382,7 @@ rfcomm_usrreq(struct socket *up, int req
KASSERT(req != PRU_SENSE);
KASSERT(req != PRU_PEERADDR);
KASSERT(req != PRU_SOCKADDR);
+ KASSERT(req != PRU_RCVD);
KASSERT(req != PRU_RCVOOB);
KASSERT(req != PRU_SEND);
KASSERT(req != PRU_SENDOOB);
@@ -386,9 +397,6 @@ rfcomm_usrreq(struct socket *up, int req
}
switch(req) {
- case PRU_RCVD:
- return rfcomm_rcvd(pcb, sbspace(&up->so_rcv));
-
case PRU_CONNECT2:
case PRU_FASTTIMO:
case PRU_SLOWTIMO:
@@ -576,6 +584,7 @@ PR_WRAP_USRREQS(rfcomm)
#define rfcomm_stat rfcomm_stat_wrapper
#define rfcomm_peeraddr rfcomm_peeraddr_wrapper
#define rfcomm_sockaddr rfcomm_sockaddr_wrapper
+#define rfcomm_rcvd rfcomm_rcvd_wrapper
#define rfcomm_recvoob rfcomm_recvoob_wrapper
#define rfcomm_send rfcomm_send_wrapper
#define rfcomm_sendoob rfcomm_sendoob_wrapper
@@ -595,6 +604,7 @@ const struct pr_usrreqs rfcomm_usrreqs =
.pr_stat = rfcomm_stat,
.pr_peeraddr = rfcomm_peeraddr,
.pr_sockaddr = rfcomm_sockaddr,
+ .pr_rcvd = rfcomm_rcvd,
.pr_recvoob = rfcomm_recvoob,
.pr_send = rfcomm_send,
.pr_sendoob = rfcomm_sendoob,
Index: src/sys/netbt/sco_socket.c
diff -u src/sys/netbt/sco_socket.c:1.31 src/sys/netbt/sco_socket.c:1.32
--- src/sys/netbt/sco_socket.c:1.31 Tue Aug 5 07:55:32 2014
+++ src/sys/netbt/sco_socket.c Fri Aug 8 03:05:45 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: sco_socket.c,v 1.31 2014/08/05 07:55:32 rtr Exp $ */
+/* $NetBSD: sco_socket.c,v 1.32 2014/08/08 03:05:45 rtr Exp $ */
/*-
* Copyright (c) 2006 Itronix Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sco_socket.c,v 1.31 2014/08/05 07:55:32 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sco_socket.c,v 1.32 2014/08/08 03:05:45 rtr Exp $");
/* load symbolic names */
#ifdef BLUETOOTH_DEBUG
@@ -266,6 +266,14 @@ sco_sockaddr(struct socket *so, struct m
}
static int
+sco_rcvd(struct socket *so, int flags, struct lwp *l)
+{
+ KASSERT(solocked(so));
+
+ return EOPNOTSUPP;
+}
+
+static int
sco_recvoob(struct socket *so, struct mbuf *m, int flags)
{
KASSERT(solocked(so));
@@ -359,6 +367,7 @@ sco_usrreq(struct socket *up, int req, s
KASSERT(req != PRU_SENSE);
KASSERT(req != PRU_PEERADDR);
KASSERT(req != PRU_SOCKADDR);
+ KASSERT(req != PRU_RCVD);
KASSERT(req != PRU_RCVOOB);
KASSERT(req != PRU_SEND);
KASSERT(req != PRU_SENDOOB);
@@ -375,9 +384,6 @@ sco_usrreq(struct socket *up, int req, s
}
switch(req) {
- case PRU_RCVD:
- return EOPNOTSUPP; /* (no release) */
-
case PRU_CONNECT2:
case PRU_FASTTIMO:
case PRU_SLOWTIMO:
@@ -532,6 +538,7 @@ PR_WRAP_USRREQS(sco)
#define sco_stat sco_stat_wrapper
#define sco_peeraddr sco_peeraddr_wrapper
#define sco_sockaddr sco_sockaddr_wrapper
+#define sco_rcvd sco_rcvd_wrapper
#define sco_recvoob sco_recvoob_wrapper
#define sco_send sco_send_wrapper
#define sco_sendoob sco_sendoob_wrapper
@@ -551,6 +558,7 @@ const struct pr_usrreqs sco_usrreqs = {
.pr_stat = sco_stat,
.pr_peeraddr = sco_peeraddr,
.pr_sockaddr = sco_sockaddr,
+ .pr_rcvd = sco_rcvd,
.pr_recvoob = sco_recvoob,
.pr_send = sco_send,
.pr_sendoob = sco_sendoob,
Index: src/sys/netbt/rfcomm_upper.c
diff -u src/sys/netbt/rfcomm_upper.c:1.20 src/sys/netbt/rfcomm_upper.c:1.21
--- src/sys/netbt/rfcomm_upper.c:1.20 Tue Aug 5 07:55:32 2014
+++ src/sys/netbt/rfcomm_upper.c Fri Aug 8 03:05:45 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: rfcomm_upper.c,v 1.20 2014/08/05 07:55:32 rtr Exp $ */
+/* $NetBSD: rfcomm_upper.c,v 1.21 2014/08/08 03:05:45 rtr Exp $ */
/*-
* Copyright (c) 2006 Itronix Inc.
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rfcomm_upper.c,v 1.20 2014/08/05 07:55:32 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rfcomm_upper.c,v 1.21 2014/08/08 03:05:45 rtr Exp $");
#include <sys/param.h>
#include <sys/kernel.h>
@@ -406,7 +406,7 @@ rfcomm_send_pcb(struct rfcomm_dlc *dlc,
}
/*
- * rfcomm_rcvd(dlc, space)
+ * rfcomm_rcvd_pcb(dlc, space)
*
* Indicate space now available in receive buffer
*
@@ -415,7 +415,7 @@ rfcomm_send_pcb(struct rfcomm_dlc *dlc,
* buffer after that.
*/
int
-rfcomm_rcvd(struct rfcomm_dlc *dlc, size_t space)
+rfcomm_rcvd_pcb(struct rfcomm_dlc *dlc, size_t space)
{
KASSERT(dlc != NULL);
Index: src/sys/netinet/raw_ip.c
diff -u src/sys/netinet/raw_ip.c:1.143 src/sys/netinet/raw_ip.c:1.144
--- src/sys/netinet/raw_ip.c:1.143 Tue Aug 5 07:55:32 2014
+++ src/sys/netinet/raw_ip.c Fri Aug 8 03:05:45 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: raw_ip.c,v 1.143 2014/08/05 07:55:32 rtr Exp $ */
+/* $NetBSD: raw_ip.c,v 1.144 2014/08/08 03:05:45 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.143 2014/08/05 07:55:32 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: raw_ip.c,v 1.144 2014/08/08 03:05:45 rtr Exp $");
#include "opt_inet.h"
#include "opt_compat_netbsd.h"
@@ -715,6 +715,14 @@ rip_sockaddr(struct socket *so, struct m
}
static int
+rip_rcvd(struct socket *so, int flags, struct lwp *l)
+{
+ KASSERT(solocked(so));
+
+ return EOPNOTSUPP;
+}
+
+static int
rip_recvoob(struct socket *so, struct mbuf *m, int flags)
{
KASSERT(solocked(so));
@@ -802,6 +810,7 @@ rip_usrreq(struct socket *so, int req, s
KASSERT(req != PRU_SENSE);
KASSERT(req != PRU_PEERADDR);
KASSERT(req != PRU_SOCKADDR);
+ KASSERT(req != PRU_RCVD);
KASSERT(req != PRU_RCVOOB);
KASSERT(req != PRU_SEND);
KASSERT(req != PRU_SENDOOB);
@@ -832,10 +841,6 @@ rip_usrreq(struct socket *so, int req, s
error = EOPNOTSUPP;
break;
- case PRU_RCVD:
- error = EOPNOTSUPP;
- break;
-
default:
panic("rip_usrreq");
}
@@ -858,6 +863,7 @@ PR_WRAP_USRREQS(rip)
#define rip_stat rip_stat_wrapper
#define rip_peeraddr rip_peeraddr_wrapper
#define rip_sockaddr rip_sockaddr_wrapper
+#define rip_rcvd rip_rcvd_wrapper
#define rip_recvoob rip_recvoob_wrapper
#define rip_send rip_send_wrapper
#define rip_sendoob rip_sendoob_wrapper
@@ -877,6 +883,7 @@ const struct pr_usrreqs rip_usrreqs = {
.pr_stat = rip_stat,
.pr_peeraddr = rip_peeraddr,
.pr_sockaddr = rip_sockaddr,
+ .pr_rcvd = rip_rcvd,
.pr_recvoob = rip_recvoob,
.pr_send = rip_send,
.pr_sendoob = rip_sendoob,
Index: src/sys/netinet/tcp_input.c
diff -u src/sys/netinet/tcp_input.c:1.333 src/sys/netinet/tcp_input.c:1.334
--- src/sys/netinet/tcp_input.c:1.333 Fri May 30 02:27:29 2014
+++ src/sys/netinet/tcp_input.c Fri Aug 8 03:05:45 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: tcp_input.c,v 1.333 2014/05/30 02:27:29 rmind Exp $ */
+/* $NetBSD: tcp_input.c,v 1.334 2014/08/08 03:05:45 rtr Exp $ */
/*
* Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -148,7 +148,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tcp_input.c,v 1.333 2014/05/30 02:27:29 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tcp_input.c,v 1.334 2014/08/08 03:05:45 rtr Exp $");
#include "opt_inet.h"
#include "opt_ipsec.h"
@@ -2879,7 +2879,7 @@ dodata: /* XXX */
* and arranging for acknowledgement of receipt if necessary.
* This process logically involves adjusting tp->rcv_wnd as data
* is presented to the user (this happens in tcp_usrreq.c,
- * case PRU_RCVD). If a FIN has already been received on this
+ * tcp_rcvd()). If a FIN has already been received on this
* connection then we just ignore the text.
*/
if ((tlen || (tiflags & TH_FIN)) &&
Index: src/sys/netinet/tcp_usrreq.c
diff -u src/sys/netinet/tcp_usrreq.c:1.198 src/sys/netinet/tcp_usrreq.c:1.199
--- src/sys/netinet/tcp_usrreq.c:1.198 Tue Aug 5 07:55:32 2014
+++ src/sys/netinet/tcp_usrreq.c Fri Aug 8 03:05:45 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: tcp_usrreq.c,v 1.198 2014/08/05 07:55:32 rtr Exp $ */
+/* $NetBSD: tcp_usrreq.c,v 1.199 2014/08/08 03:05:45 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.198 2014/08/05 07:55:32 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tcp_usrreq.c,v 1.199 2014/08/08 03:05:45 rtr Exp $");
#include "opt_inet.h"
#include "opt_ipsec.h"
@@ -244,6 +244,7 @@ tcp_usrreq(struct socket *so, int req, s
KASSERT(req != PRU_SENSE);
KASSERT(req != PRU_PEERADDR);
KASSERT(req != PRU_SOCKADDR);
+ KASSERT(req != PRU_RCVD);
KASSERT(req != PRU_RCVOOB);
KASSERT(req != PRU_SEND);
KASSERT(req != PRU_SENDOOB);
@@ -298,21 +299,6 @@ tcp_usrreq(struct socket *so, int req, s
error = EOPNOTSUPP;
break;
- /*
- * After a receive, possibly send window update to peer.
- */
- case PRU_RCVD:
- /*
- * soreceive() calls this function when a user receives
- * ancillary data on a listening socket. We don't call
- * tcp_output in such a case, since there is no header
- * template for a listening socket and hence the kernel
- * will panic.
- */
- if ((so->so_state & (SS_ISCONNECTED|SS_ISCONNECTING)) != 0)
- (void) tcp_output(tp);
- break;
-
default:
panic("tcp_usrreq");
}
@@ -1067,6 +1053,40 @@ tcp_sockaddr(struct socket *so, struct m
}
static int
+tcp_rcvd(struct socket *so, int flags, struct lwp *l)
+{
+ struct inpcb *inp = NULL;
+ struct in6pcb *in6p = NULL;
+ struct tcpcb *tp = NULL;
+ int ostate = 0;
+ int error = 0;
+ int s;
+
+ if ((error = tcp_getpcb(so, &inp, &in6p, &tp)) != 0)
+ return error;
+
+ ostate = tcp_debug_capture(tp, PRU_RCVD);
+
+ /*
+ * After a receive, possibly send window update to peer.
+ *
+ * soreceive() calls this function when a user receives
+ * ancillary data on a listening socket. We don't call
+ * tcp_output in such a case, since there is no header
+ * template for a listening socket and hence the kernel
+ * will panic.
+ */
+ s = splsoftnet();
+ if ((so->so_state & (SS_ISCONNECTED|SS_ISCONNECTING)) != 0)
+ (void) tcp_output(tp);
+ splx(s);
+
+ tcp_debug_trace(so, tp, ostate, PRU_RCVD);
+
+ return 0;
+}
+
+static int
tcp_recvoob(struct socket *so, struct mbuf *m, int flags)
{
struct inpcb *inp = NULL;
@@ -2430,6 +2450,7 @@ PR_WRAP_USRREQS(tcp)
#define tcp_stat tcp_stat_wrapper
#define tcp_peeraddr tcp_peeraddr_wrapper
#define tcp_sockaddr tcp_sockaddr_wrapper
+#define tcp_rcvd tcp_rcvd_wrapper
#define tcp_recvoob tcp_recvoob_wrapper
#define tcp_send tcp_send_wrapper
#define tcp_sendoob tcp_sendoob_wrapper
@@ -2449,6 +2470,7 @@ const struct pr_usrreqs tcp_usrreqs = {
.pr_stat = tcp_stat,
.pr_peeraddr = tcp_peeraddr,
.pr_sockaddr = tcp_sockaddr,
+ .pr_rcvd = tcp_rcvd,
.pr_recvoob = tcp_recvoob,
.pr_send = tcp_send,
.pr_sendoob = tcp_sendoob,
Index: src/sys/netinet/udp_usrreq.c
diff -u src/sys/netinet/udp_usrreq.c:1.215 src/sys/netinet/udp_usrreq.c:1.216
--- src/sys/netinet/udp_usrreq.c:1.215 Tue Aug 5 07:55:32 2014
+++ src/sys/netinet/udp_usrreq.c Fri Aug 8 03:05:45 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: udp_usrreq.c,v 1.215 2014/08/05 07:55:32 rtr Exp $ */
+/* $NetBSD: udp_usrreq.c,v 1.216 2014/08/08 03:05:45 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.215 2014/08/05 07:55:32 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: udp_usrreq.c,v 1.216 2014/08/08 03:05:45 rtr Exp $");
#include "opt_inet.h"
#include "opt_compat_netbsd.h"
@@ -1041,6 +1041,14 @@ udp_sockaddr(struct socket *so, struct m
}
static int
+udp_rcvd(struct socket *so, int flags, struct lwp *l)
+{
+ KASSERT(solocked(so));
+
+ return EOPNOTSUPP;
+}
+
+static int
udp_recvoob(struct socket *so, struct mbuf *m, int flags)
{
KASSERT(solocked(so));
@@ -1131,6 +1139,7 @@ udp_usrreq(struct socket *so, int req, s
KASSERT(req != PRU_SENSE);
KASSERT(req != PRU_PEERADDR);
KASSERT(req != PRU_SOCKADDR);
+ KASSERT(req != PRU_RCVD);
KASSERT(req != PRU_RCVOOB);
KASSERT(req != PRU_SEND);
KASSERT(req != PRU_SENDOOB);
@@ -1164,10 +1173,6 @@ udp_usrreq(struct socket *so, int req, s
error = EOPNOTSUPP;
break;
- case PRU_RCVD:
- error = EOPNOTSUPP;
- break;
-
default:
panic("udp_usrreq");
}
@@ -1407,6 +1412,7 @@ PR_WRAP_USRREQS(udp)
#define udp_stat udp_stat_wrapper
#define udp_peeraddr udp_peeraddr_wrapper
#define udp_sockaddr udp_sockaddr_wrapper
+#define udp_rcvd udp_rcvd_wrapper
#define udp_recvoob udp_recvoob_wrapper
#define udp_send udp_send_wrapper
#define udp_sendoob udp_sendoob_wrapper
@@ -1426,6 +1432,7 @@ const struct pr_usrreqs udp_usrreqs = {
.pr_stat = udp_stat,
.pr_peeraddr = udp_peeraddr,
.pr_sockaddr = udp_sockaddr,
+ .pr_rcvd = udp_rcvd,
.pr_recvoob = udp_recvoob,
.pr_send = udp_send,
.pr_sendoob = udp_sendoob,
Index: src/sys/netinet6/raw_ip6.c
diff -u src/sys/netinet6/raw_ip6.c:1.134 src/sys/netinet6/raw_ip6.c:1.135
--- src/sys/netinet6/raw_ip6.c:1.134 Tue Aug 5 07:55:32 2014
+++ src/sys/netinet6/raw_ip6.c Fri Aug 8 03:05:45 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: raw_ip6.c,v 1.134 2014/08/05 07:55:32 rtr Exp $ */
+/* $NetBSD: raw_ip6.c,v 1.135 2014/08/08 03:05:45 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.134 2014/08/05 07:55:32 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: raw_ip6.c,v 1.135 2014/08/08 03:05:45 rtr Exp $");
#include "opt_ipsec.h"
@@ -830,6 +830,14 @@ rip6_sockaddr(struct socket *so, struct
}
static int
+rip6_rcvd(struct socket *so, int flags, struct lwp *l)
+{
+ KASSERT(solocked(so));
+
+ return EOPNOTSUPP;
+}
+
+static int
rip6_recvoob(struct socket *so, struct mbuf *m, int flags)
{
KASSERT(solocked(so));
@@ -920,6 +928,7 @@ rip6_usrreq(struct socket *so, int req,
KASSERT(req != PRU_SENSE);
KASSERT(req != PRU_PEERADDR);
KASSERT(req != PRU_SOCKADDR);
+ KASSERT(req != PRU_RCVD);
KASSERT(req != PRU_RCVOOB);
KASSERT(req != PRU_SEND);
KASSERT(req != PRU_SENDOOB);
@@ -938,13 +947,6 @@ rip6_usrreq(struct socket *so, int req,
error = EOPNOTSUPP;
break;
- /*
- * Not supported.
- */
- case PRU_RCVD:
- error = EOPNOTSUPP;
- break;
-
default:
panic("rip6_usrreq");
}
@@ -1006,6 +1008,7 @@ PR_WRAP_USRREQS(rip6)
#define rip6_stat rip6_stat_wrapper
#define rip6_peeraddr rip6_peeraddr_wrapper
#define rip6_sockaddr rip6_sockaddr_wrapper
+#define rip6_rcvd rip6_rcvd_wrapper
#define rip6_recvoob rip6_recvoob_wrapper
#define rip6_send rip6_send_wrapper
#define rip6_sendoob rip6_sendoob_wrapper
@@ -1025,6 +1028,7 @@ const struct pr_usrreqs rip6_usrreqs = {
.pr_stat = rip6_stat,
.pr_peeraddr = rip6_peeraddr,
.pr_sockaddr = rip6_sockaddr,
+ .pr_rcvd = rip6_rcvd,
.pr_recvoob = rip6_recvoob,
.pr_send = rip6_send,
.pr_sendoob = rip6_sendoob,
Index: src/sys/netinet6/udp6_usrreq.c
diff -u src/sys/netinet6/udp6_usrreq.c:1.113 src/sys/netinet6/udp6_usrreq.c:1.114
--- src/sys/netinet6/udp6_usrreq.c:1.113 Tue Aug 5 07:55:32 2014
+++ src/sys/netinet6/udp6_usrreq.c Fri Aug 8 03:05:45 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: udp6_usrreq.c,v 1.113 2014/08/05 07:55:32 rtr Exp $ */
+/* $NetBSD: udp6_usrreq.c,v 1.114 2014/08/08 03:05:45 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.113 2014/08/05 07:55:32 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: udp6_usrreq.c,v 1.114 2014/08/08 03:05:45 rtr Exp $");
#include "opt_inet.h"
#include "opt_inet_csum.h"
@@ -828,6 +828,14 @@ udp6_sockaddr(struct socket *so, struct
}
static int
+udp6_rcvd(struct socket *so, int flags, struct lwp *l)
+{
+ KASSERT(solocked(so));
+
+ return EOPNOTSUPP;
+}
+
+static int
udp6_recvoob(struct socket *so, struct mbuf *m, int flags)
{
KASSERT(solocked(so));
@@ -887,6 +895,7 @@ udp6_usrreq(struct socket *so, int req,
KASSERT(req != PRU_SENSE);
KASSERT(req != PRU_PEERADDR);
KASSERT(req != PRU_SOCKADDR);
+ KASSERT(req != PRU_RCVD);
KASSERT(req != PRU_RCVOOB);
KASSERT(req != PRU_SEND);
KASSERT(req != PRU_SENDOOB);
@@ -913,9 +922,6 @@ udp6_usrreq(struct socket *so, int req,
error = EOPNOTSUPP;
break;
- case PRU_RCVD:
- return EOPNOTSUPP; /* do not free mbuf's */
-
default:
panic("udp6_usrreq");
}
@@ -1010,6 +1016,7 @@ PR_WRAP_USRREQS(udp6)
#define udp6_stat udp6_stat_wrapper
#define udp6_peeraddr udp6_peeraddr_wrapper
#define udp6_sockaddr udp6_sockaddr_wrapper
+#define udp6_rcvd udp6_rcvd_wrapper
#define udp6_recvoob udp6_recvoob_wrapper
#define udp6_send udp6_send_wrapper
#define udp6_sendoob udp6_sendoob_wrapper
@@ -1029,6 +1036,7 @@ const struct pr_usrreqs udp6_usrreqs = {
.pr_stat = udp6_stat,
.pr_peeraddr = udp6_peeraddr,
.pr_sockaddr = udp6_sockaddr,
+ .pr_rcvd = udp6_rcvd,
.pr_recvoob = udp6_recvoob,
.pr_send = udp6_send,
.pr_sendoob = udp6_sendoob,
Index: src/sys/netipsec/keysock.c
diff -u src/sys/netipsec/keysock.c:1.41 src/sys/netipsec/keysock.c:1.42
--- src/sys/netipsec/keysock.c:1.41 Tue Aug 5 07:55:32 2014
+++ src/sys/netipsec/keysock.c Fri Aug 8 03:05:45 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: keysock.c,v 1.41 2014/08/05 07:55:32 rtr Exp $ */
+/* $NetBSD: keysock.c,v 1.42 2014/08/08 03:05:45 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.41 2014/08/05 07:55:32 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: keysock.c,v 1.42 2014/08/08 03:05:45 rtr Exp $");
#include "opt_ipsec.h"
@@ -609,6 +609,14 @@ key_sockaddr(struct socket *so, struct m
}
static int
+key_rcvd(struct socket *so, int flags, struct lwp *l)
+{
+ KASSERT(solocked(so));
+
+ return EOPNOTSUPP;
+}
+
+static int
key_recvoob(struct socket *so, struct mbuf *m, int flags)
{
KASSERT(solocked(so));
@@ -666,6 +674,7 @@ key_usrreq(struct socket *so, int req,st
KASSERT(req != PRU_SENSE);
KASSERT(req != PRU_PEERADDR);
KASSERT(req != PRU_SOCKADDR);
+ KASSERT(req != PRU_RCVD);
KASSERT(req != PRU_RCVOOB);
KASSERT(req != PRU_SEND);
KASSERT(req != PRU_SENDOOB);
@@ -698,6 +707,7 @@ PR_WRAP_USRREQS(key)
#define key_stat key_stat_wrapper
#define key_peeraddr key_peeraddr_wrapper
#define key_sockaddr key_sockaddr_wrapper
+#define key_rcvd key_rcvd_wrapper
#define key_recvoob key_recvoob_wrapper
#define key_send key_send_wrapper
#define key_sendoob key_sendoob_wrapper
@@ -717,6 +727,7 @@ const struct pr_usrreqs key_usrreqs = {
.pr_stat = key_stat,
.pr_peeraddr = key_peeraddr,
.pr_sockaddr = key_sockaddr,
+ .pr_rcvd = key_rcvd,
.pr_recvoob = key_recvoob,
.pr_send = key_send,
.pr_sendoob = key_sendoob,
Index: src/sys/netmpls/mpls_proto.c
diff -u src/sys/netmpls/mpls_proto.c:1.22 src/sys/netmpls/mpls_proto.c:1.23
--- src/sys/netmpls/mpls_proto.c:1.22 Tue Aug 5 07:55:32 2014
+++ src/sys/netmpls/mpls_proto.c Fri Aug 8 03:05:45 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: mpls_proto.c,v 1.22 2014/08/05 07:55:32 rtr Exp $ */
+/* $NetBSD: mpls_proto.c,v 1.23 2014/08/08 03:05:45 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.22 2014/08/05 07:55:32 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mpls_proto.c,v 1.23 2014/08/08 03:05:45 rtr Exp $");
#include "opt_inet.h"
#include "opt_mbuftrace.h"
@@ -181,6 +181,14 @@ mpls_sockaddr(struct socket *so, struct
}
static int
+mpls_rcvd(struct socket *so, int flags, struct lwp *l)
+{
+ KASSERT(solocked(so));
+
+ return EOPNOTSUPP;
+}
+
+static int
mpls_recvoob(struct socket *so, struct mbuf *m, int flags)
{
KASSERT(solocked(so));
@@ -223,6 +231,7 @@ mpls_usrreq(struct socket *so, int req,
KASSERT(req != PRU_SENSE);
KASSERT(req != PRU_PEERADDR);
KASSERT(req != PRU_SOCKADDR);
+ KASSERT(req != PRU_RCVD);
KASSERT(req != PRU_RCVOOB);
KASSERT(req != PRU_SEND);
KASSERT(req != PRU_SENDOOB);
@@ -325,6 +334,7 @@ PR_WRAP_USRREQS(mpls)
#define mpls_stat mpls_stat_wrapper
#define mpls_peeraddr mpls_peeraddr_wrapper
#define mpls_sockaddr mpls_sockaddr_wrapper
+#define mpls_rcvd mpls_rcvd_wrapper
#define mpls_recvoob mpls_recvoob_wrapper
#define mpls_send mpls_send_wrapper
#define mpls_sendoob mpls_sendoob_wrapper
@@ -344,6 +354,7 @@ static const struct pr_usrreqs mpls_usrr
.pr_stat = mpls_stat,
.pr_peeraddr = mpls_peeraddr,
.pr_sockaddr = mpls_sockaddr,
+ .pr_rcvd = mpls_rcvd,
.pr_recvoob = mpls_recvoob,
.pr_send = mpls_send,
.pr_sendoob = mpls_sendoob,
Index: src/sys/netnatm/natm.c
diff -u src/sys/netnatm/natm.c:1.43 src/sys/netnatm/natm.c:1.44
--- src/sys/netnatm/natm.c:1.43 Tue Aug 5 07:55:32 2014
+++ src/sys/netnatm/natm.c Fri Aug 8 03:05:45 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: natm.c,v 1.43 2014/08/05 07:55:32 rtr Exp $ */
+/* $NetBSD: natm.c,v 1.44 2014/08/08 03:05:45 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.43 2014/08/05 07:55:32 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: natm.c,v 1.44 2014/08/08 03:05:45 rtr Exp $");
#include <sys/param.h>
#include <sys/kmem.h>
@@ -313,17 +313,61 @@ natm_peeraddr(struct socket *so, struct
static int
natm_sockaddr(struct socket *so, struct mbuf *nam)
{
- KASSERT(solocked(so));
+ KASSERT(solocked(so));
- return EOPNOTSUPP;
+ return EOPNOTSUPP;
+}
+
+static int
+natm_rcvd(struct socket *so, int flags, struct lwp *l)
+{
+ KASSERT(solocked(so));
+
+ return EOPNOTSUPP;
}
static int
natm_recvoob(struct socket *so, struct mbuf *m, int flags)
{
- KASSERT(solocked(so));
+ KASSERT(solocked(so));
- return EOPNOTSUPP;
+ return EOPNOTSUPP;
+}
+
+static int
+natm_send(struct socket *so, struct mbuf *m, struct mbuf *nam,
+ struct mbuf *control)
+{
+ struct natmpcb *npcb = (struct natmpcb *) so->so_pcb;
+ struct atm_pseudohdr *aph;
+
+ KASSERT(solocked(so));
+ KASSERT(pcb != NULL);
+ KASSERT(m != NULL);
+
+ if (control && control->m_len) {
+ m_freem(control);
+ m_freem(m);
+ return EINVAL;
+ }
+
+ /*
+ * send the data. we must put an atm_pseudohdr on first
+ */
+ s = SPLSOFTNET();
+ M_PREPEND(m, sizeof(*aph), M_WAITOK);
+ if (m == NULL) {
+ error = ENOBUFS;
+ break;
+ }
+ aph = mtod(m, struct atm_pseudohdr *);
+ ATM_PH_VPI(aph) = npcb->npcb_vpi;
+ ATM_PH_SETVCI(aph, npcb->npcb_vci);
+ ATM_PH_FLAGS(aph) = (proto == PROTO_NATMAAL5) ? ATM_PH_AAL5 : 0;
+ error = atm_output(npcb->npcb_ifp, m, NULL, NULL);
+ splx(s);
+
+ return error;
}
static int
@@ -399,6 +443,7 @@ natm_usrreq(struct socket *so, int req,
KASSERT(req != PRU_SENSE);
KASSERT(req != PRU_PEERADDR);
KASSERT(req != PRU_SOCKADDR);
+ KASSERT(req != PRU_RCVD);
KASSERT(req != PRU_RCVOOB);
KASSERT(req != PRU_SEND);
KASSERT(req != PRU_SENDOOB);
@@ -414,7 +459,6 @@ natm_usrreq(struct socket *so, int req,
switch (req) {
case PRU_CONNECT2: /* connect two sockets */
- case PRU_RCVD: /* have taken data; more room now */
case PRU_FASTTIMO: /* 200ms timeout */
case PRU_SLOWTIMO: /* 500ms timeout */
case PRU_PROTORCV: /* receive from below */
@@ -525,6 +569,7 @@ PR_WRAP_USRREQS(natm)
#define natm_stat natm_stat_wrapper
#define natm_peeraddr natm_peeraddr_wrapper
#define natm_sockaddr natm_sockaddr_wrapper
+#define natm_rcvd natm_rcvd_wrapper
#define natm_recvoob natm_recvoob_wrapper
#define natm_send natm_send_wrapper
#define natm_sendoob natm_sendoob_wrapper
@@ -544,6 +589,7 @@ const struct pr_usrreqs natm_usrreqs = {
.pr_stat = natm_stat,
.pr_peeraddr = natm_peeraddr,
.pr_sockaddr = natm_sockaddr,
+ .pr_rcvd = natm_rcvd,
.pr_recvoob = natm_recvoob,
.pr_send = natm_send,
.pr_sendoob = natm_sendoob,
Index: src/sys/rump/net/lib/libsockin/sockin.c
diff -u src/sys/rump/net/lib/libsockin/sockin.c:1.56 src/sys/rump/net/lib/libsockin/sockin.c:1.57
--- src/sys/rump/net/lib/libsockin/sockin.c:1.56 Tue Aug 5 07:55:32 2014
+++ src/sys/rump/net/lib/libsockin/sockin.c Fri Aug 8 03:05:45 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: sockin.c,v 1.56 2014/08/05 07:55:32 rtr Exp $ */
+/* $NetBSD: sockin.c,v 1.57 2014/08/08 03:05:45 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.56 2014/08/05 07:55:32 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sockin.c,v 1.57 2014/08/08 03:05:45 rtr Exp $");
#include <sys/param.h>
#include <sys/condvar.h>
@@ -79,6 +79,7 @@ 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_rcvd(struct socket *, int, struct lwp *);
static int sockin_recvoob(struct socket *, struct mbuf *, int);
static int sockin_send(struct socket *, struct mbuf *, struct mbuf *,
struct mbuf *, struct lwp *);
@@ -101,6 +102,7 @@ static const struct pr_usrreqs sockin_us
.pr_stat = sockin_stat,
.pr_peeraddr = sockin_peeraddr,
.pr_sockaddr = sockin_sockaddr,
+ .pr_rcvd = sockin_rcvd,
.pr_recvoob = sockin_recvoob,
.pr_send = sockin_send,
.pr_sendoob = sockin_sendoob,
@@ -592,6 +594,14 @@ sockin_sockaddr(struct socket *so, struc
}
static int
+sockin_rcvd(struct socket *so, int flags, struct lwp *l)
+{
+ KASSERT(solocked(so));
+
+ panic("sockin_rcvd: IMPLEMENT ME, rcvd not supported");
+}
+
+static int
sockin_recvoob(struct socket *so, struct mbuf *m, int flags)
{
KASSERT(solocked(so));
@@ -684,6 +694,7 @@ sockin_usrreq(struct socket *so, int req
KASSERT(req != PRU_SENSE);
KASSERT(req != PRU_PEERADDR);
KASSERT(req != PRU_SOCKADDR);
+ KASSERT(req != PRU_RCVD);
KASSERT(req != PRU_RCVOOB);
KASSERT(req != PRU_SEND);
KASSERT(req != PRU_SENDOOB);
Index: src/sys/sys/protosw.h
diff -u src/sys/sys/protosw.h:1.58 src/sys/sys/protosw.h:1.59
--- src/sys/sys/protosw.h:1.58 Tue Aug 5 07:55:32 2014
+++ src/sys/sys/protosw.h Fri Aug 8 03:05:45 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: protosw.h,v 1.58 2014/08/05 07:55:32 rtr Exp $ */
+/* $NetBSD: protosw.h,v 1.59 2014/08/08 03:05:45 rtr Exp $ */
/*-
* Copyright (c) 1982, 1986, 1993
@@ -110,7 +110,7 @@ struct protosw {
#define PR_ATOMIC 0x01 /* exchange atomic messages only */
#define PR_ADDR 0x02 /* addresses given with messages */
#define PR_CONNREQUIRED 0x04 /* connection required by protocol */
-#define PR_WANTRCVD 0x08 /* want PRU_RCVD calls */
+#define PR_WANTRCVD 0x08 /* want pr_rcvd() calls */
#define PR_RIGHTS 0x10 /* passes capabilities */
#define PR_LISTEN 0x20 /* supports listen(2) and accept(2) */
#define PR_LASTHDR 0x40 /* enforce ipsec policy; last header */
@@ -249,6 +249,7 @@ 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_rcvd)(struct socket *, int, struct lwp *);
int (*pr_recvoob)(struct socket *, struct mbuf *, int);
int (*pr_send)(struct socket *, struct mbuf *, struct mbuf *,
struct mbuf *, struct lwp *);
@@ -407,6 +408,16 @@ name##_sockaddr_wrapper(struct socket *a
return rv; \
} \
static int \
+name##_rcvd_wrapper(struct socket *a, int b, \
+ struct lwp *c) \
+{ \
+ int rv; \
+ KERNEL_LOCK(1, NULL); \
+ rv = name##_rcvd(a, b, c); \
+ KERNEL_UNLOCK_ONE(NULL); \
+ return rv; \
+} \
+static int \
name##_recvoob_wrapper(struct socket *a, \
struct mbuf *b, int c) \
{ \