Module Name: src Committed By: rtr Date: Sun Jul 6 03:33:33 UTC 2014
Modified Files: src/sys/kern: sys_socket.c uipc_usrreq.c src/sys/net: raw_usrreq.c rtsock.c src/sys/netatalk: ddp_usrreq.c src/sys/netbt: hci_socket.c l2cap_socket.c rfcomm_socket.c sco_socket.c src/sys/netinet: raw_ip.c tcp_usrreq.c udp_usrreq.c src/sys/netinet6: raw_ip6.c udp6_usrreq.c src/sys/netipsec: keysock.c src/sys/netnatm: natm.c src/sys/sys: protosw.h Log Message: * split PRU_SENSE functionality out of xxx_usrreq() switches and place into separate xxx_stat(struct socket *, struct stat *) functions. * replace calls using pr_generic with req == PRU_SENSE with pr_stat(). further change will follow that cleans up the pattern used to extract the pcb and test for its presence. reviewed by rmind To generate a diff of this commit: cvs rdiff -u -r1.71 -r1.72 src/sys/kern/sys_socket.c cvs rdiff -u -r1.155 -r1.156 src/sys/kern/uipc_usrreq.c cvs rdiff -u -r1.40 -r1.41 src/sys/net/raw_usrreq.c cvs rdiff -u -r1.149 -r1.150 src/sys/net/rtsock.c cvs rdiff -u -r1.47 -r1.48 src/sys/netatalk/ddp_usrreq.c cvs rdiff -u -r1.26 -r1.27 src/sys/netbt/hci_socket.c cvs rdiff -u -r1.17 -r1.18 src/sys/netbt/l2cap_socket.c cvs rdiff -u -r1.18 -r1.19 src/sys/netbt/rfcomm_socket.c cvs rdiff -u -r1.19 -r1.20 src/sys/netbt/sco_socket.c cvs rdiff -u -r1.127 -r1.128 src/sys/netinet/raw_ip.c cvs rdiff -u -r1.180 -r1.181 src/sys/netinet/tcp_usrreq.c cvs rdiff -u -r1.202 -r1.203 src/sys/netinet/udp_usrreq.c cvs rdiff -u -r1.121 -r1.122 src/sys/netinet6/raw_ip6.c cvs rdiff -u -r1.101 -r1.102 src/sys/netinet6/udp6_usrreq.c cvs rdiff -u -r1.29 -r1.30 src/sys/netipsec/keysock.c cvs rdiff -u -r1.29 -r1.30 src/sys/netnatm/natm.c cvs rdiff -u -r1.49 -r1.50 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/kern/sys_socket.c diff -u src/sys/kern/sys_socket.c:1.71 src/sys/kern/sys_socket.c:1.72 --- src/sys/kern/sys_socket.c:1.71 Tue Jul 1 05:49:18 2014 +++ src/sys/kern/sys_socket.c Sun Jul 6 03:33:33 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: sys_socket.c,v 1.71 2014/07/01 05:49:18 rtr Exp $ */ +/* $NetBSD: sys_socket.c,v 1.72 2014/07/06 03:33:33 rtr Exp $ */ /*- * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc. @@ -61,7 +61,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sys_socket.c,v 1.71 2014/07/01 05:49:18 rtr Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sys_socket.c,v 1.72 2014/07/06 03:33:33 rtr Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -239,8 +239,7 @@ soo_stat(file_t *fp, struct stat *ub) ub->st_mode = S_IFSOCK; solock(so); - error = (*so->so_proto->pr_usrreqs->pr_generic)(so, PRU_SENSE, - (struct mbuf *)ub, NULL, NULL, curlwp); + error = (*so->so_proto->pr_usrreqs->pr_stat)(so, ub); sounlock(so); return error; Index: src/sys/kern/uipc_usrreq.c diff -u src/sys/kern/uipc_usrreq.c:1.155 src/sys/kern/uipc_usrreq.c:1.156 --- src/sys/kern/uipc_usrreq.c:1.155 Tue Jul 1 05:49:18 2014 +++ src/sys/kern/uipc_usrreq.c Sun Jul 6 03:33:33 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: uipc_usrreq.c,v 1.155 2014/07/01 05:49:18 rtr Exp $ */ +/* $NetBSD: uipc_usrreq.c,v 1.156 2014/07/06 03:33:33 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.155 2014/07/01 05:49:18 rtr Exp $"); +__KERNEL_RCSID(0, "$NetBSD: uipc_usrreq.c,v 1.156 2014/07/06 03:33:33 rtr Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -377,6 +377,7 @@ unp_usrreq(struct socket *so, int req, s KASSERT(req != PRU_ATTACH); KASSERT(req != PRU_DETACH); KASSERT(req != PRU_CONTROL); + KASSERT(req != PRU_SENSE); KASSERT(solocked(so)); unp = sotounpcb(so); @@ -627,30 +628,6 @@ unp_usrreq(struct socket *so, int req, s unp_detach(so); break; - case PRU_SENSE: - ((struct stat *) m)->st_blksize = so->so_snd.sb_hiwat; - switch (so->so_type) { - case SOCK_SEQPACKET: /* FALLTHROUGH */ - case SOCK_STREAM: - if (unp->unp_conn == 0) - break; - - so2 = unp->unp_conn->unp_socket; - KASSERT(solocked2(so, so2)); - ((struct stat *) m)->st_blksize += so2->so_rcv.sb_cc; - break; - default: - break; - } - ((struct stat *) m)->st_dev = NODEV; - if (unp->unp_ino == 0) - unp->unp_ino = unp_ino++; - ((struct stat *) m)->st_atimespec = - ((struct stat *) m)->st_mtimespec = - ((struct stat *) m)->st_ctimespec = unp->unp_ctime; - ((struct stat *) m)->st_ino = unp->unp_ino; - return (0); - case PRU_RCVOOB: error = EOPNOTSUPP; break; @@ -871,6 +848,38 @@ unp_ioctl(struct socket *so, u_long cmd, return EOPNOTSUPP; } +static int +unp_stat(struct socket *so, struct stat *ub) +{ + struct unpcb *unp; + struct socket *so2; + + unp = sotounpcb(so); + if (unp == NULL) + return EINVAL; + + ub->st_blksize = so->so_snd.sb_hiwat; + switch (so->so_type) { + case SOCK_SEQPACKET: /* FALLTHROUGH */ + case SOCK_STREAM: + if (unp->unp_conn == 0) + break; + + so2 = unp->unp_conn->unp_socket; + KASSERT(solocked2(so, so2)); + ub->st_blksize += so2->so_rcv.sb_cc; + break; + default: + break; + } + ub->st_dev = NODEV; + if (unp->unp_ino == 0) + unp->unp_ino = unp_ino++; + ub->st_atimespec = ub->st_mtimespec = ub->st_ctimespec = unp->unp_ctime; + ub->st_ino = unp->unp_ino; + return (0); +} + /* * Allocate the new sockaddr. We have to allocate one * extra byte so that we can ensure that the pathname @@ -1817,5 +1826,6 @@ const struct pr_usrreqs unp_usrreqs = { .pr_attach = unp_attach, .pr_detach = unp_detach, .pr_ioctl = unp_ioctl, + .pr_stat = unp_stat, .pr_generic = unp_usrreq, }; Index: src/sys/net/raw_usrreq.c diff -u src/sys/net/raw_usrreq.c:1.40 src/sys/net/raw_usrreq.c:1.41 --- src/sys/net/raw_usrreq.c:1.40 Sun Jun 22 08:10:18 2014 +++ src/sys/net/raw_usrreq.c Sun Jul 6 03:33:33 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: raw_usrreq.c,v 1.40 2014/06/22 08:10:18 rtr Exp $ */ +/* $NetBSD: raw_usrreq.c,v 1.41 2014/07/06 03:33:33 rtr Exp $ */ /* * Copyright (c) 1980, 1986, 1993 @@ -36,7 +36,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: raw_usrreq.c,v 1.40 2014/06/22 08:10:18 rtr Exp $"); +__KERNEL_RCSID(0, "$NetBSD: raw_usrreq.c,v 1.41 2014/07/06 03:33:33 rtr Exp $"); #include <sys/param.h> #include <sys/mbuf.h> @@ -163,6 +163,7 @@ raw_usrreq(struct socket *so, int req, s KASSERT(req != PRU_ATTACH); KASSERT(req != PRU_DETACH); KASSERT(req != PRU_CONTROL); + KASSERT(req != PRU_SENSE); s = splsoftnet(); KERNEL_LOCK(1, NULL); @@ -237,13 +238,6 @@ raw_usrreq(struct socket *so, int req, s raw_disconnect(rp); break; - case PRU_SENSE: - /* - * stat: don't bother with a blocksize. - */ - error = 0; - break; - /* * Not supported. */ Index: src/sys/net/rtsock.c diff -u src/sys/net/rtsock.c:1.149 src/sys/net/rtsock.c:1.150 --- src/sys/net/rtsock.c:1.149 Tue Jul 1 05:49:18 2014 +++ src/sys/net/rtsock.c Sun Jul 6 03:33:33 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: rtsock.c,v 1.149 2014/07/01 05:49:18 rtr Exp $ */ +/* $NetBSD: rtsock.c,v 1.150 2014/07/06 03:33:33 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.149 2014/07/01 05:49:18 rtr Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rtsock.c,v 1.150 2014/07/06 03:33:33 rtr Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -231,6 +231,12 @@ COMPATNAME(route_ioctl)(struct socket *s } static int +COMPATNAME(route_stat)(struct socket *so, struct stat *ub) +{ + return 0; +} + +static int COMPATNAME(route_usrreq)(struct socket *so, int req, struct mbuf *m, struct mbuf *nam, struct mbuf *control, struct lwp *l) { @@ -239,6 +245,7 @@ COMPATNAME(route_usrreq)(struct socket * KASSERT(req != PRU_ATTACH); KASSERT(req != PRU_DETACH); KASSERT(req != PRU_CONTROL); + KASSERT(req != PRU_SENSE); s = splsoftnet(); error = raw_usrreq(so, req, m, nam, control, l); @@ -1336,6 +1343,7 @@ static const struct pr_usrreqs route_usr .pr_attach = COMPATNAME(route_attach_wrapper), .pr_detach = COMPATNAME(route_detach_wrapper), .pr_ioctl = COMPATNAME(route_ioctl_wrapper), + .pr_stat = COMPATNAME(route_stat_wrapper), .pr_generic = COMPATNAME(route_usrreq_wrapper), }; Index: src/sys/netatalk/ddp_usrreq.c diff -u src/sys/netatalk/ddp_usrreq.c:1.47 src/sys/netatalk/ddp_usrreq.c:1.48 --- src/sys/netatalk/ddp_usrreq.c:1.47 Tue Jul 1 05:49:18 2014 +++ src/sys/netatalk/ddp_usrreq.c Sun Jul 6 03:33:33 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: ddp_usrreq.c,v 1.47 2014/07/01 05:49:18 rtr Exp $ */ +/* $NetBSD: ddp_usrreq.c,v 1.48 2014/07/06 03:33:33 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.47 2014/07/01 05:49:18 rtr Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ddp_usrreq.c,v 1.48 2014/07/06 03:33:33 rtr Exp $"); #include "opt_mbuftrace.h" @@ -85,6 +85,7 @@ ddp_usrreq(struct socket *so, int req, s KASSERT(req != PRU_ATTACH); KASSERT(req != PRU_DETACH); KASSERT(req != PRU_CONTROL); + KASSERT(req != PRU_SENSE); ddp = sotoddpcb(so); @@ -187,13 +188,6 @@ ddp_usrreq(struct socket *so, int req, s */ return (EOPNOTSUPP); - case PRU_SENSE: - /* - * 1. Don't return block size. - * 2. Don't mfree. - */ - return (0); - default: error = EOPNOTSUPP; } @@ -484,6 +478,19 @@ ddp_ioctl(struct socket *so, u_long cmd, return at_control(cmd, addr, ifp); } +static int +ddp_stat(struct socket *so, struct stat *ub) +{ + struct ddpcb *ddp; + + ddp = sotoddpcb(so); + if (ddp == NULL) + return EINVAL; + + /* Don't return block size. */ + return 0; +} + /* * For the moment, this just find the pcb with the correct local address. * In the future, this will actually do some real searching, so we can use @@ -558,12 +565,14 @@ PR_WRAP_USRREQS(ddp) #define ddp_attach ddp_attach_wrapper #define ddp_detach ddp_detach_wrapper #define ddp_ioctl ddp_ioctl_wrapper +#define ddp_stat ddp_stat_wrapper #define ddp_usrreq ddp_usrreq_wrapper const struct pr_usrreqs ddp_usrreqs = { .pr_attach = ddp_attach, .pr_detach = ddp_detach, .pr_ioctl = ddp_ioctl, + .pr_stat = ddp_stat, .pr_generic = ddp_usrreq, }; Index: src/sys/netbt/hci_socket.c diff -u src/sys/netbt/hci_socket.c:1.26 src/sys/netbt/hci_socket.c:1.27 --- src/sys/netbt/hci_socket.c:1.26 Tue Jul 1 05:49:18 2014 +++ src/sys/netbt/hci_socket.c Sun Jul 6 03:33:33 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: hci_socket.c,v 1.26 2014/07/01 05:49:18 rtr Exp $ */ +/* $NetBSD: hci_socket.c,v 1.27 2014/07/06 03:33:33 rtr Exp $ */ /*- * Copyright (c) 2005 Iain Hibbert. @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: hci_socket.c,v 1.26 2014/07/01 05:49:18 rtr Exp $"); +__KERNEL_RCSID(0, "$NetBSD: hci_socket.c,v 1.27 2014/07/06 03:33:33 rtr Exp $"); /* load symbolic names */ #ifdef BLUETOOTH_DEBUG @@ -493,6 +493,17 @@ hci_ioctl(struct socket *up, u_long cmd, return err; } +static int +hci_stat(struct socket *so, struct stat *ub) +{ + struct hci_pcb *pcb = (struct hci_pcb *)so->so_pcb; + + if (pcb == NULL) + return EINVAL; + + return 0; +} + /* * User Request. * up is socket @@ -515,6 +526,7 @@ hci_usrreq(struct socket *up, int req, s KASSERT(req != PRU_ATTACH); KASSERT(req != PRU_DETACH); KASSERT(req != PRU_CONTROL); + KASSERT(req != PRU_SENSE); switch(req) { case PRU_PURGEIF: @@ -628,9 +640,6 @@ hci_usrreq(struct socket *up, int req, s return hci_send(pcb, m, (sa ? &sa->bt_bdaddr : &pcb->hp_raddr)); - case PRU_SENSE: - return 0; /* (no sense - Doh!) */ - case PRU_RCVD: case PRU_RCVOOB: return EOPNOTSUPP; /* (no release) */ @@ -869,11 +878,13 @@ PR_WRAP_USRREQS(hci) #define hci_attach hci_attach_wrapper #define hci_detach hci_detach_wrapper #define hci_ioctl hci_ioctl_wrapper +#define hci_stat hci_stat_wrapper #define hci_usrreq hci_usrreq_wrapper const struct pr_usrreqs hci_usrreqs = { .pr_attach = hci_attach, .pr_detach = hci_detach, .pr_ioctl = hci_ioctl, + .pr_stat = hci_stat, .pr_generic = hci_usrreq, }; Index: src/sys/netbt/l2cap_socket.c diff -u src/sys/netbt/l2cap_socket.c:1.17 src/sys/netbt/l2cap_socket.c:1.18 --- src/sys/netbt/l2cap_socket.c:1.17 Tue Jul 1 05:49:18 2014 +++ src/sys/netbt/l2cap_socket.c Sun Jul 6 03:33:33 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: l2cap_socket.c,v 1.17 2014/07/01 05:49:18 rtr Exp $ */ +/* $NetBSD: l2cap_socket.c,v 1.18 2014/07/06 03:33:33 rtr Exp $ */ /*- * Copyright (c) 2005 Iain Hibbert. @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: l2cap_socket.c,v 1.17 2014/07/01 05:49:18 rtr Exp $"); +__KERNEL_RCSID(0, "$NetBSD: l2cap_socket.c,v 1.18 2014/07/06 03:33:33 rtr Exp $"); /* load symbolic names */ #ifdef BLUETOOTH_DEBUG @@ -122,6 +122,17 @@ l2cap_ioctl(struct socket *up, u_long cm return EPASSTHROUGH; } +static int +l2cap_stat(struct socket *so, struct stat *ub) +{ + struct l2cap_channel *pcb = so->so_pcb; + + if (pcb == NULL) + return EINVAL; + + return 0; +} + /* * User Request. * up is socket @@ -150,6 +161,7 @@ l2cap_usrreq(struct socket *up, int req, KASSERT(req != PRU_ATTACH); KASSERT(req != PRU_DETACH); KASSERT(req != PRU_CONTROL); + KASSERT(req != PRU_SENSE); switch (req) { case PRU_PURGEIF: @@ -235,9 +247,6 @@ l2cap_usrreq(struct socket *up, int req, sbappendrecord(&up->so_snd, m); return l2cap_send(pcb, m0); - case PRU_SENSE: - return 0; /* (no release) */ - case PRU_RCVD: case PRU_RCVOOB: return EOPNOTSUPP; /* (no release) */ @@ -417,11 +426,13 @@ PR_WRAP_USRREQS(l2cap) #define l2cap_attach l2cap_attach_wrapper #define l2cap_detach l2cap_detach_wrapper #define l2cap_ioctl l2cap_ioctl_wrapper +#define l2cap_stat l2cap_stat_wrapper #define l2cap_usrreq l2cap_usrreq_wrapper const struct pr_usrreqs l2cap_usrreqs = { .pr_attach = l2cap_attach, .pr_detach = l2cap_detach, .pr_ioctl = l2cap_ioctl, + .pr_stat = l2cap_stat, .pr_generic = l2cap_usrreq, }; Index: src/sys/netbt/rfcomm_socket.c diff -u src/sys/netbt/rfcomm_socket.c:1.18 src/sys/netbt/rfcomm_socket.c:1.19 --- src/sys/netbt/rfcomm_socket.c:1.18 Tue Jul 1 05:49:18 2014 +++ src/sys/netbt/rfcomm_socket.c Sun Jul 6 03:33:33 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: rfcomm_socket.c,v 1.18 2014/07/01 05:49:18 rtr Exp $ */ +/* $NetBSD: rfcomm_socket.c,v 1.19 2014/07/06 03:33:33 rtr Exp $ */ /*- * Copyright (c) 2006 Itronix Inc. @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: rfcomm_socket.c,v 1.18 2014/07/01 05:49:18 rtr Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rfcomm_socket.c,v 1.19 2014/07/06 03:33:33 rtr Exp $"); /* load symbolic names */ #ifdef BLUETOOTH_DEBUG @@ -130,6 +130,17 @@ rfcomm_ioctl(struct socket *up, u_long c return EPASSTHROUGH; } +static int +rfcomm_stat(struct socket *so, struct stat *ub) +{ + struct rfcomm_dlc *pcb = so->so_pcb; + + if (pcb == NULL) + return EINVAL; + + return 0; +} + /* * User Request. * up is socket @@ -158,6 +169,7 @@ rfcomm_usrreq(struct socket *up, int req KASSERT(req != PRU_ATTACH); KASSERT(req != PRU_DETACH); KASSERT(req != PRU_CONTROL); + KASSERT(req != PRU_SENSE); switch (req) { case PRU_PURGEIF: @@ -234,9 +246,6 @@ rfcomm_usrreq(struct socket *up, int req return rfcomm_send(pcb, m0); - case PRU_SENSE: - return 0; /* (no release) */ - case PRU_RCVD: return rfcomm_rcvd(pcb, sbspace(&up->so_rcv)); @@ -430,11 +439,13 @@ PR_WRAP_USRREQS(rfcomm) #define rfcomm_attach rfcomm_attach_wrapper #define rfcomm_detach rfcomm_detach_wrapper #define rfcomm_ioctl rfcomm_ioctl_wrapper +#define rfcomm_stat rfcomm_stat_wrapper #define rfcomm_usrreq rfcomm_usrreq_wrapper const struct pr_usrreqs rfcomm_usrreqs = { .pr_attach = rfcomm_attach, .pr_detach = rfcomm_detach, .pr_ioctl = rfcomm_ioctl, + .pr_stat = rfcomm_stat, .pr_generic = rfcomm_usrreq, }; Index: src/sys/netbt/sco_socket.c diff -u src/sys/netbt/sco_socket.c:1.19 src/sys/netbt/sco_socket.c:1.20 --- src/sys/netbt/sco_socket.c:1.19 Tue Jul 1 05:49:18 2014 +++ src/sys/netbt/sco_socket.c Sun Jul 6 03:33:33 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: sco_socket.c,v 1.19 2014/07/01 05:49:18 rtr Exp $ */ +/* $NetBSD: sco_socket.c,v 1.20 2014/07/06 03:33:33 rtr Exp $ */ /*- * Copyright (c) 2006 Itronix Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sco_socket.c,v 1.19 2014/07/01 05:49:18 rtr Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sco_socket.c,v 1.20 2014/07/06 03:33:33 rtr Exp $"); /* load symbolic names */ #ifdef BLUETOOTH_DEBUG @@ -113,6 +113,17 @@ sco_ioctl(struct socket *up, u_long cmd, return EOPNOTSUPP; } +static int +sco_stat(struct socket *so, struct stat *ub) +{ + struct sco_pcb *pcb = (struct sco_pcb *)so->so_pcb; + + if (pcb == NULL) + return EINVAL; + + return 0; +} + /* * User Request. * up is socket @@ -137,6 +148,7 @@ sco_usrreq(struct socket *up, int req, s KASSERT(req != PRU_ATTACH); KASSERT(req != PRU_DETACH); KASSERT(req != PRU_CONTROL); + KASSERT(req != PRU_SENSE); switch(req) { case PRU_PURGEIF: @@ -223,9 +235,6 @@ sco_usrreq(struct socket *up, int req, s sbappendrecord(&up->so_snd, m); return sco_send(pcb, m0); - case PRU_SENSE: - return 0; /* (no sense - Doh!) */ - case PRU_RCVD: case PRU_RCVOOB: return EOPNOTSUPP; /* (no release) */ @@ -384,11 +393,13 @@ PR_WRAP_USRREQS(sco) #define sco_attach sco_attach_wrapper #define sco_detach sco_detach_wrapper #define sco_ioctl sco_ioctl_wrapper +#define sco_stat sco_stat_wrapper #define sco_usrreq sco_usrreq_wrapper const struct pr_usrreqs sco_usrreqs = { .pr_attach = sco_attach, .pr_detach = sco_detach, .pr_ioctl = sco_ioctl, + .pr_stat = sco_stat, .pr_generic = sco_usrreq, }; Index: src/sys/netinet/raw_ip.c diff -u src/sys/netinet/raw_ip.c:1.127 src/sys/netinet/raw_ip.c:1.128 --- src/sys/netinet/raw_ip.c:1.127 Tue Jul 1 05:49:18 2014 +++ src/sys/netinet/raw_ip.c Sun Jul 6 03:33:33 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: raw_ip.c,v 1.127 2014/07/01 05:49:18 rtr Exp $ */ +/* $NetBSD: raw_ip.c,v 1.128 2014/07/06 03:33:33 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.127 2014/07/01 05:49:18 rtr Exp $"); +__KERNEL_RCSID(0, "$NetBSD: raw_ip.c,v 1.128 2014/07/06 03:33:33 rtr Exp $"); #include "opt_inet.h" #include "opt_compat_netbsd.h" @@ -572,6 +572,19 @@ rip_ioctl(struct socket *so, u_long cmd, return in_control(so, cmd, nam, ifp); } +static int +rip_stat(struct socket *so, struct stat *ub) +{ + struct inpcb *inp; + + inp = sotoinpcb(so); + if (inp == NULL) + return EINVAL; + + /* stat: don't bother with a blocksize. */ + return 0; +} + int rip_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *nam, struct mbuf *control, struct lwp *l) @@ -582,6 +595,7 @@ rip_usrreq(struct socket *so, int req, s KASSERT(req != PRU_ATTACH); KASSERT(req != PRU_DETACH); KASSERT(req != PRU_CONTROL); + KASSERT(req != PRU_SENSE); s = splsoftnet(); if (req == PRU_PURGEIF) { @@ -675,13 +689,6 @@ rip_usrreq(struct socket *so, int req, s } break; - case PRU_SENSE: - /* - * stat: don't bother with a blocksize. - */ - splx(s); - return (0); - case PRU_RCVOOB: error = EOPNOTSUPP; break; @@ -712,12 +719,14 @@ PR_WRAP_USRREQS(rip) #define rip_attach rip_attach_wrapper #define rip_detach rip_detach_wrapper #define rip_ioctl rip_ioctl_wrapper +#define rip_stat rip_stat_wrapper #define rip_usrreq rip_usrreq_wrapper const struct pr_usrreqs rip_usrreqs = { .pr_attach = rip_attach, .pr_detach = rip_detach, .pr_ioctl = rip_ioctl, + .pr_stat = rip_stat, .pr_generic = rip_usrreq, }; Index: src/sys/netinet/tcp_usrreq.c diff -u src/sys/netinet/tcp_usrreq.c:1.180 src/sys/netinet/tcp_usrreq.c:1.181 --- src/sys/netinet/tcp_usrreq.c:1.180 Tue Jul 1 05:49:18 2014 +++ src/sys/netinet/tcp_usrreq.c Sun Jul 6 03:33:33 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: tcp_usrreq.c,v 1.180 2014/07/01 05:49:18 rtr Exp $ */ +/* $NetBSD: tcp_usrreq.c,v 1.181 2014/07/06 03:33:33 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.180 2014/07/01 05:49:18 rtr Exp $"); +__KERNEL_RCSID(0, "$NetBSD: tcp_usrreq.c,v 1.181 2014/07/06 03:33:33 rtr Exp $"); #include "opt_inet.h" #include "opt_ipsec.h" @@ -180,6 +180,7 @@ tcp_usrreq(struct socket *so, int req, s KASSERT(req != PRU_ATTACH); KASSERT(req != PRU_DETACH); KASSERT(req != PRU_CONTROL); + KASSERT(req != PRU_SENSE); family = so->so_proto->pr_domain->dom_family; @@ -242,11 +243,11 @@ tcp_usrreq(struct socket *so, int req, s * a (struct inpcb) pointed at by the socket, and this * structure will point at a subsidary (struct tcpcb). */ - if ((inp == NULL + if (inp == NULL #ifdef INET6 && in6p == NULL #endif - ) && req != PRU_SENSE) + ) { error = EINVAL; goto release; @@ -475,13 +476,6 @@ tcp_usrreq(struct socket *so, int req, s tp = tcp_drop(tp, ECONNABORTED); break; - case PRU_SENSE: - /* - * stat: don't bother with a blocksize. - */ - splx(s); - return (0); - case PRU_RCVOOB: if (control && control->m_len) { m_freem(control); @@ -959,6 +953,13 @@ tcp_ioctl(struct socket *so, u_long cmd, } } +static int +tcp_stat(struct socket *so, struct stat *ub) +{ + /* stat: don't bother with a blocksize. */ + return 0; +} + /* * Initiate (or continue) disconnect. * If embryonic state, just send reset (once). @@ -2196,11 +2197,13 @@ PR_WRAP_USRREQS(tcp) #define tcp_attach tcp_attach_wrapper #define tcp_detach tcp_detach_wrapper #define tcp_ioctl tcp_ioctl_wrapper +#define tcp_stat tcp_stat_wrapper #define tcp_usrreq tcp_usrreq_wrapper const struct pr_usrreqs tcp_usrreqs = { .pr_attach = tcp_attach, .pr_detach = tcp_detach, .pr_ioctl = tcp_ioctl, + .pr_stat = tcp_stat, .pr_generic = tcp_usrreq, }; Index: src/sys/netinet/udp_usrreq.c diff -u src/sys/netinet/udp_usrreq.c:1.202 src/sys/netinet/udp_usrreq.c:1.203 --- src/sys/netinet/udp_usrreq.c:1.202 Tue Jul 1 05:49:18 2014 +++ src/sys/netinet/udp_usrreq.c Sun Jul 6 03:33:33 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: udp_usrreq.c,v 1.202 2014/07/01 05:49:18 rtr Exp $ */ +/* $NetBSD: udp_usrreq.c,v 1.203 2014/07/06 03:33:33 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.202 2014/07/01 05:49:18 rtr Exp $"); +__KERNEL_RCSID(0, "$NetBSD: udp_usrreq.c,v 1.203 2014/07/06 03:33:33 rtr Exp $"); #include "opt_inet.h" #include "opt_compat_netbsd.h" @@ -901,6 +901,19 @@ udp_ioctl(struct socket *so, u_long cmd, } static int +udp_stat(struct socket *so, struct stat *ub) +{ + struct inpcb *inp; + + inp = sotoinpcb(so); + if (inp == NULL) + return EINVAL; + + /* stat: don't bother with a blocksize. */ + return 0; +} + +static int udp_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *nam, struct mbuf *control, struct lwp *l) { @@ -910,6 +923,7 @@ udp_usrreq(struct socket *so, int req, s KASSERT(req != PRU_ATTACH); KASSERT(req != PRU_DETACH); KASSERT(req != PRU_CONTROL); + KASSERT(req != PRU_SENSE); s = splsoftnet(); if (req == PRU_PURGEIF) { @@ -1010,13 +1024,6 @@ udp_usrreq(struct socket *so, int req, s } break; - case PRU_SENSE: - /* - * stat: don't bother with a blocksize. - */ - splx(s); - return (0); - case PRU_RCVOOB: error = EOPNOTSUPP; break; @@ -1264,11 +1271,13 @@ PR_WRAP_USRREQS(udp) #define udp_attach udp_attach_wrapper #define udp_detach udp_detach_wrapper #define udp_ioctl udp_ioctl_wrapper +#define udp_stat udp_stat_wrapper #define udp_usrreq udp_usrreq_wrapper const struct pr_usrreqs udp_usrreqs = { .pr_attach = udp_attach, .pr_detach = udp_detach, .pr_ioctl = udp_ioctl, + .pr_stat = udp_stat, .pr_generic = udp_usrreq, }; Index: src/sys/netinet6/raw_ip6.c diff -u src/sys/netinet6/raw_ip6.c:1.121 src/sys/netinet6/raw_ip6.c:1.122 --- src/sys/netinet6/raw_ip6.c:1.121 Tue Jul 1 05:49:19 2014 +++ src/sys/netinet6/raw_ip6.c Sun Jul 6 03:33:33 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: raw_ip6.c,v 1.121 2014/07/01 05:49:19 rtr Exp $ */ +/* $NetBSD: raw_ip6.c,v 1.122 2014/07/06 03:33:33 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.121 2014/07/01 05:49:19 rtr Exp $"); +__KERNEL_RCSID(0, "$NetBSD: raw_ip6.c,v 1.122 2014/07/06 03:33:33 rtr Exp $"); #include "opt_ipsec.h" @@ -650,6 +650,13 @@ rip6_ioctl(struct socket *so, u_long cmd return in6_control(so, cmd, nam, ifp); } +static int +rip6_stat(struct socket *so, struct stat *ub) +{ + /* stat: don't bother with a blocksize */ + return 0; +} + int rip6_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *nam, struct mbuf *control, struct lwp *l) @@ -658,6 +665,7 @@ rip6_usrreq(struct socket *so, int req, int error = 0; KASSERT(req != PRU_CONTROL); + KASSERT(req != PRU_SENSE); if (req == PRU_PURGEIF) { mutex_enter(softnet_lock); @@ -826,11 +834,6 @@ rip6_usrreq(struct socket *so, int req, break; } - case PRU_SENSE: - /* - * stat: don't bother with a blocksize - */ - return 0; /* * Not supported. */ @@ -901,11 +904,13 @@ PR_WRAP_USRREQS(rip6) #define rip6_attach rip6_attach_wrapper #define rip6_detach rip6_detach_wrapper #define rip6_ioctl rip6_ioctl_wrapper +#define rip6_stat rip6_stat_wrapper #define rip6_usrreq rip6_usrreq_wrapper const struct pr_usrreqs rip6_usrreqs = { .pr_attach = rip6_attach, .pr_detach = rip6_detach, .pr_ioctl = rip6_ioctl, + .pr_stat = rip6_stat, .pr_generic = rip6_usrreq, }; Index: src/sys/netinet6/udp6_usrreq.c diff -u src/sys/netinet6/udp6_usrreq.c:1.101 src/sys/netinet6/udp6_usrreq.c:1.102 --- src/sys/netinet6/udp6_usrreq.c:1.101 Tue Jul 1 05:49:19 2014 +++ src/sys/netinet6/udp6_usrreq.c Sun Jul 6 03:33:33 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: udp6_usrreq.c,v 1.101 2014/07/01 05:49:19 rtr Exp $ */ +/* $NetBSD: udp6_usrreq.c,v 1.102 2014/07/06 03:33:33 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.101 2014/07/01 05:49:19 rtr Exp $"); +__KERNEL_RCSID(0, "$NetBSD: udp6_usrreq.c,v 1.102 2014/07/06 03:33:33 rtr Exp $"); #include "opt_inet.h" #include "opt_inet_csum.h" @@ -693,6 +693,18 @@ udp6_ioctl(struct socket *so, u_long cmd return in6_control(so, cmd, addr6, ifp); } +static int +udp6_stat(struct socket *so, struct stat *ub) +{ + struct in6pcb *in6p = sotoin6pcb(so); + + if (in6p == NULL) + return EINVAL; + + /* stat: don't bother with a blocksize */ + return 0; +} + int udp6_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *addr6, struct mbuf *control, struct lwp *l) @@ -703,6 +715,7 @@ udp6_usrreq(struct socket *so, int req, KASSERT(req != PRU_ATTACH); KASSERT(req != PRU_DETACH); KASSERT(req != PRU_CONTROL); + KASSERT(req != PRU_SENSE); if (req == PRU_PURGEIF) { mutex_enter(softnet_lock); @@ -773,12 +786,6 @@ udp6_usrreq(struct socket *so, int req, in6_setpeeraddr(in6p, addr6); break; - case PRU_SENSE: - /* - * stat: don't bother with a blocksize - */ - return 0; - case PRU_LISTEN: case PRU_CONNECT2: case PRU_ACCEPT: @@ -878,11 +885,13 @@ PR_WRAP_USRREQS(udp6) #define udp6_attach udp6_attach_wrapper #define udp6_detach udp6_detach_wrapper #define udp6_ioctl udp6_ioctl_wrapper +#define udp6_stat udp6_stat_wrapper #define udp6_usrreq udp6_usrreq_wrapper const struct pr_usrreqs udp6_usrreqs = { .pr_attach = udp6_attach, .pr_detach = udp6_detach, .pr_ioctl = udp6_ioctl, + .pr_stat = udp6_stat, .pr_generic = udp6_usrreq, }; Index: src/sys/netipsec/keysock.c diff -u src/sys/netipsec/keysock.c:1.29 src/sys/netipsec/keysock.c:1.30 --- src/sys/netipsec/keysock.c:1.29 Tue Jul 1 05:49:19 2014 +++ src/sys/netipsec/keysock.c Sun Jul 6 03:33:33 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: keysock.c,v 1.29 2014/07/01 05:49:19 rtr Exp $ */ +/* $NetBSD: keysock.c,v 1.30 2014/07/06 03:33:33 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.29 2014/07/01 05:49:19 rtr Exp $"); +__KERNEL_RCSID(0, "$NetBSD: keysock.c,v 1.30 2014/07/06 03:33:33 rtr Exp $"); #include "opt_ipsec.h" @@ -490,6 +490,12 @@ key_ioctl(struct socket *so, u_long cmd, return EOPNOTSUPP; } +static int +key_stat(struct socket *so, struct stat *ub) +{ + return 0; +} + /* * key_usrreq() * derived from net/rtsock.c:route_usrreq() @@ -503,6 +509,7 @@ key_usrreq(struct socket *so, int req,st KASSERT(req != PRU_ATTACH); KASSERT(req != PRU_DETACH); KASSERT(req != PRU_CONTROL); + KASSERT(req != PRU_SENSE); s = splsoftnet(); error = raw_usrreq(so, req, m, nam, control, l); @@ -522,12 +529,14 @@ PR_WRAP_USRREQS(key) #define key_attach key_attach_wrapper #define key_detach key_detach_wrapper #define key_ioctl key_ioctl_wrapper +#define key_stat key_stat_wrapper #define key_usrreq key_usrreq_wrapper const struct pr_usrreqs key_usrreqs = { .pr_attach = key_attach, .pr_detach = key_detach, .pr_ioctl = key_ioctl, + .pr_stat = key_stat, .pr_generic = key_usrreq, }; Index: src/sys/netnatm/natm.c diff -u src/sys/netnatm/natm.c:1.29 src/sys/netnatm/natm.c:1.30 --- src/sys/netnatm/natm.c:1.29 Tue Jul 1 05:49:19 2014 +++ src/sys/netnatm/natm.c Sun Jul 6 03:33:33 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: natm.c,v 1.29 2014/07/01 05:49:19 rtr Exp $ */ +/* $NetBSD: natm.c,v 1.30 2014/07/06 03:33:33 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.29 2014/07/01 05:49:19 rtr Exp $"); +__KERNEL_RCSID(0, "$NetBSD: natm.c,v 1.30 2014/07/06 03:33:33 rtr Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -131,6 +131,19 @@ done: return(error); } +static int +natm_ioctl(struct socket *so, struct stat *ub) +{ + struct natmpcb *npcb; + + npcb = (struct natmpcb *) so->so_pcb; + + if (npcb == NULL) + return EINVAL; + + return 0; +} + /* * user requests */ @@ -151,6 +164,7 @@ natm_usrreq(struct socket *so, int req, KASSERT(req != PRU_ATTACH); KASSERT(req != PRU_DETACH); KASSERT(req != PRU_CONTROL); + KASSERT(req != PRU_SENSE); s = SPLSOFTNET(); @@ -287,10 +301,6 @@ natm_usrreq(struct socket *so, int req, break; - case PRU_SENSE: /* return status into m */ - /* return zero? */ - break; - case PRU_PEERADDR: /* fetch peer's address */ snatm = mtod(nam, struct sockaddr_natm *); memset(snatm, 0, sizeof(*snatm)); @@ -411,11 +421,13 @@ PR_WRAP_USRREQS(natm) #define natm_attach natm_attach_wrapper #define natm_detach natm_detach_wrapper #define natm_ioctl natm_ioctl_wrapper +#define natm_stat natm_stat_wrapper #define natm_usrreq natm_usrreq_wrapper const struct pr_usrreqs natm_usrreqs = { .pr_attach = natm_attach, .pr_detach = natm_detach, .pr_ioctl = natm_ioctl, + .pr_stat = natm_stat, .pr_generic = natm_usrreq, }; Index: src/sys/sys/protosw.h diff -u src/sys/sys/protosw.h:1.49 src/sys/sys/protosw.h:1.50 --- src/sys/sys/protosw.h:1.49 Tue Jul 1 05:49:19 2014 +++ src/sys/sys/protosw.h Sun Jul 6 03:33:33 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: protosw.h,v 1.49 2014/07/01 05:49:19 rtr Exp $ */ +/* $NetBSD: protosw.h,v 1.50 2014/07/06 03:33:33 rtr Exp $ */ /*- * Copyright (c) 1982, 1986, 1993 @@ -62,6 +62,7 @@ struct ifnet; struct sockaddr; struct socket; struct sockopt; +struct stat; struct domain; struct proc; struct lwp; @@ -238,6 +239,7 @@ struct pr_usrreqs { int (*pr_attach)(struct socket *, int); void (*pr_detach)(struct socket *); int (*pr_ioctl)(struct socket *, u_long, void *, struct ifnet *); + int (*pr_stat)(struct socket *, struct stat *); int (*pr_generic)(struct socket *, int, struct mbuf *, struct mbuf *, struct mbuf *, struct lwp *); }; @@ -300,6 +302,15 @@ name##_ioctl_wrapper(struct socket *a, u return rv; \ } \ static int \ +name##_stat_wrapper(struct socket *a, struct stat *b) \ +{ \ + int rv; \ + KERNEL_LOCK(1, NULL); \ + rv = name##_stat(a, b); \ + KERNEL_UNLOCK_ONE(NULL); \ + return rv; \ +} \ +static int \ name##_usrreq_wrapper(struct socket *a, int b, \ struct mbuf *c, struct mbuf *d, struct mbuf *e, \ struct lwp *f) \