xref: /original-bsd/sys/kern/uipc_domain.c (revision 62734ea8)
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