merge of 4.1b and 4.1c
[unix-history] / usr / src / sys / kern / uipc_domain.c
index 72bcca7..21e2f1e 100644 (file)
-/*     uipc_domain.c   5.2     82/07/24        */
+/*     uipc_domain.c   5.6     82/11/13        */
 
 #include "../h/param.h"
 
 #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()
+#include "../h/socket.h"
+#include "../h/protosw.h"
+#include "../h/domain.h"
+#include <time.h>
+#include "../h/kernel.h"
+
+#define        ADDDOMAIN(x)    { \
+       extern struct domain x/**/domain; \
+       x/**/domain.dom_next = domains; \
+       domains = &x/**/domain; \
+}
+
+domaininit()
+{
+       register struct domain *dp;
+       register struct protosw *pr;
+
+#ifndef lint
+       ADDDOMAIN(unix);
+#ifdef INET
+       ADDDOMAIN(inet);
+#endif
+#ifdef PUP
+       ADDDOMAIN(pup);
+#endif
+#ifdef IMP
+       ADDDOMAIN(imp);
+#endif
+#endif
+
+       for (dp = domains; dp; dp = dp->dom_next)
+               for (pr = dp->dom_protosw; pr < dp->dom_protoswNPROTOSW; pr++)
+                       if (pr->pr_init)
+                               (*pr->pr_init)();
+       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 == type)
+                       return (pr);
+       return (0);
+}
+
+struct protosw *
+pffindproto(family, protocol)
+       int family, protocol;
+{
+       register struct domain *dp;
+       register struct protosw *pr;
+
+       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)
+                       return (pr);
+       return (0);
+}
+
+pfctlinput(cmd, arg)
+       int cmd;
+       caddr_t arg;
+{
+       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, arg);
+}
+
+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);
 }
 }