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