Module Name: src Committed By: rtr Date: Sun Jun 22 08:10:19 UTC 2014
Modified Files: src/sys/compat/common: if_43.c src/sys/kern: sys_socket.c uipc_usrreq.c src/sys/net: if.c link_proto.c raw_usrreq.c rtsock.c src/sys/netatalk: ddp_usrreq.c src/sys/netbt: hci.h hci_ioctl.c hci_socket.c l2cap_socket.c rfcomm_socket.c sco_socket.c src/sys/netinet: raw_ip.c tcp_usrreq.c udp_usrreq.c src/sys/netinet6: raw_ip6.c udp6_usrreq.c src/sys/netipsec: keysock.c src/sys/netmpls: mpls_proto.c src/sys/netnatm: natm.c src/sys/rump/net/lib/libsockin: sockin.c src/sys/sys: protosw.h Log Message: * split PRU_CONTROL functionality out of xxx_userreq() switches and place into separate xxx_ioctl() functions. * place KASSERT(req != PRU_CONTROL) inside xxx_userreq() as it is now inappropriate for req = PRU_CONTROL in xxx_userreq(). * replace calls to pr_generic() with req = PRU_CONTROL with pr_ioctl(). * remove & fixup references to PRU_CONTROL xxx_userreq() function comments. * fix various comments references for xxx_userreq() that mentioned PRU_CONTROL as xxx_userreq() no longer handles the request. a further change will follow to fix parameter and naming inconsistencies retained from original code. Reviewed by rmind@ To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/sys/compat/common/if_43.c cvs rdiff -u -r1.68 -r1.69 src/sys/kern/sys_socket.c cvs rdiff -u -r1.153 -r1.154 src/sys/kern/uipc_usrreq.c cvs rdiff -u -r1.282 -r1.283 src/sys/net/if.c cvs rdiff -u -r1.9 -r1.10 src/sys/net/link_proto.c cvs rdiff -u -r1.39 -r1.40 src/sys/net/raw_usrreq.c cvs rdiff -u -r1.147 -r1.148 src/sys/net/rtsock.c cvs rdiff -u -r1.44 -r1.45 src/sys/netatalk/ddp_usrreq.c cvs rdiff -u -r1.37 -r1.38 src/sys/netbt/hci.h cvs rdiff -u -r1.10 -r1.11 src/sys/netbt/hci_ioctl.c cvs rdiff -u -r1.24 -r1.25 src/sys/netbt/hci_socket.c cvs rdiff -u -r1.15 -r1.16 src/sys/netbt/l2cap_socket.c cvs rdiff -u -r1.16 -r1.17 src/sys/netbt/rfcomm_socket.c cvs rdiff -u -r1.17 -r1.18 src/sys/netbt/sco_socket.c cvs rdiff -u -r1.124 -r1.125 src/sys/netinet/raw_ip.c cvs rdiff -u -r1.177 -r1.178 src/sys/netinet/tcp_usrreq.c cvs rdiff -u -r1.199 -r1.200 src/sys/netinet/udp_usrreq.c cvs rdiff -u -r1.118 -r1.119 src/sys/netinet6/raw_ip6.c cvs rdiff -u -r1.98 -r1.99 src/sys/netinet6/udp6_usrreq.c cvs rdiff -u -r1.27 -r1.28 src/sys/netipsec/keysock.c cvs rdiff -u -r1.9 -r1.10 src/sys/netmpls/mpls_proto.c cvs rdiff -u -r1.27 -r1.28 src/sys/netnatm/natm.c cvs rdiff -u -r1.40 -r1.41 src/sys/rump/net/lib/libsockin/sockin.c cvs rdiff -u -r1.47 -r1.48 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/compat/common/if_43.c diff -u src/sys/compat/common/if_43.c:1.5 src/sys/compat/common/if_43.c:1.6 --- src/sys/compat/common/if_43.c:1.5 Sun May 18 14:46:15 2014 +++ src/sys/compat/common/if_43.c Sun Jun 22 08:10:18 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: if_43.c,v 1.5 2014/05/18 14:46:15 rmind Exp $ */ +/* $NetBSD: if_43.c,v 1.6 2014/06/22 08:10:18 rtr Exp $ */ /* * Copyright (c) 1982, 1986, 1989, 1990, 1993 @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_43.c,v 1.5 2014/05/18 14:46:15 rmind Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_43.c,v 1.6 2014/06/22 08:10:18 rtr Exp $"); #if defined(_KERNEL_OPT) #include "opt_compat_netbsd.h" @@ -256,7 +256,7 @@ compat_ifioctl(struct socket *so, u_long cmd = SIOCGIFNETMASK; } - error = (*so->so_proto->pr_usrreqs->pr_generic)(so, PRU_CONTROL, + error = (*so->so_proto->pr_usrreqs->pr_ioctl)(so, (struct mbuf *)cmd, (struct mbuf *)ifr, (struct mbuf *)ifp, l); switch (ocmd) { Index: src/sys/kern/sys_socket.c diff -u src/sys/kern/sys_socket.c:1.68 src/sys/kern/sys_socket.c:1.69 --- src/sys/kern/sys_socket.c:1.68 Sun May 18 14:46:15 2014 +++ src/sys/kern/sys_socket.c Sun Jun 22 08:10:18 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: sys_socket.c,v 1.68 2014/05/18 14:46:15 rmind Exp $ */ +/* $NetBSD: sys_socket.c,v 1.69 2014/06/22 08:10:18 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.68 2014/05/18 14:46:15 rmind Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sys_socket.c,v 1.69 2014/06/22 08:10:18 rtr Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -201,8 +201,8 @@ soo_ioctl(file_t *fp, u_long cmd, void * if (IOCGROUP(cmd) == 'i') error = ifioctl(so, cmd, data, curlwp); else { - error = (*so->so_proto->pr_usrreqs->pr_generic)(so, - PRU_CONTROL, (struct mbuf *)cmd, + error = (*so->so_proto->pr_usrreqs->pr_ioctl)(so, + (struct mbuf *)cmd, (struct mbuf *)data, NULL, curlwp); } KERNEL_UNLOCK_ONE(NULL); Index: src/sys/kern/uipc_usrreq.c diff -u src/sys/kern/uipc_usrreq.c:1.153 src/sys/kern/uipc_usrreq.c:1.154 --- src/sys/kern/uipc_usrreq.c:1.153 Sun Jun 8 02:52:50 2014 +++ src/sys/kern/uipc_usrreq.c Sun Jun 22 08:10:18 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: uipc_usrreq.c,v 1.153 2014/06/08 02:52:50 christos Exp $ */ +/* $NetBSD: uipc_usrreq.c,v 1.154 2014/06/22 08:10:18 rtr Exp $ */ /*- * Copyright (c) 1998, 2000, 2004, 2008, 2009 The NetBSD Foundation, Inc. @@ -96,7 +96,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: uipc_usrreq.c,v 1.153 2014/06/08 02:52:50 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: uipc_usrreq.c,v 1.154 2014/06/22 08:10:18 rtr Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -376,10 +376,8 @@ unp_usrreq(struct socket *so, int req, s KASSERT(req != PRU_ATTACH); KASSERT(req != PRU_DETACH); + KASSERT(req != PRU_CONTROL); - if (req == PRU_CONTROL) { - return EOPNOTSUPP; - } KASSERT(solocked(so)); unp = sotounpcb(so); @@ -867,6 +865,13 @@ unp_detach(struct socket *so) unp_free(unp); } +static int +unp_ioctl(struct socket *so, struct mbuf *m, struct mbuf *nam, + struct mbuf *control, struct lwp *l) +{ + return EOPNOTSUPP; +} + /* * Allocate the new sockaddr. We have to allocate one * extra byte so that we can ensure that the pathname @@ -1812,5 +1817,6 @@ unp_discard_later(file_t *fp) const struct pr_usrreqs unp_usrreqs = { .pr_attach = unp_attach, .pr_detach = unp_detach, + .pr_ioctl = unp_ioctl, .pr_generic = unp_usrreq, }; Index: src/sys/net/if.c diff -u src/sys/net/if.c:1.282 src/sys/net/if.c:1.283 --- src/sys/net/if.c:1.282 Mon Jun 16 00:40:10 2014 +++ src/sys/net/if.c Sun Jun 22 08:10:18 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: if.c,v 1.282 2014/06/16 00:40:10 ozaki-r Exp $ */ +/* $NetBSD: if.c,v 1.283 2014/06/22 08:10:18 rtr Exp $ */ /*- * Copyright (c) 1999, 2000, 2001, 2008 The NetBSD Foundation, Inc. @@ -90,7 +90,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if.c,v 1.282 2014/06/16 00:40:10 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if.c,v 1.283 2014/06/22 08:10:18 rtr Exp $"); #include "opt_inet.h" @@ -1922,8 +1922,8 @@ doifioctl(struct socket *so, u_long cmd, #ifdef COMPAT_OSOCK error = compat_ifioctl(so, ocmd, cmd, data, l); #else - error = (*so->so_proto->pr_usrreqs->pr_generic)(so, - PRU_CONTROL, (struct mbuf *)cmd, (struct mbuf *)data, + error = (*so->so_proto->pr_usrreqs->pr_ioctl)(so, + (struct mbuf *)cmd, (struct mbuf *)data, (struct mbuf *)ifp, l); #endif } Index: src/sys/net/link_proto.c diff -u src/sys/net/link_proto.c:1.9 src/sys/net/link_proto.c:1.10 --- src/sys/net/link_proto.c:1.9 Mon May 19 02:51:24 2014 +++ src/sys/net/link_proto.c Sun Jun 22 08:10:18 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: link_proto.c,v 1.9 2014/05/19 02:51:24 rmind Exp $ */ +/* $NetBSD: link_proto.c,v 1.10 2014/06/22 08:10:18 rtr Exp $ */ /*- * Copyright (c) 1982, 1986, 1993 @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: link_proto.c,v 1.9 2014/05/19 02:51:24 rmind Exp $"); +__KERNEL_RCSID(0, "$NetBSD: link_proto.c,v 1.10 2014/06/22 08:10:18 rtr Exp $"); #include <sys/param.h> #include <sys/socket.h> @@ -50,6 +50,8 @@ __KERNEL_RCSID(0, "$NetBSD: link_proto.c static int sockaddr_dl_cmp(const struct sockaddr *, const struct sockaddr *); static int link_attach(struct socket *, int); static void link_detach(struct socket *); +static int link_ioctl(struct socket *, struct mbuf *, struct mbuf *, + struct mbuf *, struct lwp *); static int link_usrreq(struct socket *, int, struct mbuf *, struct mbuf *, struct mbuf *, struct lwp *); static void link_init(void); @@ -63,6 +65,7 @@ DOMAIN_DEFINE(linkdomain); /* forward de static const struct pr_usrreqs link_usrreqs = { .pr_attach = link_attach, .pr_detach = link_detach, + .pr_ioctl = link_ioctl, .pr_generic = link_usrreq, }; @@ -230,19 +233,22 @@ link_detach(struct socket *so) } static int +link_ioctl(struct socket *so, struct mbuf *m, struct mbuf *nam, + struct mbuf *control, struct lwp *l) +{ + return link_control(so, (unsigned long)m, nam, + (struct ifnet *)control, l); +} + +static int link_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *nam, struct mbuf *control, struct lwp *l) { KASSERT(req != PRU_ATTACH); KASSERT(req != PRU_DETACH); + KASSERT(req != PRU_CONTROL); - switch (req) { - case PRU_CONTROL: - return link_control(so, (unsigned long)m, nam, - (struct ifnet *)control, l); - default: - return EOPNOTSUPP; - } + return EOPNOTSUPP; } /* Compare the field at byte offsets [fieldstart, fieldend) in Index: src/sys/net/raw_usrreq.c diff -u src/sys/net/raw_usrreq.c:1.39 src/sys/net/raw_usrreq.c:1.40 --- src/sys/net/raw_usrreq.c:1.39 Mon May 19 02:51:24 2014 +++ src/sys/net/raw_usrreq.c Sun Jun 22 08:10:18 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: raw_usrreq.c,v 1.39 2014/05/19 02:51:24 rmind Exp $ */ +/* $NetBSD: raw_usrreq.c,v 1.40 2014/06/22 08:10:18 rtr Exp $ */ /* * Copyright (c) 1980, 1986, 1993 @@ -36,7 +36,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: raw_usrreq.c,v 1.39 2014/05/19 02:51:24 rmind Exp $"); +__KERNEL_RCSID(0, "$NetBSD: raw_usrreq.c,v 1.40 2014/06/22 08:10:18 rtr Exp $"); #include <sys/param.h> #include <sys/mbuf.h> @@ -162,9 +162,7 @@ raw_usrreq(struct socket *so, int req, s KASSERT(req != PRU_ATTACH); KASSERT(req != PRU_DETACH); - - if (req == PRU_CONTROL) - return EOPNOTSUPP; + KASSERT(req != PRU_CONTROL); s = splsoftnet(); KERNEL_LOCK(1, NULL); Index: src/sys/net/rtsock.c diff -u src/sys/net/rtsock.c:1.147 src/sys/net/rtsock.c:1.148 --- src/sys/net/rtsock.c:1.147 Wed May 21 20:43:56 2014 +++ src/sys/net/rtsock.c Sun Jun 22 08:10:18 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: rtsock.c,v 1.147 2014/05/21 20:43:56 rmind Exp $ */ +/* $NetBSD: rtsock.c,v 1.148 2014/06/22 08:10:18 rtr Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. @@ -61,7 +61,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: rtsock.c,v 1.147 2014/05/21 20:43:56 rmind Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rtsock.c,v 1.148 2014/06/22 08:10:18 rtr Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -224,6 +224,13 @@ COMPATNAME(route_detach)(struct socket * } static int +COMPATNAME(route_ioctl)(struct socket *so, struct mbuf *m, + struct mbuf *nam, struct mbuf *control, struct lwp *l) +{ + return EOPNOTSUPP; +} + +static int COMPATNAME(route_usrreq)(struct socket *so, int req, struct mbuf *m, struct mbuf *nam, struct mbuf *control, struct lwp *l) { @@ -231,6 +238,7 @@ COMPATNAME(route_usrreq)(struct socket * KASSERT(req != PRU_ATTACH); KASSERT(req != PRU_DETACH); + KASSERT(req != PRU_CONTROL); s = splsoftnet(); error = raw_usrreq(so, req, m, nam, control, l); @@ -1327,6 +1335,7 @@ PR_WRAP_USRREQS(compat_50_route); static const struct pr_usrreqs route_usrreqs = { .pr_attach = COMPATNAME(route_attach_wrapper), .pr_detach = COMPATNAME(route_detach_wrapper), + .pr_ioctl = COMPATNAME(route_ioctl_wrapper), .pr_generic = COMPATNAME(route_usrreq_wrapper), }; Index: src/sys/netatalk/ddp_usrreq.c diff -u src/sys/netatalk/ddp_usrreq.c:1.44 src/sys/netatalk/ddp_usrreq.c:1.45 --- src/sys/netatalk/ddp_usrreq.c:1.44 Tue May 20 19:04:00 2014 +++ src/sys/netatalk/ddp_usrreq.c Sun Jun 22 08:10:18 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: ddp_usrreq.c,v 1.44 2014/05/20 19:04:00 rmind Exp $ */ +/* $NetBSD: ddp_usrreq.c,v 1.45 2014/06/22 08:10:18 rtr Exp $ */ /* * Copyright (c) 1990,1991 Regents of The University of Michigan. @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ddp_usrreq.c,v 1.44 2014/05/20 19:04:00 rmind Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ddp_usrreq.c,v 1.45 2014/06/22 08:10:18 rtr Exp $"); #include "opt_mbuftrace.h" @@ -84,12 +84,10 @@ ddp_usrreq(struct socket *so, int req, s KASSERT(req != PRU_ATTACH); KASSERT(req != PRU_DETACH); + KASSERT(req != PRU_CONTROL); + ddp = sotoddpcb(so); - if (req == PRU_CONTROL) { - return (at_control((long) m, (void *) addr, - (struct ifnet *) rights, l)); - } if (req == PRU_PURGEIF) { mutex_enter(softnet_lock); at_purgeif((struct ifnet *) rights); @@ -480,6 +478,14 @@ ddp_detach(struct socket *so) kmem_free(ddp, sizeof(*ddp)); } +static int +ddp_ioctl(struct socket *so, struct mbuf *m, struct mbuf *addr, + struct mbuf *rights, struct lwp *l) +{ + return (at_control((long) m, (void *) addr, + (struct ifnet *) rights, l)); +} + /* * 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 @@ -553,11 +559,13 @@ ddp_init(void) PR_WRAP_USRREQS(ddp) #define ddp_attach ddp_attach_wrapper #define ddp_detach ddp_detach_wrapper +#define ddp_ioctl ddp_ioctl_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_generic = ddp_usrreq, }; Index: src/sys/netbt/hci.h diff -u src/sys/netbt/hci.h:1.37 src/sys/netbt/hci.h:1.38 --- src/sys/netbt/hci.h:1.37 Tue May 20 18:25:54 2014 +++ src/sys/netbt/hci.h Sun Jun 22 08:10:18 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: hci.h,v 1.37 2014/05/20 18:25:54 rmind Exp $ */ +/* $NetBSD: hci.h,v 1.38 2014/06/22 08:10:18 rtr Exp $ */ /*- * Copyright (c) 2005 Iain Hibbert. @@ -54,7 +54,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: hci.h,v 1.37 2014/05/20 18:25:54 rmind Exp $ + * $Id: hci.h,v 1.38 2014/06/22 08:10:18 rtr Exp $ * $FreeBSD: src/sys/netgraph/bluetooth/include/ng_hci.h,v 1.6 2005/01/07 01:45:43 imp Exp $ */ @@ -2536,7 +2536,7 @@ extern SIMPLEQ_HEAD(hci_unit_list, hci_u void hci_event(struct mbuf *, struct hci_unit *); /* hci_ioctl.c */ -int hci_ioctl(unsigned long, void *, struct lwp *); +int hci_ioctl_pcb(unsigned long, void *, struct lwp *); /* hci_link.c */ struct hci_link *hci_acl_open(struct hci_unit *, bdaddr_t *); Index: src/sys/netbt/hci_ioctl.c diff -u src/sys/netbt/hci_ioctl.c:1.10 src/sys/netbt/hci_ioctl.c:1.11 --- src/sys/netbt/hci_ioctl.c:1.10 Mon Nov 22 19:56:51 2010 +++ src/sys/netbt/hci_ioctl.c Sun Jun 22 08:10:18 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: hci_ioctl.c,v 1.10 2010/11/22 19:56:51 plunky Exp $ */ +/* $NetBSD: hci_ioctl.c,v 1.11 2014/06/22 08:10:18 rtr Exp $ */ /*- * Copyright (c) 2005 Iain Hibbert. @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: hci_ioctl.c,v 1.10 2010/11/22 19:56:51 plunky Exp $"); +__KERNEL_RCSID(0, "$NetBSD: hci_ioctl.c,v 1.11 2014/06/22 08:10:18 rtr Exp $"); #include <sys/param.h> #include <sys/domain.h> @@ -132,7 +132,7 @@ hci_dump(void) #endif int -hci_ioctl(unsigned long cmd, void *data, struct lwp *l) +hci_ioctl_pcb(unsigned long cmd, void *data, struct lwp *l) { struct btreq *btr = data; struct hci_unit *unit; Index: src/sys/netbt/hci_socket.c diff -u src/sys/netbt/hci_socket.c:1.24 src/sys/netbt/hci_socket.c:1.25 --- src/sys/netbt/hci_socket.c:1.24 Tue May 20 19:04:00 2014 +++ src/sys/netbt/hci_socket.c Sun Jun 22 08:10:18 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: hci_socket.c,v 1.24 2014/05/20 19:04:00 rmind Exp $ */ +/* $NetBSD: hci_socket.c,v 1.25 2014/06/22 08:10:18 rtr Exp $ */ /*- * Copyright (c) 2005 Iain Hibbert. @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: hci_socket.c,v 1.24 2014/05/20 19:04:00 rmind Exp $"); +__KERNEL_RCSID(0, "$NetBSD: hci_socket.c,v 1.25 2014/06/22 08:10:18 rtr Exp $"); /* load symbolic names */ #ifdef BLUETOOTH_DEBUG @@ -483,20 +483,26 @@ hci_detach(struct socket *so) kmem_free(pcb, sizeof(*pcb)); } +static int +hci_ioctl(struct socket *up, struct mbuf *m, + struct mbuf *nam, struct mbuf *ctl, struct lwp *l) +{ + int err; + mutex_enter(bt_lock); + err = hci_ioctl_pcb((unsigned long)m, (void *)nam, l); + mutex_exit(bt_lock); + return err; +} + /* * User Request. * up is socket - * m is either - * optional mbuf chain containing message - * ioctl command (PRU_CONTROL) - * nam is either - * optional mbuf chain containing an address - * ioctl data (PRU_CONTROL) + * m is optional mbuf chain containing message + * nam is optional mbuf chain containing an address * ctl is optional mbuf chain containing socket options * l is pointer to process requesting action (if any) * - * we are responsible for disposing of m and ctl if - * they are mbuf chains + * we are responsible for disposing of m and ctl */ static int hci_usrreq(struct socket *up, int req, struct mbuf *m, @@ -509,14 +515,9 @@ hci_usrreq(struct socket *up, int req, s DPRINTFN(2, "%s\n", prurequests[req]); KASSERT(req != PRU_ATTACH); KASSERT(req != PRU_DETACH); + KASSERT(req != PRU_CONTROL); switch(req) { - case PRU_CONTROL: - mutex_enter(bt_lock); - err = hci_ioctl((unsigned long)m, (void *)nam, l); - mutex_exit(bt_lock); - return err; - case PRU_PURGEIF: return EOPNOTSUPP; } @@ -868,10 +869,12 @@ PR_WRAP_USRREQS(hci) #define hci_attach hci_attach_wrapper #define hci_detach hci_detach_wrapper +#define hci_ioctl hci_ioctl_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_generic = hci_usrreq, }; Index: src/sys/netbt/l2cap_socket.c diff -u src/sys/netbt/l2cap_socket.c:1.15 src/sys/netbt/l2cap_socket.c:1.16 --- src/sys/netbt/l2cap_socket.c:1.15 Tue May 20 19:04:00 2014 +++ src/sys/netbt/l2cap_socket.c Sun Jun 22 08:10:18 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: l2cap_socket.c,v 1.15 2014/05/20 19:04:00 rmind Exp $ */ +/* $NetBSD: l2cap_socket.c,v 1.16 2014/06/22 08:10:18 rtr Exp $ */ /*- * Copyright (c) 2005 Iain Hibbert. @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: l2cap_socket.c,v 1.15 2014/05/20 19:04:00 rmind Exp $"); +__KERNEL_RCSID(0, "$NetBSD: l2cap_socket.c,v 1.16 2014/06/22 08:10:18 rtr Exp $"); /* load symbolic names */ #ifdef BLUETOOTH_DEBUG @@ -116,19 +116,23 @@ l2cap_detach(struct socket *so) KASSERT(so->so_pcb == NULL); } +static int +l2cap_ioctl(struct socket *up, struct mbuf *m, + struct mbuf *nam, struct mbuf *ctl, struct lwp *l) +{ + return EPASSTHROUGH; +} + /* * User Request. * up is socket - * m is either - * optional mbuf chain containing message - * ioctl command (PRU_CONTROL) + * m is optional mbuf chain containing message * nam is either * optional mbuf chain containing an address - * ioctl data (PRU_CONTROL) * message flags (PRU_RCVD) * ctl is either * optional mbuf chain containing socket options - * optional interface pointer (PRU_CONTROL, PRU_PURGEIF) + * optional interface pointer PRU_PURGEIF * l is pointer to process requesting action (if any) * * we are responsible for disposing of m and ctl if @@ -146,11 +150,9 @@ l2cap_usrreq(struct socket *up, int req, DPRINTFN(2, "%s\n", prurequests[req]); KASSERT(req != PRU_ATTACH); KASSERT(req != PRU_DETACH); + KASSERT(req != PRU_CONTROL); switch (req) { - case PRU_CONTROL: - return EPASSTHROUGH; - case PRU_PURGEIF: return EOPNOTSUPP; } @@ -415,10 +417,12 @@ PR_WRAP_USRREQS(l2cap) #define l2cap_attach l2cap_attach_wrapper #define l2cap_detach l2cap_detach_wrapper +#define l2cap_ioctl l2cap_ioctl_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_generic = l2cap_usrreq, }; Index: src/sys/netbt/rfcomm_socket.c diff -u src/sys/netbt/rfcomm_socket.c:1.16 src/sys/netbt/rfcomm_socket.c:1.17 --- src/sys/netbt/rfcomm_socket.c:1.16 Tue May 20 19:04:00 2014 +++ src/sys/netbt/rfcomm_socket.c Sun Jun 22 08:10:18 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: rfcomm_socket.c,v 1.16 2014/05/20 19:04:00 rmind Exp $ */ +/* $NetBSD: rfcomm_socket.c,v 1.17 2014/06/22 08:10:18 rtr Exp $ */ /*- * Copyright (c) 2006 Itronix Inc. @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: rfcomm_socket.c,v 1.16 2014/05/20 19:04:00 rmind Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rfcomm_socket.c,v 1.17 2014/06/22 08:10:18 rtr Exp $"); /* load symbolic names */ #ifdef BLUETOOTH_DEBUG @@ -124,19 +124,23 @@ rfcomm_detach(struct socket *so) KASSERT(so->so_pcb == NULL); } +static int +rfcomm_ioctl(struct socket *up, struct mbuf *m, + struct mbuf *nam, struct mbuf *ctl, struct lwp *l) +{ + return EPASSTHROUGH; +} + /* * User Request. * up is socket - * m is either - * optional mbuf chain containing message - * ioctl command (PRU_CONTROL) + * m is optional mbuf chain containing message * nam is either * optional mbuf chain containing an address - * ioctl data (PRU_CONTROL) * message flags (PRU_RCVD) * ctl is either * optional mbuf chain containing socket options - * optional interface pointer (PRU_CONTROL, PRU_PURGEIF) + * optional interface pointer PRU_PURGEIF * l is pointer to process requesting action (if any) * * we are responsible for disposing of m and ctl if @@ -154,11 +158,9 @@ rfcomm_usrreq(struct socket *up, int req DPRINTFN(2, "%s\n", prurequests[req]); KASSERT(req != PRU_ATTACH); KASSERT(req != PRU_DETACH); + KASSERT(req != PRU_CONTROL); switch (req) { - case PRU_CONTROL: - return EPASSTHROUGH; - case PRU_PURGEIF: return EOPNOTSUPP; } @@ -428,10 +430,12 @@ PR_WRAP_USRREQS(rfcomm) #define rfcomm_attach rfcomm_attach_wrapper #define rfcomm_detach rfcomm_detach_wrapper +#define rfcomm_ioctl rfcomm_ioctl_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_generic = rfcomm_usrreq, }; Index: src/sys/netbt/sco_socket.c diff -u src/sys/netbt/sco_socket.c:1.17 src/sys/netbt/sco_socket.c:1.18 --- src/sys/netbt/sco_socket.c:1.17 Tue May 20 19:04:00 2014 +++ src/sys/netbt/sco_socket.c Sun Jun 22 08:10:18 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: sco_socket.c,v 1.17 2014/05/20 19:04:00 rmind Exp $ */ +/* $NetBSD: sco_socket.c,v 1.18 2014/06/22 08:10:18 rtr Exp $ */ /*- * Copyright (c) 2006 Itronix Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sco_socket.c,v 1.17 2014/05/20 19:04:00 rmind Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sco_socket.c,v 1.18 2014/06/22 08:10:18 rtr Exp $"); /* load symbolic names */ #ifdef BLUETOOTH_DEBUG @@ -107,15 +107,18 @@ sco_detach(struct socket *so) KASSERT(so->so_pcb == NULL); } +static int +sco_ioctl(struct socket *up, struct mbuf *m, + struct mbuf *nam, struct mbuf *ctl, struct lwp *l) +{ + return EOPNOTSUPP; +} + /* * User Request. * up is socket - * m is either - * optional mbuf chain containing message - * ioctl command (PRU_CONTROL) - * nam is either - * optional mbuf chain containing an address - * ioctl data (PRU_CONTROL) + * m is optional mbuf chain containing message + * nam is optional mbuf chain containing an address * ctl is optional mbuf chain containing socket options * l is pointer to process requesting action (if any) * @@ -134,11 +137,9 @@ sco_usrreq(struct socket *up, int req, s DPRINTFN(2, "%s\n", prurequests[req]); KASSERT(req != PRU_ATTACH); KASSERT(req != PRU_DETACH); + KASSERT(req != PRU_CONTROL); switch(req) { - case PRU_CONTROL: - return EOPNOTSUPP; - case PRU_PURGEIF: return EOPNOTSUPP; } @@ -383,10 +384,12 @@ PR_WRAP_USRREQS(sco) #define sco_attach sco_attach_wrapper #define sco_detach sco_detach_wrapper +#define sco_ioctl sco_ioctl_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_generic = sco_usrreq, }; Index: src/sys/netinet/raw_ip.c diff -u src/sys/netinet/raw_ip.c:1.124 src/sys/netinet/raw_ip.c:1.125 --- src/sys/netinet/raw_ip.c:1.124 Fri May 30 01:39:03 2014 +++ src/sys/netinet/raw_ip.c Sun Jun 22 08:10:18 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: raw_ip.c,v 1.124 2014/05/30 01:39:03 christos Exp $ */ +/* $NetBSD: raw_ip.c,v 1.125 2014/06/22 08:10:18 rtr Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. @@ -65,7 +65,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: raw_ip.c,v 1.124 2014/05/30 01:39:03 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: raw_ip.c,v 1.125 2014/06/22 08:10:18 rtr Exp $"); #include "opt_inet.h" #include "opt_compat_netbsd.h" @@ -566,6 +566,13 @@ rip_detach(struct socket *so) in_pcbdetach(inp); } +static int +rip_ioctl(struct socket *so, struct mbuf *m, struct mbuf *nam, + struct mbuf *control, struct lwp *l) +{ + return in_control(so, (long)m, nam, (ifnet_t *)control, l); +} + int rip_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *nam, struct mbuf *control, struct lwp *l) @@ -575,10 +582,8 @@ rip_usrreq(struct socket *so, int req, s KASSERT(req != PRU_ATTACH); KASSERT(req != PRU_DETACH); + KASSERT(req != PRU_CONTROL); - if (req == PRU_CONTROL) { - return in_control(so, (long)m, nam, (ifnet_t *)control, l); - } s = splsoftnet(); if (req == PRU_PURGEIF) { mutex_enter(softnet_lock); @@ -707,11 +712,13 @@ rip_usrreq(struct socket *so, int req, s PR_WRAP_USRREQS(rip) #define rip_attach rip_attach_wrapper #define rip_detach rip_detach_wrapper +#define rip_ioctl rip_ioctl_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_generic = rip_usrreq, }; Index: src/sys/netinet/tcp_usrreq.c diff -u src/sys/netinet/tcp_usrreq.c:1.177 src/sys/netinet/tcp_usrreq.c:1.178 --- src/sys/netinet/tcp_usrreq.c:1.177 Thu May 22 00:28:32 2014 +++ src/sys/netinet/tcp_usrreq.c Sun Jun 22 08:10:18 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: tcp_usrreq.c,v 1.177 2014/05/22 00:28:32 rmind Exp $ */ +/* $NetBSD: tcp_usrreq.c,v 1.178 2014/06/22 08:10:18 rtr Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. @@ -99,7 +99,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: tcp_usrreq.c,v 1.177 2014/05/22 00:28:32 rmind Exp $"); +__KERNEL_RCSID(0, "$NetBSD: tcp_usrreq.c,v 1.178 2014/06/22 08:10:18 rtr Exp $"); #include "opt_inet.h" #include "opt_ipsec.h" @@ -179,26 +179,10 @@ tcp_usrreq(struct socket *so, int req, s KASSERT(req != PRU_ATTACH); KASSERT(req != PRU_DETACH); + KASSERT(req != PRU_CONTROL); family = so->so_proto->pr_domain->dom_family; - if (req == PRU_CONTROL) { - switch (family) { -#ifdef INET - case PF_INET: - return (in_control(so, (long)m, (void *)nam, - (struct ifnet *)control, l)); -#endif -#ifdef INET6 - case PF_INET6: - return (in6_control(so, (long)m, (void *)nam, - (struct ifnet *)control, l)); -#endif - default: - return EAFNOSUPPORT; - } - } - s = splsoftnet(); if (req == PRU_PURGEIF) { @@ -958,6 +942,26 @@ tcp_detach(struct socket *so) splx(s); } +static int +tcp_ioctl(struct socket *so, struct mbuf *m, struct mbuf *nam, + struct mbuf *control, struct lwp *l) +{ + switch (so->so_proto->pr_domain->dom_family) { +#ifdef INET + case PF_INET: + return (in_control(so, (long)m, (void *)nam, + (struct ifnet *)control, l)); +#endif +#ifdef INET6 + case PF_INET6: + return (in6_control(so, (long)m, (void *)nam, + (struct ifnet *)control, l)); +#endif + default: + return EAFNOSUPPORT; + } +} + /* * Initiate (or continue) disconnect. * If embryonic state, just send reset (once). @@ -2194,10 +2198,12 @@ tcp_usrreq_init(void) PR_WRAP_USRREQS(tcp) #define tcp_attach tcp_attach_wrapper #define tcp_detach tcp_detach_wrapper +#define tcp_ioctl tcp_ioctl_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_generic = tcp_usrreq, }; Index: src/sys/netinet/udp_usrreq.c diff -u src/sys/netinet/udp_usrreq.c:1.199 src/sys/netinet/udp_usrreq.c:1.200 --- src/sys/netinet/udp_usrreq.c:1.199 Fri May 30 01:39:03 2014 +++ src/sys/netinet/udp_usrreq.c Sun Jun 22 08:10:18 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: udp_usrreq.c,v 1.199 2014/05/30 01:39:03 christos Exp $ */ +/* $NetBSD: udp_usrreq.c,v 1.200 2014/06/22 08:10:18 rtr Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. @@ -66,7 +66,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: udp_usrreq.c,v 1.199 2014/05/30 01:39:03 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: udp_usrreq.c,v 1.200 2014/06/22 08:10:18 rtr Exp $"); #include "opt_inet.h" #include "opt_compat_netbsd.h" @@ -895,6 +895,14 @@ udp_detach(struct socket *so) } static int +udp_ioctl(struct socket *so, struct mbuf *m, struct mbuf *nam, + struct mbuf *control, struct lwp *l) +{ + return in_control(so, (long)m, (void *)nam, + (struct ifnet *)control, l); +} + +static int udp_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *nam, struct mbuf *control, struct lwp *l) { @@ -903,11 +911,8 @@ udp_usrreq(struct socket *so, int req, s KASSERT(req != PRU_ATTACH); KASSERT(req != PRU_DETACH); + KASSERT(req != PRU_CONTROL); - if (req == PRU_CONTROL) { - return in_control(so, (long)m, (void *)nam, - (struct ifnet *)control, l); - } s = splsoftnet(); if (req == PRU_PURGEIF) { mutex_enter(softnet_lock); @@ -1260,10 +1265,12 @@ udp4_espinudp(struct mbuf **mp, int off, PR_WRAP_USRREQS(udp) #define udp_attach udp_attach_wrapper #define udp_detach udp_detach_wrapper +#define udp_ioctl udp_ioctl_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_generic = udp_usrreq, }; Index: src/sys/netinet6/raw_ip6.c diff -u src/sys/netinet6/raw_ip6.c:1.118 src/sys/netinet6/raw_ip6.c:1.119 --- src/sys/netinet6/raw_ip6.c:1.118 Fri May 30 01:39:03 2014 +++ src/sys/netinet6/raw_ip6.c Sun Jun 22 08:10:19 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: raw_ip6.c,v 1.118 2014/05/30 01:39:03 christos Exp $ */ +/* $NetBSD: raw_ip6.c,v 1.119 2014/06/22 08:10:19 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.118 2014/05/30 01:39:03 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: raw_ip6.c,v 1.119 2014/06/22 08:10:19 rtr Exp $"); #include "opt_ipsec.h" @@ -644,6 +644,14 @@ rip6_detach(struct socket *so) in6_pcbdetach(in6p); } +static int +rip6_ioctl(struct socket *so, struct mbuf *m, + struct mbuf *nam, struct mbuf *control, struct lwp *l) +{ + return in6_control(so, (u_long)m, (void *)nam, + (struct ifnet *)control, l); +} + int rip6_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *nam, struct mbuf *control, struct lwp *l) @@ -651,9 +659,7 @@ rip6_usrreq(struct socket *so, int req, struct in6pcb *in6p = sotoin6pcb(so); int error = 0; - if (req == PRU_CONTROL) - return in6_control(so, (u_long)m, (void *)nam, - (struct ifnet *)control, l); + KASSERT(req != PRU_CONTROL); if (req == PRU_PURGEIF) { mutex_enter(softnet_lock); @@ -896,10 +902,12 @@ sysctl_net_inet6_raw6_setup(struct sysct PR_WRAP_USRREQS(rip6) #define rip6_attach rip6_attach_wrapper #define rip6_detach rip6_detach_wrapper +#define rip6_ioctl rip6_ioctl_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_generic = rip6_usrreq, }; Index: src/sys/netinet6/udp6_usrreq.c diff -u src/sys/netinet6/udp6_usrreq.c:1.98 src/sys/netinet6/udp6_usrreq.c:1.99 --- src/sys/netinet6/udp6_usrreq.c:1.98 Fri May 30 01:39:03 2014 +++ src/sys/netinet6/udp6_usrreq.c Sun Jun 22 08:10:19 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: udp6_usrreq.c,v 1.98 2014/05/30 01:39:03 christos Exp $ */ +/* $NetBSD: udp6_usrreq.c,v 1.99 2014/06/22 08:10:19 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.98 2014/05/30 01:39:03 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: udp6_usrreq.c,v 1.99 2014/06/22 08:10:19 rtr Exp $"); #include "opt_inet.h" #include "opt_inet_csum.h" @@ -677,16 +677,10 @@ udp6_detach(struct socket *so) splx(s); } -int -udp6_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *addr6, +static int +udp6_ioctl(struct socket *so, struct mbuf *m, struct mbuf *addr6, struct mbuf *control, struct lwp *l) { - struct in6pcb *in6p = sotoin6pcb(so); - int s, error = 0; - - KASSERT(req != PRU_ATTACH); - KASSERT(req != PRU_DETACH); - /* * MAPPED_ADDR implementation info: * Mapped addr support for PRU_CONTROL is not necessary. @@ -697,10 +691,21 @@ udp6_usrreq(struct socket *so, int req, * So AF_INET socket need to be used to control AF_INET addrs, * and AF_INET6 socket for AF_INET6 addrs. */ - if (req == PRU_CONTROL) { - return in6_control(so, (u_long)m, (void *)addr6, - (struct ifnet *)control, l); - } + return in6_control(so, (u_long)m, (void *)addr6, + (struct ifnet *)control, l); +} + +int +udp6_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *addr6, + struct mbuf *control, struct lwp *l) +{ + struct in6pcb *in6p = sotoin6pcb(so); + int s, error = 0; + + KASSERT(req != PRU_ATTACH); + KASSERT(req != PRU_DETACH); + KASSERT(req != PRU_CONTROL); + if (req == PRU_PURGEIF) { mutex_enter(softnet_lock); in6_pcbpurgeif0(&udbtable, (struct ifnet *)control); @@ -874,10 +879,12 @@ udp6_statinc(u_int stat) PR_WRAP_USRREQS(udp6) #define udp6_attach udp6_attach_wrapper #define udp6_detach udp6_detach_wrapper +#define udp6_ioctl udp6_ioctl_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_generic = udp6_usrreq, }; Index: src/sys/netipsec/keysock.c diff -u src/sys/netipsec/keysock.c:1.27 src/sys/netipsec/keysock.c:1.28 --- src/sys/netipsec/keysock.c:1.27 Thu Jun 5 17:17:26 2014 +++ src/sys/netipsec/keysock.c Sun Jun 22 08:10:19 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: keysock.c,v 1.27 2014/06/05 17:17:26 christos Exp $ */ +/* $NetBSD: keysock.c,v 1.28 2014/06/22 08:10:19 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.27 2014/06/05 17:17:26 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: keysock.c,v 1.28 2014/06/22 08:10:19 rtr Exp $"); #include "opt_ipsec.h" @@ -484,6 +484,13 @@ key_detach(struct socket *so) splx(s); } +static int +key_ioctl(struct socket *so, struct mbuf *m, struct mbuf *nam, + struct mbuf *control, struct lwp *l) +{ + return EOPNOTSUPP; +} + /* * key_usrreq() * derived from net/rtsock.c:route_usrreq() @@ -496,6 +503,7 @@ key_usrreq(struct socket *so, int req,st KASSERT(req != PRU_ATTACH); KASSERT(req != PRU_DETACH); + KASSERT(req != PRU_CONTROL); s = splsoftnet(); error = raw_usrreq(so, req, m, nam, control, l); @@ -514,11 +522,13 @@ DOMAIN_DEFINE(keydomain); PR_WRAP_USRREQS(key) #define key_attach key_attach_wrapper #define key_detach key_detach_wrapper +#define key_ioctl key_ioctl_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_generic = key_usrreq, }; Index: src/sys/netmpls/mpls_proto.c diff -u src/sys/netmpls/mpls_proto.c:1.9 src/sys/netmpls/mpls_proto.c:1.10 --- src/sys/netmpls/mpls_proto.c:1.9 Tue May 20 19:04:00 2014 +++ src/sys/netmpls/mpls_proto.c Sun Jun 22 08:10:19 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: mpls_proto.c,v 1.9 2014/05/20 19:04:00 rmind Exp $ */ +/* $NetBSD: mpls_proto.c,v 1.10 2014/06/22 08:10:19 rtr Exp $ */ /* * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: mpls_proto.c,v 1.9 2014/05/20 19:04:00 rmind Exp $"); +__KERNEL_RCSID(0, "$NetBSD: mpls_proto.c,v 1.10 2014/06/22 08:10:19 rtr Exp $"); #include "opt_inet.h" #include "opt_mbuftrace.h" @@ -95,6 +95,13 @@ mpls_detach(struct socket *so) } static int +mpls_ioctl(struct socket *so, struct mbuf *m, + struct mbuf *nam, struct mbuf *control, struct lwp *l) +{ + return EOPNOTSUPP; +} + +static int mpls_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *nam, struct mbuf *control, struct lwp *l) { @@ -185,11 +192,13 @@ DOMAIN_DEFINE(mplsdomain); PR_WRAP_USRREQS(mpls) #define mpls_attach mpls_attach_wrapper #define mpls_detach mpls_detach_wrapper +#define mpls_ioctl mpls_ioctl_wrapper #define mpls_usrreq mpls_usrreq_wrapper static const struct pr_usrreqs mpls_usrreqs = { .pr_attach = mpls_attach, .pr_detach = mpls_detach, + .pr_ioctl = mpls_ioctl, .pr_generic = mpls_usrreq, }; Index: src/sys/netnatm/natm.c diff -u src/sys/netnatm/natm.c:1.27 src/sys/netnatm/natm.c:1.28 --- src/sys/netnatm/natm.c:1.27 Tue May 20 19:04:00 2014 +++ src/sys/netnatm/natm.c Sun Jun 22 08:10:19 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: natm.c,v 1.27 2014/05/20 19:04:00 rmind Exp $ */ +/* $NetBSD: natm.c,v 1.28 2014/06/22 08:10:19 rtr Exp $ */ /* * Copyright (c) 1996 Charles D. Cranor and Washington University. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: natm.c,v 1.27 2014/05/20 19:04:00 rmind Exp $"); +__KERNEL_RCSID(0, "$NetBSD: natm.c,v 1.28 2014/06/22 08:10:19 rtr Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -95,6 +95,43 @@ natm_detach(struct socket *so) mutex_enter(softnet_lock); } +static int +natm_ioctl(struct socket *so, struct mbuf *m, struct mbuf *nam, + struct mbuf *control, struct lwp *l) +{ + int error = 0; + + s = SPLSOFTNET(); + + /* + * raw atm ioctl. comes in as a SIOCRAWATM. we convert it to + * SIOCXRAWATM and pass it to the driver. + */ + if ((u_long)m == SIOCRAWATM) { + if (npcb->npcb_ifp == NULL) { + error = ENOTCONN; + goto done; + } + ario.npcb = npcb; + ario.rawvalue = *((int *)nam); + error = npcb->npcb_ifp->if_ioctl(npcb->npcb_ifp, SIOCXRAWATM, &ario); + if (!error) { + if (ario.rawvalue) + npcb->npcb_flags |= NPCB_RAW; + else + npcb->npcb_flags &= ~(NPCB_RAW); + } + + goto done; + } + + error = EOPNOTSUPP; + +done: + splx(s); + return(error); +} + /* * user requests */ @@ -114,6 +151,7 @@ natm_usrreq(struct socket *so, int req, KASSERT(req != PRU_ATTACH); KASSERT(req != PRU_DETACH); + KASSERT(req != PRU_CONTROL); s = SPLSOFTNET(); @@ -264,32 +302,6 @@ natm_usrreq(struct socket *so, int req, snatm->snatm_vpi = npcb->npcb_vpi; break; - case PRU_CONTROL: /* control operations on protocol */ - /* - * raw atm ioctl. comes in as a SIOCRAWATM. we convert it to - * SIOCXRAWATM and pass it to the driver. - */ - if ((u_long)m == SIOCRAWATM) { - if (npcb->npcb_ifp == NULL) { - error = ENOTCONN; - break; - } - ario.npcb = npcb; - ario.rawvalue = *((int *)nam); - error = npcb->npcb_ifp->if_ioctl(npcb->npcb_ifp, SIOCXRAWATM, &ario); - if (!error) { - if (ario.rawvalue) - npcb->npcb_flags |= NPCB_RAW; - else - npcb->npcb_flags &= ~(NPCB_RAW); - } - - break; - } - - error = EOPNOTSUPP; - break; - case PRU_BIND: /* bind socket to address */ case PRU_LISTEN: /* listen for connection */ case PRU_ACCEPT: /* accept connection from peer */ @@ -399,10 +411,12 @@ m->m_pkthdr.rcvif = NULL; /* null it out PR_WRAP_USRREQS(natm) #define natm_attach natm_attach_wrapper #define natm_detach natm_detach_wrapper +#define natm_ioctl natm_ioctl_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_generic = natm_usrreq, }; Index: src/sys/rump/net/lib/libsockin/sockin.c diff -u src/sys/rump/net/lib/libsockin/sockin.c:1.40 src/sys/rump/net/lib/libsockin/sockin.c:1.41 --- src/sys/rump/net/lib/libsockin/sockin.c:1.40 Mon May 19 02:51:25 2014 +++ src/sys/rump/net/lib/libsockin/sockin.c Sun Jun 22 08:10:19 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: sockin.c,v 1.40 2014/05/19 02:51:25 rmind Exp $ */ +/* $NetBSD: sockin.c,v 1.41 2014/06/22 08:10:19 rtr Exp $ */ /* * Copyright (c) 2008, 2009 Antti Kantee. All Rights Reserved. @@ -26,7 +26,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sockin.c,v 1.40 2014/05/19 02:51:25 rmind Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sockin.c,v 1.41 2014/06/22 08:10:19 rtr Exp $"); #include <sys/param.h> #include <sys/condvar.h> @@ -68,6 +68,8 @@ static int sockin_do_init(void); static void sockin_init(void); static int sockin_attach(struct socket *, int); static void sockin_detach(struct socket *); +static int sockin_ioctl(struct socket *, struct mbuf *, struct mbuf *, + struct mbuf *control, struct lwp *); static int sockin_usrreq(struct socket *, int, struct mbuf *, struct mbuf *, struct mbuf *, struct lwp *); static int sockin_ctloutput(int op, struct socket *, struct sockopt *); @@ -75,6 +77,7 @@ static int sockin_ctloutput(int op, stru static const struct pr_usrreqs sockin_usrreqs = { .pr_attach = sockin_attach, .pr_detach = sockin_detach, + .pr_ioctl = sockin_ioctl, .pr_generic = sockin_usrreq, }; @@ -450,11 +453,20 @@ sockin_detach(struct socket *so) } static int +sockin_ioctl(struct socket *so, struct mbuf *m, struct mbuf *nam, + struct mbuf *control, struct lwp *l) +{ + return ENOTTY; +} + +static int sockin_usrreq(struct socket *so, int req, struct mbuf *m, struct mbuf *nam, struct mbuf *control, struct lwp *l) { int error = 0; + KASSERT(req != PRU_CONTROL); + switch (req) { case PRU_ACCEPT: /* we do all the work in the worker thread */ @@ -554,10 +566,6 @@ sockin_usrreq(struct socket *so, int req break; } - case PRU_CONTROL: - error = ENOTTY; - break; - default: panic("sockin_usrreq: IMPLEMENT ME, req %d not supported", req); } Index: src/sys/sys/protosw.h diff -u src/sys/sys/protosw.h:1.47 src/sys/sys/protosw.h:1.48 --- src/sys/sys/protosw.h:1.47 Tue May 20 19:04:00 2014 +++ src/sys/sys/protosw.h Sun Jun 22 08:10:19 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: protosw.h,v 1.47 2014/05/20 19:04:00 rmind Exp $ */ +/* $NetBSD: protosw.h,v 1.48 2014/06/22 08:10:19 rtr Exp $ */ /*- * Copyright (c) 1982, 1986, 1993 @@ -236,6 +236,8 @@ static const char * const prcorequests[] struct pr_usrreqs { int (*pr_attach)(struct socket *, int); void (*pr_detach)(struct socket *); + int (*pr_ioctl)(struct socket *, struct mbuf *, + struct mbuf *, struct mbuf *, struct lwp *); int (*pr_generic)(struct socket *, int, struct mbuf *, struct mbuf *, struct mbuf *, struct lwp *); }; @@ -288,6 +290,17 @@ name##_detach_wrapper(struct socket *a) KERNEL_UNLOCK_ONE(NULL); \ } \ static int \ +name##_ioctl_wrapper(struct socket *a, \ + struct mbuf *b, struct mbuf *c, struct mbuf *d, \ + struct lwp *e) \ +{ \ + int rv; \ + KERNEL_LOCK(1, NULL); \ + rv = name##_ioctl(a, b, c, d, e); \ + 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) \