Annotation of sys/netinet/in_proto.c, Revision 1.1.1.1
1.1 nbrk 1: /* $OpenBSD: in_proto.c,v 1.46 2007/06/06 09:58:12 henning Exp $ */
2: /* $NetBSD: in_proto.c,v 1.14 1996/02/18 18:58:32 christos Exp $ */
3:
4: /*
5: * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
6: * All rights reserved.
7: *
8: * Redistribution and use in source and binary forms, with or without
9: * modification, are permitted provided that the following conditions
10: * are met:
11: * 1. Redistributions of source code must retain the above copyright
12: * notice, this list of conditions and the following disclaimer.
13: * 2. Redistributions in binary form must reproduce the above copyright
14: * notice, this list of conditions and the following disclaimer in the
15: * documentation and/or other materials provided with the distribution.
16: * 3. Neither the name of the project nor the names of its contributors
17: * may be used to endorse or promote products derived from this software
18: * without specific prior written permission.
19: *
20: * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
21: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23: * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
24: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30: * SUCH DAMAGE.
31: */
32:
33: /*
34: * Copyright (c) 1982, 1986, 1993
35: * The Regents of the University of California. All rights reserved.
36: *
37: * Redistribution and use in source and binary forms, with or without
38: * modification, are permitted provided that the following conditions
39: * are met:
40: * 1. Redistributions of source code must retain the above copyright
41: * notice, this list of conditions and the following disclaimer.
42: * 2. Redistributions in binary form must reproduce the above copyright
43: * notice, this list of conditions and the following disclaimer in the
44: * documentation and/or other materials provided with the distribution.
45: * 3. Neither the name of the University nor the names of its contributors
46: * may be used to endorse or promote products derived from this software
47: * without specific prior written permission.
48: *
49: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
50: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
51: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
52: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
53: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
54: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
55: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
56: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
57: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
58: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
59: * SUCH DAMAGE.
60: *
61: * @(#)COPYRIGHT 1.1 (NRL) 17 January 1995
62: *
63: * NRL grants permission for redistribution and use in source and binary
64: * forms, with or without modification, of the software and documentation
65: * created at NRL provided that the following conditions are met:
66: *
67: * 1. Redistributions of source code must retain the above copyright
68: * notice, this list of conditions and the following disclaimer.
69: * 2. Redistributions in binary form must reproduce the above copyright
70: * notice, this list of conditions and the following disclaimer in the
71: * documentation and/or other materials provided with the distribution.
72: * 3. All advertising materials mentioning features or use of this software
73: * must display the following acknowledgements:
74: * This product includes software developed by the University of
75: * California, Berkeley and its contributors.
76: * This product includes software developed at the Information
77: * Technology Division, US Naval Research Laboratory.
78: * 4. Neither the name of the NRL nor the names of its contributors
79: * may be used to endorse or promote products derived from this software
80: * without specific prior written permission.
81: *
82: * THE SOFTWARE PROVIDED BY NRL IS PROVIDED BY NRL AND CONTRIBUTORS ``AS
83: * IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
84: * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
85: * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NRL OR
86: * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
87: * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
88: * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
89: * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
90: * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
91: * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
92: * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
93: *
94: * The views and conclusions contained in the software and documentation
95: * are those of the authors and should not be interpreted as representing
96: * official policies, either expressed or implied, of the US Naval
97: * Research Laboratory (NRL).
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: * TCP/IP protocol family: IP, ICMP, UDP, TCP.
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 /* INET6 */
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, /*XXX*/
212: 0, 0, 0, 0,
213: },
214: #endif /* INET6 */
215: #else /* NGIF */
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, /*XXX*/
225: 0, 0, 0, 0,
226: },
227: #endif /* INET6 */
228: #endif /*NGIF*/
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 /* PIM */
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 /* IPSEC */
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 /* NGRE > 0 */
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 /* NCARP > 0 */
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 /* NPFSYNC > 0 */
289: /* raw wildcard */
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 /* XXXX */
308: #include "hy.h"
309: #if NHY > 0
310: /*
311: * HYPERchannel protocol family: raw interface.
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
CVSweb