1 /* uipc_domain.c 6.4 85/04/27 */ 2 3 #include "param.h" 4 #include "socket.h" 5 #include "protosw.h" 6 #include "domain.h" 7 #include "time.h" 8 #include "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 NS 27 ADDDOMAIN(ns); 28 #endif 29 #ifdef PUP 30 ADDDOMAIN(pup); 31 #endif 32 #include "imp.h" 33 #if NIMP > 0 34 ADDDOMAIN(imp); 35 #endif 36 #endif 37 38 for (dp = domains; dp; dp = dp->dom_next) { 39 if (dp->dom_init) 40 (*dp->dom_init)(); 41 for (pr = dp->dom_protosw; pr < dp->dom_protoswNPROTOSW; pr++) 42 if (pr->pr_init) 43 (*pr->pr_init)(); 44 } 45 pffasttimo(); 46 pfslowtimo(); 47 } 48 49 struct protosw * 50 pffindtype(family, type) 51 int family, type; 52 { 53 register struct domain *dp; 54 register struct protosw *pr; 55 56 for (dp = domains; dp; dp = dp->dom_next) 57 if (dp->dom_family == family) 58 goto found; 59 return (0); 60 found: 61 for (pr = dp->dom_protosw; pr < dp->dom_protoswNPROTOSW; pr++) 62 if (pr->pr_type && pr->pr_type == type) 63 return (pr); 64 return (0); 65 } 66 67 struct protosw * 68 pffindproto(family, protocol) 69 int family, protocol; 70 { 71 register struct domain *dp; 72 register struct protosw *pr; 73 74 if (family == 0) 75 return (0); 76 for (dp = domains; dp; dp = dp->dom_next) 77 if (dp->dom_family == family) 78 goto found; 79 return (0); 80 found: 81 for (pr = dp->dom_protosw; pr < dp->dom_protoswNPROTOSW; pr++) 82 if (pr->pr_protocol == protocol) 83 return (pr); 84 return (0); 85 } 86 87 pfctlinput(cmd, arg) 88 int cmd; 89 caddr_t arg; 90 { 91 register struct domain *dp; 92 register struct protosw *pr; 93 94 for (dp = domains; dp; dp = dp->dom_next) 95 for (pr = dp->dom_protosw; pr < dp->dom_protoswNPROTOSW; pr++) 96 if (pr->pr_ctlinput) 97 (*pr->pr_ctlinput)(cmd, arg); 98 } 99 100 pfslowtimo() 101 { 102 register struct domain *dp; 103 register struct protosw *pr; 104 105 for (dp = domains; dp; dp = dp->dom_next) 106 for (pr = dp->dom_protosw; pr < dp->dom_protoswNPROTOSW; pr++) 107 if (pr->pr_slowtimo) 108 (*pr->pr_slowtimo)(); 109 timeout(pfslowtimo, (caddr_t)0, hz/2); 110 } 111 112 pffasttimo() 113 { 114 register struct domain *dp; 115 register struct protosw *pr; 116 117 for (dp = domains; dp; dp = dp->dom_next) 118 for (pr = dp->dom_protosw; pr < dp->dom_protoswNPROTOSW; pr++) 119 if (pr->pr_fasttimo) 120 (*pr->pr_fasttimo)(); 121 timeout(pffasttimo, (caddr_t)0, hz/5); 122 } 123