1 /* uipc_domain.c 5.6 82/11/13 */ 2 3 #include "../h/param.h" 4 #include "../h/socket.h" 5 #include "../h/protosw.h" 6 #include "../h/domain.h" 7 #include <time.h> 8 #include "../h/kernel.h" 9 10 #define ADDDOMAIN(x) { \ 11 extern struct domain x/**/domain; \ 12 x/**/domain.dom_next = domains; \ 13 domains = &x/**/domain; \ 14 } 15 16 domaininit() 17 { 18 register struct domain *dp; 19 register struct protosw *pr; 20 21 #ifndef lint 22 ADDDOMAIN(unix); 23 #ifdef INET 24 ADDDOMAIN(inet); 25 #endif 26 #ifdef PUP 27 ADDDOMAIN(pup); 28 #endif 29 #ifdef IMP 30 ADDDOMAIN(imp); 31 #endif 32 #endif 33 34 for (dp = domains; dp; dp = dp->dom_next) 35 for (pr = dp->dom_protosw; pr < dp->dom_protoswNPROTOSW; pr++) 36 if (pr->pr_init) 37 (*pr->pr_init)(); 38 pffasttimo(); 39 pfslowtimo(); 40 } 41 42 struct protosw * 43 pffindtype(family, type) 44 int family, type; 45 { 46 register struct domain *dp; 47 register struct protosw *pr; 48 49 for (dp = domains; dp; dp = dp->dom_next) 50 if (dp->dom_family == family) 51 goto found; 52 return (0); 53 found: 54 for (pr = dp->dom_protosw; pr < dp->dom_protoswNPROTOSW; pr++) 55 if (pr->pr_type == type) 56 return (pr); 57 return (0); 58 } 59 60 struct protosw * 61 pffindproto(family, protocol) 62 int family, protocol; 63 { 64 register struct domain *dp; 65 register struct protosw *pr; 66 67 if (family == 0) 68 return (0); 69 for (dp = domains; dp; dp = dp->dom_next) 70 if (dp->dom_family == family) 71 goto found; 72 return (0); 73 found: 74 for (pr = dp->dom_protosw; pr < dp->dom_protoswNPROTOSW; pr++) 75 if (pr->pr_protocol == protocol) 76 return (pr); 77 return (0); 78 } 79 80 pfctlinput(cmd, arg) 81 int cmd; 82 caddr_t arg; 83 { 84 register struct domain *dp; 85 register struct protosw *pr; 86 87 for (dp = domains; dp; dp = dp->dom_next) 88 for (pr = dp->dom_protosw; pr < dp->dom_protoswNPROTOSW; pr++) 89 if (pr->pr_ctlinput) 90 (*pr->pr_ctlinput)(cmd, arg); 91 } 92 93 pfslowtimo() 94 { 95 register struct domain *dp; 96 register struct protosw *pr; 97 98 for (dp = domains; dp; dp = dp->dom_next) 99 for (pr = dp->dom_protosw; pr < dp->dom_protoswNPROTOSW; pr++) 100 if (pr->pr_slowtimo) 101 (*pr->pr_slowtimo)(); 102 timeout(pfslowtimo, (caddr_t)0, hz/2); 103 } 104 105 pffasttimo() 106 { 107 register struct domain *dp; 108 register struct protosw *pr; 109 110 for (dp = domains; dp; dp = dp->dom_next) 111 for (pr = dp->dom_protosw; pr < dp->dom_protoswNPROTOSW; pr++) 112 if (pr->pr_fasttimo) 113 (*pr->pr_fasttimo)(); 114 timeout(pffasttimo, (caddr_t)0, hz/5); 115 } 116