summaryrefslogtreecommitdiffstats
path: root/sys/kern/uipc_usrreq.c
diff options
context:
space:
mode:
authorrwatson <rwatson@FreeBSD.org>2006-08-07 12:02:43 +0000
committerrwatson <rwatson@FreeBSD.org>2006-08-07 12:02:43 +0000
commit3bd21f489dfd6312870849d0fe3e9f82c74b1b79 (patch)
tree632c3b48deb628a0bb5ceef890e7a8a5b66f131a /sys/kern/uipc_usrreq.c
parenta107b7659257676eb8d54343ada8c0187e4f2f12 (diff)
downloadFreeBSD-src-3bd21f489dfd6312870849d0fe3e9f82c74b1b79.zip
FreeBSD-src-3bd21f489dfd6312870849d0fe3e9f82c74b1b79.tar.gz
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.
Diffstat (limited to 'sys/kern/uipc_usrreq.c')
-rw-r--r--sys/kern/uipc_usrreq.c38
1 files changed, 35 insertions, 3 deletions
diff --git a/sys/kern/uipc_usrreq.c b/sys/kern/uipc_usrreq.c
index c3f2eaa..0c52a03 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)
{
OpenPOWER on IntegriCloud