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) \ { \