domain searching routines, &c
authorBill Joy <root@ucbvax.Berkeley.EDU>
Wed, 3 Nov 1982 03:33:03 +0000 (19:33 -0800)
committerBill Joy <root@ucbvax.Berkeley.EDU>
Wed, 3 Nov 1982 03:33:03 +0000 (19:33 -0800)
SCCS-vsn: sys/kern/uipc_domain.c 5.5

usr/src/sys/kern/uipc_domain.c

index 649e198..ffca28c 100644 (file)
-/*     uipc_domain.c   5.4     82/10/10        */
+/*     uipc_domain.c   5.5     82/11/02        */
 
 #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/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"
-
-domain()
+#include "../h/socket.h"
+#include "../h/protosw.h"
+#include "../h/domain.h"
+
+#define        ADDDOMAIN(x)    { \
+       extern struct domain x/**/domain; \
+       x/**/domain.dom_next = domains; \
+       domains = &x/**/domain; \
+}
+
+domaininit()
+{
+
+       ADDDOMAIN(unix);
+#ifdef INET
+       ADDDOMAIN(inet);
+#endif
+#ifdef PUP
+       ADDDOMAIN(pup);
+#endif
+#ifdef IMP
+       ADDDOMAIN(imp);
+#endif
+       pfinit();
+}
+
+/*
+ * Operations applying to the sets of protocols
+ * defined by the available communications domains.
+ */
+pfinit()
+{
+       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_init)
+                               (*pr->pr_init)();
+}
+
+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)();
+}
+
+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)();
 }
 }