/* uipc_domain.c 5.7 82/12/30 */ #include "../h/param.h" #include "../h/socket.h" #include "../h/protosw.h" #include "../h/domain.h" #include #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 #include "imp.h" #if NIMP > 0 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; 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); }