consistency with tty.c about value for "no pgrp"
[unix-history] / usr / src / sys / kern / uipc_domain.c
index 72bcca7..fa67b61 100644 (file)
-/*     uipc_domain.c   5.2     82/07/24        */
-
-#include "../h/param.h"
-#include "../h/systm.h"
-#include "../h/dir.h"
-#include "../h/user.h"
-#include "../h/reg.h"
-#include "../h/inode.h"
-#include "../h/proc.h"
-#include "../h/clock.h"
-#include "../h/mtpr.h"
-#include "../h/timeb.h"
-#include "../h/times.h"
-#include "../h/reboot.h"
-#include "../h/fs.h"
-#include "../h/conf.h"
-#include "../h/buf.h"
-#include "../h/mount.h"
-
-cdomain()
+/*
+ * Copyright (c) 1982, 1986 Regents of the University of California.
+ * All rights reserved.
+ *
+ * %sccs.include.redist.c%
+ *
+ *     @(#)uipc_domain.c       7.9 (Berkeley) %G%
+ */
+
+#include <sys/cdefs.h>
+#include "param.h"
+#include "socket.h"
+#include "protosw.h"
+#include "domain.h"
+#include "mbuf.h"
+#include "time.h"
+#include "kernel.h"
+
+#define        ADDDOMAIN(x)    { \
+       extern struct domain __CONCAT(x,domain); \
+       __CONCAT(x,domain.dom_next) = domains; \
+       domains = &__CONCAT(x,domain); \
+}
+
+domaininit()
+{
+       register struct domain *dp;
+       register struct protosw *pr;
+
+#undef unix
+#ifndef lint
+       ADDDOMAIN(unix);
+       ADDDOMAIN(route);
+#ifdef INET
+       ADDDOMAIN(inet);
+#endif
+#ifdef NS
+       ADDDOMAIN(ns);
+#endif
+#ifdef ISO
+       ADDDOMAIN(iso);
+#endif
+#ifdef RMP
+       ADDDOMAIN(rmp);
+#endif
+#ifdef CCITT
+       ADDDOMAIN(ccitt);
+#endif
+#include "imp.h"
+#if NIMP > 0
+       ADDDOMAIN(imp);
+#endif
+#endif
+
+       for (dp = domains; dp; dp = dp->dom_next) {
+               if (dp->dom_init)
+                       (*dp->dom_init)();
+               for (pr = dp->dom_protosw; pr < dp->dom_protoswNPROTOSW; pr++)
+                       if (pr->pr_init)
+                               (*pr->pr_init)();
+       }
+
+if (max_linkhdr < 16)          /* XXX */
+max_linkhdr = 16;
+       max_hdr = max_linkhdr + max_protohdr;
+       max_datalen = MHLEN - max_hdr;
+       pffasttimo();
+       pfslowtimo();
+}
+
+struct protosw *
+pffindtype(family, type)
+       int family, type;
+{
+       register struct domain *dp;
+       register struct protosw *pr;
+
+       for (dp = domains; dp; dp = dp->dom_next)
+               if (dp->dom_family == family)
+                       goto found;
+       return (0);
+found:
+       for (pr = dp->dom_protosw; pr < dp->dom_protoswNPROTOSW; pr++)
+               if (pr->pr_type && pr->pr_type == type)
+                       return (pr);
+       return (0);
+}
+
+struct protosw *
+pffindproto(family, protocol, type)
+       int family, protocol, type;
+{
+       register struct domain *dp;
+       register struct protosw *pr;
+       struct protosw *maybe = 0;
+
+       if (family == 0)
+               return (0);
+       for (dp = domains; dp; dp = dp->dom_next)
+               if (dp->dom_family == family)
+                       goto found;
+       return (0);
+found:
+       for (pr = dp->dom_protosw; pr < dp->dom_protoswNPROTOSW; pr++) {
+               if ((pr->pr_protocol == protocol) && (pr->pr_type == type))
+                       return (pr);
+
+               if (type == SOCK_RAW && pr->pr_type == SOCK_RAW &&
+                   pr->pr_protocol == 0 && maybe == (struct protosw *)0)
+                       maybe = pr;
+       }
+       return (maybe);
+}
+
+pfctlinput(cmd, sa)
+       int cmd;
+       struct sockaddr *sa;
+{
+       register struct domain *dp;
+       register struct protosw *pr;
+
+       for (dp = domains; dp; dp = dp->dom_next)
+               for (pr = dp->dom_protosw; pr < dp->dom_protoswNPROTOSW; pr++)
+                       if (pr->pr_ctlinput)
+                               (*pr->pr_ctlinput)(cmd, sa, (caddr_t) 0);
+}
+
+pfslowtimo()
+{
+       register struct domain *dp;
+       register struct protosw *pr;
+
+       for (dp = domains; dp; dp = dp->dom_next)
+               for (pr = dp->dom_protosw; pr < dp->dom_protoswNPROTOSW; pr++)
+                       if (pr->pr_slowtimo)
+                               (*pr->pr_slowtimo)();
+       timeout(pfslowtimo, (caddr_t)0, hz/2);
+}
+
+pffasttimo()
 {
 {
+       register struct domain *dp;
+       register struct protosw *pr;
 
 
-       /* return a descriptor for the domain */
+       for (dp = domains; dp; dp = dp->dom_next)
+               for (pr = dp->dom_protosw; pr < dp->dom_protoswNPROTOSW; pr++)
+                       if (pr->pr_fasttimo)
+                               (*pr->pr_fasttimo)();
+       timeout(pffasttimo, (caddr_t)0, hz/5);
 }
 }