From e4445a031fa562b7bace1653d3ad58a231752ed1 Mon Sep 17 00:00:00 2001 From: Robert Watson Date: Mon, 7 Aug 2006 12:02:43 +0000 Subject: [PATCH] Move definition of UNIX domain socket protosw and domain entries from uipc_proto.c to uipc_usrreq.c, making localdomain static. Remove uipc_proto.c as it's no longer used. With this change, UNIX domain sockets are entirely encapsulated in uipc_usrreq.c. --- sys/conf/files | 1 - sys/kern/uipc_proto.c | 79 ------------------------------------------ sys/kern/uipc_usrreq.c | 38 ++++++++++++++++++-- sys/sys/domain.h | 1 - 4 files changed, 35 insertions(+), 84 deletions(-) delete mode 100644 sys/kern/uipc_proto.c diff --git a/sys/conf/files b/sys/conf/files index 2ea5afbeace4..d8f390147c61 100644 --- a/sys/conf/files +++ b/sys/conf/files @@ -1420,7 +1420,6 @@ kern/uipc_domain.c standard kern/uipc_mbuf.c standard kern/uipc_mbuf2.c standard kern/uipc_mqueue.c optional p1003_1b_mqueue -kern/uipc_proto.c standard kern/uipc_sem.c optional p1003_1b_semaphores kern/uipc_sockbuf.c standard kern/uipc_socket.c standard diff --git a/sys/kern/uipc_proto.c b/sys/kern/uipc_proto.c deleted file mode 100644 index 400a4ce74d43..000000000000 --- a/sys/kern/uipc_proto.c +++ /dev/null @@ -1,79 +0,0 @@ -/*- - * Copyright (c) 1982, 1986, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)uipc_proto.c 8.1 (Berkeley) 6/10/93 - */ - -#include -__FBSDID("$FreeBSD$"); - -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -/* - * Definitions of protocols supported in the LOCAL domain. - */ - -static struct protosw localsw[] = { -{ - .pr_type = SOCK_STREAM, - .pr_domain = &localdomain, - .pr_flags = PR_CONNREQUIRED|PR_WANTRCVD|PR_RIGHTS, - .pr_ctloutput = &uipc_ctloutput, - .pr_usrreqs = &uipc_usrreqs -}, -{ - .pr_type = SOCK_DGRAM, - .pr_domain = &localdomain, - .pr_flags = PR_ATOMIC|PR_ADDR|PR_RIGHTS, - .pr_usrreqs = &uipc_usrreqs -}, -}; - -struct domain localdomain = { - .dom_family = AF_LOCAL, - .dom_name = "local", - .dom_init = unp_init, - .dom_externalize = unp_externalize, - .dom_dispose = unp_dispose, - .dom_protosw = localsw, - .dom_protoswNPROTOSW = &localsw[sizeof(localsw)/sizeof(localsw[0])] -}; -DOMAIN_SET(local); - -SYSCTL_NODE(_net, PF_LOCAL, local, CTLFLAG_RW, 0, "Local domain"); -SYSCTL_NODE(_net_local, SOCK_STREAM, stream, CTLFLAG_RW, 0, "SOCK_STREAM"); -SYSCTL_NODE(_net_local, SOCK_DGRAM, dgram, CTLFLAG_RW, 0, "SOCK_DGRAM"); diff --git a/sys/kern/uipc_usrreq.c b/sys/kern/uipc_usrreq.c index c3f2eaa348db..0c52a03425c3 100644 --- a/sys/kern/uipc_usrreq.c +++ b/sys/kern/uipc_usrreq.c @@ -124,17 +124,18 @@ static u_long unpdg_recvspace = 4*1024; static int unp_rights; /* file descriptors in flight */ -SYSCTL_DECL(_net_local_stream); +SYSCTL_NODE(_net, PF_LOCAL, local, CTLFLAG_RW, 0, "Local domain"); +SYSCTL_NODE(_net_local, SOCK_STREAM, stream, CTLFLAG_RW, 0, "SOCK_STREAM"); +SYSCTL_NODE(_net_local, SOCK_DGRAM, dgram, CTLFLAG_RW, 0, "SOCK_DGRAM"); + SYSCTL_ULONG(_net_local_stream, OID_AUTO, sendspace, CTLFLAG_RW, &unpst_sendspace, 0, ""); SYSCTL_ULONG(_net_local_stream, OID_AUTO, recvspace, CTLFLAG_RW, &unpst_recvspace, 0, ""); -SYSCTL_DECL(_net_local_dgram); SYSCTL_ULONG(_net_local_dgram, OID_AUTO, maxdgram, CTLFLAG_RW, &unpdg_sendspace, 0, ""); SYSCTL_ULONG(_net_local_dgram, OID_AUTO, recvspace, CTLFLAG_RW, &unpdg_recvspace, 0, ""); -SYSCTL_DECL(_net_local); SYSCTL_INT(_net_local, OID_AUTO, inflight, CTLFLAG_RD, &unp_rights, 0, ""); /* @@ -187,6 +188,37 @@ static int unp_internalize(struct mbuf **, struct thread *); static int unp_listen(struct socket *, struct unpcb *, int, struct thread *); +/* + * Definitions of protocols supported in the LOCAL domain. + */ +static struct domain localdomain; +static struct protosw localsw[] = { +{ + .pr_type = SOCK_STREAM, + .pr_domain = &localdomain, + .pr_flags = PR_CONNREQUIRED|PR_WANTRCVD|PR_RIGHTS, + .pr_ctloutput = &uipc_ctloutput, + .pr_usrreqs = &uipc_usrreqs +}, +{ + .pr_type = SOCK_DGRAM, + .pr_domain = &localdomain, + .pr_flags = PR_ATOMIC|PR_ADDR|PR_RIGHTS, + .pr_usrreqs = &uipc_usrreqs +}, +}; + +static struct domain localdomain = { + .dom_family = AF_LOCAL, + .dom_name = "local", + .dom_init = unp_init, + .dom_externalize = unp_externalize, + .dom_dispose = unp_dispose, + .dom_protosw = localsw, + .dom_protoswNPROTOSW = &localsw[sizeof(localsw)/sizeof(localsw[0])] +}; +DOMAIN_SET(local); + static void uipc_abort(struct socket *so) { diff --git a/sys/sys/domain.h b/sys/sys/domain.h index 1ec4447401a0..cf2e92cce1ef 100644 --- a/sys/sys/domain.h +++ b/sys/sys/domain.h @@ -66,7 +66,6 @@ struct domain { #ifdef _KERNEL extern int domain_init_status; extern struct domain *domains; -extern struct domain localdomain; extern void net_add_domain(void *); #define DOMAIN_SET(name) \