parameterize max proc id
[unix-history] / usr / src / sys / kern / uipc_domain.c
CommitLineData
da7c5cc6 1/*
0880b18e 2 * Copyright (c) 1982, 1986 Regents of the University of California.
5b519e94 3 * All rights reserved.
da7c5cc6 4 *
dbf0c423 5 * %sccs.include.redist.c%
5b519e94 6 *
dbf0c423 7 * @(#)uipc_domain.c 7.7 (Berkeley) %G%
da7c5cc6 8 */
2f6bcc97 9
94368568
JB
10#include "param.h"
11#include "socket.h"
12#include "protosw.h"
13#include "domain.h"
fe8b0eef 14#include "mbuf.h"
94368568
JB
15#include "time.h"
16#include "kernel.h"
d0d50a86
BJ
17
18#define ADDDOMAIN(x) { \
19 extern struct domain x/**/domain; \
20 x/**/domain.dom_next = domains; \
21 domains = &x/**/domain; \
22}
23
24domaininit()
25{
4f083fd7
SL
26 register struct domain *dp;
27 register struct protosw *pr;
d0d50a86 28
4f083fd7 29#ifndef lint
d0d50a86 30 ADDDOMAIN(unix);
fe8b0eef 31 ADDDOMAIN(route);
2a04df10 32#ifdef INET
d0d50a86
BJ
33 ADDDOMAIN(inet);
34#endif
6e8408aa
KS
35#ifdef NS
36 ADDDOMAIN(ns);
37#endif
fe8b0eef
MK
38#ifdef ISO
39 ADDDOMAIN(iso);
40#endif
2a45cac7
KM
41#ifdef RMP
42 ADDDOMAIN(rmp);
43#endif
bd65e3c4
SL
44#include "imp.h"
45#if NIMP > 0
d0d50a86
BJ
46 ADDDOMAIN(imp);
47#endif
4f083fd7 48#endif
d0d50a86 49
261a8548
MK
50 for (dp = domains; dp; dp = dp->dom_next) {
51 if (dp->dom_init)
52 (*dp->dom_init)();
d0d50a86
BJ
53 for (pr = dp->dom_protosw; pr < dp->dom_protoswNPROTOSW; pr++)
54 if (pr->pr_init)
55 (*pr->pr_init)();
261a8548 56 }
fe8b0eef
MK
57
58if (max_linkhdr < 16) /* XXX */
59max_linkhdr = 16;
60 max_hdr = max_linkhdr + max_protohdr;
61 max_datalen = MHLEN - max_hdr;
4f083fd7
SL
62 pffasttimo();
63 pfslowtimo();
d0d50a86
BJ
64}
65
66struct protosw *
67pffindtype(family, type)
68 int family, type;
69{
70 register struct domain *dp;
71 register struct protosw *pr;
72
73 for (dp = domains; dp; dp = dp->dom_next)
74 if (dp->dom_family == family)
75 goto found;
76 return (0);
77found:
78 for (pr = dp->dom_protosw; pr < dp->dom_protoswNPROTOSW; pr++)
6cd6d0de 79 if (pr->pr_type && pr->pr_type == type)
d0d50a86
BJ
80 return (pr);
81 return (0);
82}
83
84struct protosw *
9f773c40
MK
85pffindproto(family, protocol, type)
86 int family, protocol, type;
d0d50a86
BJ
87{
88 register struct domain *dp;
89 register struct protosw *pr;
9f773c40 90 struct protosw *maybe = 0;
d0d50a86
BJ
91
92 if (family == 0)
93 return (0);
94 for (dp = domains; dp; dp = dp->dom_next)
95 if (dp->dom_family == family)
96 goto found;
97 return (0);
98found:
9f773c40 99 for (pr = dp->dom_protosw; pr < dp->dom_protoswNPROTOSW; pr++) {
c76325fe 100 if ((pr->pr_protocol == protocol) && (pr->pr_type == type))
d0d50a86 101 return (pr);
c76325fe 102
9f773c40
MK
103 if (type == SOCK_RAW && pr->pr_type == SOCK_RAW &&
104 pr->pr_protocol == 0 && maybe == (struct protosw *)0)
105 maybe = pr;
106 }
107 return (maybe);
d0d50a86
BJ
108}
109
122d5d84 110pfctlinput(cmd, sa)
d0d50a86 111 int cmd;
122d5d84 112 struct sockaddr *sa;
d0d50a86
BJ
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_ctlinput)
f3ba532d 120 (*pr->pr_ctlinput)(cmd, sa, (caddr_t) 0);
d0d50a86
BJ
121}
122
123pfslowtimo()
124{
125 register struct domain *dp;
126 register struct protosw *pr;
127
128 for (dp = domains; dp; dp = dp->dom_next)
129 for (pr = dp->dom_protosw; pr < dp->dom_protoswNPROTOSW; pr++)
130 if (pr->pr_slowtimo)
131 (*pr->pr_slowtimo)();
4f083fd7 132 timeout(pfslowtimo, (caddr_t)0, hz/2);
d0d50a86
BJ
133}
134
135pffasttimo()
4147b3f6 136{
d0d50a86
BJ
137 register struct domain *dp;
138 register struct protosw *pr;
4147b3f6 139
d0d50a86
BJ
140 for (dp = domains; dp; dp = dp->dom_next)
141 for (pr = dp->dom_protosw; pr < dp->dom_protoswNPROTOSW; pr++)
142 if (pr->pr_fasttimo)
143 (*pr->pr_fasttimo)();
4f083fd7 144 timeout(pffasttimo, (caddr_t)0, hz/5);
4147b3f6 145}