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