1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100 #include <sys/param.h>
101 #include <sys/socket.h>
102 #include <sys/protosw.h>
103 #include <sys/domain.h>
104 #include <sys/mbuf.h>
105
106 #include <net/if.h>
107 #include <net/route.h>
108 #include <net/radix.h>
109 #ifndef SMALL_KERNEL
110 #include <net/radix_mpath.h>
111 #endif
112
113 #include <netinet/in.h>
114 #include <netinet/in_systm.h>
115 #include <netinet/ip.h>
116 #include <netinet/ip_var.h>
117 #include <netinet/ip_icmp.h>
118 #include <netinet/in_pcb.h>
119
120 #ifdef INET6
121 #ifndef INET
122 #include <netinet/in.h>
123 #endif
124 #include <netinet/ip6.h>
125 #endif
126
127 #include <netinet/igmp_var.h>
128 #ifdef PIM
129 #include <netinet/pim_var.h>
130 #endif
131 #include <netinet/tcp.h>
132 #include <netinet/tcp_timer.h>
133 #include <netinet/tcp_var.h>
134 #include <netinet/udp.h>
135 #include <netinet/udp_var.h>
136
137
138
139
140
141 #include "gif.h"
142 #if NGIF > 0
143 #include <netinet/in_gif.h>
144 #endif
145
146 #ifdef INET6
147 #include <netinet6/ip6_var.h>
148 #endif
149
150 #ifdef IPSEC
151 #include <netinet/ip_ipsp.h>
152 #include <netinet/ip_ether.h>
153 #endif
154
155 #include <netinet/ip_ipip.h>
156
157 #include "gre.h"
158 #if NGRE > 0
159 #include <netinet/ip_gre.h>
160 #include <net/if_gre.h>
161 #endif
162
163 #include "carp.h"
164 #if NCARP > 0
165 #include <netinet/ip_carp.h>
166 #endif
167
168 #include "pfsync.h"
169 #if NPFSYNC > 0
170 #include <net/pfvar.h>
171 #include <net/if_pfsync.h>
172 #endif
173
174 extern struct domain inetdomain;
175
176 struct protosw inetsw[] = {
177 { 0, &inetdomain, 0, 0,
178 0, ip_output, 0, 0,
179 0,
180 ip_init, 0, ip_slowtimo, ip_drain, ip_sysctl
181 },
182 { SOCK_DGRAM, &inetdomain, IPPROTO_UDP, PR_ATOMIC|PR_ADDR,
183 udp_input, 0, udp_ctlinput, ip_ctloutput,
184 udp_usrreq,
185 udp_init, 0, 0, 0, udp_sysctl
186 },
187 { SOCK_STREAM, &inetdomain, IPPROTO_TCP, PR_CONNREQUIRED|PR_WANTRCVD|PR_ABRTACPTDIS,
188 tcp_input, 0, tcp_ctlinput, tcp_ctloutput,
189 tcp_usrreq,
190 tcp_init, 0, tcp_slowtimo, tcp_drain, tcp_sysctl
191 },
192 { SOCK_RAW, &inetdomain, IPPROTO_RAW, PR_ATOMIC|PR_ADDR,
193 rip_input, rip_output, 0, rip_ctloutput,
194 rip_usrreq,
195 0, 0, 0, 0,
196 },
197 { SOCK_RAW, &inetdomain, IPPROTO_ICMP, PR_ATOMIC|PR_ADDR,
198 icmp_input, rip_output, 0, rip_ctloutput,
199 rip_usrreq,
200 icmp_init, 0, 0, 0, icmp_sysctl
201 },
202 #if NGIF > 0
203 { SOCK_RAW, &inetdomain, IPPROTO_IPV4, PR_ATOMIC|PR_ADDR,
204 in_gif_input, rip_output, 0, rip_ctloutput,
205 rip_usrreq,
206 0, 0, 0, 0, ipip_sysctl
207 },
208 #ifdef INET6
209 { SOCK_RAW, &inetdomain, IPPROTO_IPV6, PR_ATOMIC|PR_ADDR,
210 in_gif_input, rip_output, 0, 0,
211 rip_usrreq,
212 0, 0, 0, 0,
213 },
214 #endif
215 #else
216 { SOCK_RAW, &inetdomain, IPPROTO_IPIP, PR_ATOMIC|PR_ADDR,
217 ip4_input, rip_output, 0, rip_ctloutput,
218 rip_usrreq,
219 0, 0, 0, 0, ipip_sysctl
220 },
221 #ifdef INET6
222 { SOCK_RAW, &inetdomain, IPPROTO_IPV6, PR_ATOMIC|PR_ADDR,
223 ip4_input, rip_output, 0, rip_ctloutput,
224 rip_usrreq,
225 0, 0, 0, 0,
226 },
227 #endif
228 #endif
229 { SOCK_RAW, &inetdomain, IPPROTO_IGMP, PR_ATOMIC|PR_ADDR,
230 igmp_input, rip_output, 0, rip_ctloutput,
231 rip_usrreq,
232 igmp_init, igmp_fasttimo, igmp_slowtimo, 0,
233 },
234 #ifdef PIM
235 { SOCK_RAW, &inetdomain, IPPROTO_PIM, PR_ATOMIC|PR_ADDR,
236 pim_input, rip_output, 0, rip_ctloutput,
237 rip_usrreq,
238 0, 0, 0, 0,
239 },
240 #endif
241 #ifdef IPSEC
242 { SOCK_RAW, &inetdomain, IPPROTO_AH, PR_ATOMIC|PR_ADDR,
243 ah4_input, rip_output, ah4_ctlinput, rip_ctloutput,
244 rip_usrreq,
245 0, 0, 0, 0, ah_sysctl
246 },
247 { SOCK_RAW, &inetdomain, IPPROTO_ESP, PR_ATOMIC|PR_ADDR,
248 esp4_input, rip_output, esp4_ctlinput, rip_ctloutput,
249 rip_usrreq,
250 0, 0, 0, 0, esp_sysctl
251 },
252 { SOCK_RAW, &inetdomain, IPPROTO_ETHERIP, PR_ATOMIC|PR_ADDR,
253 etherip_input, rip_output, 0, rip_ctloutput,
254 rip_usrreq,
255 0, 0, 0, 0, etherip_sysctl
256 },
257 { SOCK_RAW, &inetdomain, IPPROTO_IPCOMP, PR_ATOMIC|PR_ADDR,
258 ipcomp4_input, rip_output, 0, rip_ctloutput,
259 rip_usrreq,
260 0, 0, 0, 0, ipcomp_sysctl
261 },
262 #endif
263 #if NGRE > 0
264 { SOCK_RAW, &inetdomain, IPPROTO_GRE, PR_ATOMIC|PR_ADDR,
265 gre_input, rip_output, 0, rip_ctloutput,
266 rip_usrreq,
267 0, 0, 0, 0, gre_sysctl
268 },
269 { SOCK_RAW, &inetdomain, IPPROTO_MOBILE, PR_ATOMIC|PR_ADDR,
270 gre_mobile_input, rip_output, 0, rip_ctloutput,
271 rip_usrreq,
272 0, 0, 0, 0, ipmobile_sysctl
273 },
274 #endif
275 #if NCARP > 0
276 { SOCK_RAW, &inetdomain, IPPROTO_CARP, PR_ATOMIC|PR_ADDR,
277 carp_proto_input, rip_output, 0, rip_ctloutput,
278 rip_usrreq,
279 0, 0, 0, 0, carp_sysctl
280 },
281 #endif
282 #if NPFSYNC > 0
283 { SOCK_RAW, &inetdomain, IPPROTO_PFSYNC, PR_ATOMIC|PR_ADDR,
284 pfsync_input, rip_output, 0, rip_ctloutput,
285 rip_usrreq,
286 0, 0, 0, 0,
287 },
288 #endif
289
290 { SOCK_RAW, &inetdomain, 0, PR_ATOMIC|PR_ADDR,
291 rip_input, rip_output, 0, rip_ctloutput,
292 rip_usrreq,
293 rip_init, 0, 0, 0,
294 },
295 };
296
297 struct domain inetdomain =
298 { AF_INET, "internet", 0, 0, 0,
299 inetsw, &inetsw[sizeof(inetsw)/sizeof(inetsw[0])], 0,
300 #ifndef SMALL_KERNEL
301 rn_mpath_inithead,
302 #else
303 rn_inithead,
304 #endif
305 32, sizeof(struct sockaddr_in) };
306
307 #ifdef notyet
308 #include "hy.h"
309 #if NHY > 0
310
311
312
313 int rhy_output();
314 extern struct domain hydomain;
315
316 struct protosw hysw[] = {
317 { SOCK_RAW, &hydomain, 0, PR_ATOMIC|PR_ADDR,
318 0, rhy_output, 0, 0,
319 rip_usrreq,
320 0, 0, 0, 0,
321 },
322 };
323
324 struct domain hydomain =
325 { AF_HYLINK, "hy", 0, 0, 0, hysw, &hysw[sizeof (hysw)/sizeof(hysw[0])] };
326 #endif
327 #endif