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()
This commit is contained in:
rtr 2014-08-08 03:05:44 +00:00
parent 128b925846
commit 822872eada
25 changed files with 366 additions and 168 deletions

View File

@ -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, unsigned long long slen,
* 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, unsigned long long slen,
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 &&

View File

@ -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 **paddr, struct uio *uio,
* 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 **paddr, struct uio *uio,
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) {

View File

@ -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>
@ -368,6 +368,52 @@ unp_setaddr(struct socket *so, struct mbuf *nam, bool peeraddr)
}
}
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)
{
@ -520,8 +566,6 @@ unp_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *nam,
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, struct mbuf *m, struct mbuf *nam,
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, struct mbuf *m, struct mbuf *nam,
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,

View File

@ -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 mbuf **mp0)
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);

View File

@ -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_long, void *, struct ifnet *);
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_usrreqs = {
.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,
@ -345,6 +347,14 @@ link_sockaddr(struct socket *so, struct mbuf *nam)
return EOPNOTSUPP;
}
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)
{
@ -387,6 +397,7 @@ link_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *nam,
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);

View File

@ -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, struct mbuf *m, struct mbuf *nam,
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, struct mbuf *m, struct mbuf *nam,
error = EOPNOTSUPP;
break;
case PRU_RCVD:
error = EOPNOTSUPP;
break;
default:
panic("raw_usrreq");
}

View File

@ -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"
@ -347,6 +347,14 @@ COMPATNAME(route_sockaddr)(struct socket *so, struct mbuf *nam)
return 0;
}
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)
{
@ -402,6 +410,7 @@ COMPATNAME(route_usrreq)(struct socket *so, int req, struct mbuf *m,
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_usrreqs = {
.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),

View File

@ -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, struct mbuf *m, struct mbuf *addr,
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, struct mbuf *m, struct mbuf *addr,
error = EOPNOTSUPP;
break;
case PRU_RCVD:
/*
* Don't mfree. Good architecture...
*/
return (EOPNOTSUPP);
default:
error = EOPNOTSUPP;
}
@ -527,6 +522,14 @@ ddp_sockaddr(struct socket *so, struct mbuf *nam)
return 0;
}
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)
{
@ -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,

View File

@ -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
@ -646,6 +646,14 @@ hci_sockaddr(struct socket *so, struct mbuf *nam)
return 0;
}
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)
{
@ -735,6 +743,7 @@ hci_usrreq(struct socket *up, int req, struct mbuf *m,
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, struct mbuf *m,
}
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,

View File

@ -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
@ -274,6 +274,14 @@ l2cap_sockaddr(struct socket *so, struct mbuf *nam)
return l2cap_sockaddr_pcb(pcb, sa);
}
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)
{
@ -342,9 +350,6 @@ l2cap_sendoob(struct socket *so, struct mbuf *m, struct mbuf *control)
* 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, struct mbuf *m,
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, struct mbuf *m,
}
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,

View File

@ -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_dlc *, int);
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 *);

View File

@ -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 proto)
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;
@ -282,6 +282,19 @@ rfcomm_sockaddr(struct socket *so, struct mbuf *nam)
return rfcomm_sockaddr_pcb(pcb, sa);
}
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)
{
@ -340,9 +353,6 @@ rfcomm_sendoob(struct socket *so, struct mbuf *m, struct mbuf *control)
* 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, struct mbuf *m,
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, struct mbuf *m,
}
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,

View File

@ -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, struct mbuf *m)
}
/*
* 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, struct mbuf *m)
* 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);

View File

@ -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
@ -265,6 +265,14 @@ sco_sockaddr(struct socket *so, struct mbuf *nam)
return sco_sockaddr_pcb(pcb, sa);
}
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)
{
@ -359,6 +367,7 @@ sco_usrreq(struct socket *up, int req, struct mbuf *m,
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, struct mbuf *m,
}
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,

View File

@ -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"
@ -714,6 +714,14 @@ rip_sockaddr(struct socket *so, struct mbuf *nam)
return 0;
}
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)
{
@ -802,6 +810,7 @@ rip_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *nam,
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, struct mbuf *m, struct mbuf *nam,
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,

View File

@ -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)) &&

View File

@ -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, struct mbuf *m, struct mbuf *nam,
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, struct mbuf *m, struct mbuf *nam,
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");
}
@ -1066,6 +1052,40 @@ tcp_sockaddr(struct socket *so, struct mbuf *nam)
return 0;
}
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)
{
@ -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,

View File

@ -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"
@ -1040,6 +1040,14 @@ udp_sockaddr(struct socket *so, struct mbuf *nam)
return 0;
}
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)
{
@ -1131,6 +1139,7 @@ udp_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *nam,
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, struct mbuf *m, struct mbuf *nam,
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,

View File

@ -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"
@ -829,6 +829,14 @@ rip6_sockaddr(struct socket *so, struct mbuf *nam)
return 0;
}
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)
{
@ -920,6 +928,7 @@ rip6_usrreq(struct socket *so, int req, struct mbuf *m,
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, struct mbuf *m,
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,

View File

@ -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"
@ -827,6 +827,14 @@ udp6_sockaddr(struct socket *so, struct mbuf *nam)
return 0;
}
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)
{
@ -887,6 +895,7 @@ udp6_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *addr6,
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, struct mbuf *m, struct mbuf *addr6,
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,

View File

@ -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"
@ -608,6 +608,14 @@ key_sockaddr(struct socket *so, struct mbuf *nam)
return 0;
}
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)
{
@ -666,6 +674,7 @@ key_usrreq(struct socket *so, int req,struct mbuf *m, struct mbuf *nam,
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,

View File

@ -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"
@ -180,6 +180,14 @@ mpls_sockaddr(struct socket *so, struct mbuf *nam)
return EOPNOTSUPP;
}
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)
{
@ -223,6 +231,7 @@ mpls_usrreq(struct socket *so, int req, struct mbuf *m,
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_usrreqs = {
.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,

View File

@ -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 mbuf *nam)
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, struct mbuf *m, struct mbuf *nam,
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, struct mbuf *m, struct mbuf *nam,
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,

View File

@ -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 *, u_long, void *, struct ifnet *);
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_usrreqs = {
.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,
@ -591,6 +593,14 @@ sockin_sockaddr(struct socket *so, struct mbuf *nam)
return error;
}
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)
{
@ -684,6 +694,7 @@ sockin_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *nam,
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);

View File

@ -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, struct mbuf *b) \
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) \
{ \