From: Bill Joy Date: Wed, 3 Nov 1982 03:33:03 +0000 (-0800) Subject: domain searching routines, &c X-Git-Tag: BSD-4_1c_2-Snapshot-Development~1957 X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/commitdiff_plain/d0d50a8673c5141ac53caf5ef01491e0d4b27900 domain searching routines, &c SCCS-vsn: sys/kern/uipc_domain.c 5.5 --- diff --git a/usr/src/sys/kern/uipc_domain.c b/usr/src/sys/kern/uipc_domain.c index 649e198375..ffca28c56b 100644 --- a/usr/src/sys/kern/uipc_domain.c +++ b/usr/src/sys/kern/uipc_domain.c @@ -1,22 +1,116 @@ -/* uipc_domain.c 5.4 82/10/10 */ +/* uipc_domain.c 5.5 82/11/02 */ #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)(); }