+#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()