source: rtems/cpukit/libnetworking/netinet/in_proto.c @ c301570

4.104.114.84.9
Last change on this file since c301570 was c301570, checked in by Ralf Corsepius <ralf.corsepius@…>, on May 10, 2007 at 5:12:54 AM

Include <rtems/bsd/sys/queue.h> instead of <sys/queue.h>.

  • Property mode set to 100644
File size: 5.8 KB
Line 
1/*
2 * Copyright (c) 1982, 1986, 1993
3 *      The Regents of the University of California.  All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 *    notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 *    notice, this list of conditions and the following disclaimer in the
12 *    documentation and/or other materials provided with the distribution.
13 * 3. All advertising materials mentioning features or use of this software
14 *    must display the following acknowledgement:
15 *      This product includes software developed by the University of
16 *      California, Berkeley and its contributors.
17 * 4. Neither the name of the University nor the names of its contributors
18 *    may be used to endorse or promote products derived from this software
19 *    without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
32 *
33 *      @(#)in_proto.c  8.2 (Berkeley) 2/9/95
34 *      $Id$
35 */
36
37#include "opt_tcpdebug.h"
38
39#include <sys/param.h>
40#include <rtems/bsd/sys/queue.h>
41#include <sys/kernel.h>
42#include <sys/socket.h>
43#include <sys/socketvar.h>
44#include <sys/domain.h>
45#include <sys/mbuf.h>
46#include <sys/protosw.h>
47#include <sys/sysctl.h>
48
49#include <net/if.h>
50#include <net/radix.h>
51#include <net/route.h>
52
53#include <netinet/in.h>
54#include <netinet/in_systm.h>
55#include <netinet/ip.h>
56#include <netinet/ip_var.h>
57#include <netinet/ip_icmp.h>
58#include <netinet/in_pcb.h>
59#include <netinet/igmp_var.h>
60#include <netinet/tcp.h>
61#include <netinet/tcp_fsm.h>
62#include <netinet/tcp_seq.h>
63#include <netinet/tcp_timer.h>
64#include <netinet/tcp_var.h>
65#include <netinet/tcpip.h>
66#ifdef TCPDEBUG
67#include <netinet/tcp_debug.h>
68#endif
69#include <netinet/udp.h>
70#include <netinet/udp_var.h>
71/*
72 * TCP/IP protocol family: IP, ICMP, UDP, TCP.
73 */
74
75#ifdef IPXIP
76#include <netipx/ipx.h>
77#include <netipx/ipx_ip.h>
78#endif
79
80#ifdef NSIP
81#include <netns/ns.h>
82#include <netns/ns_if.h>
83#endif
84
85#ifdef TPIP
86void    tpip_input(), tpip_ctlinput(), tp_init(), tp_slowtimo(), tp_drain();
87int     tp_ctloutput(), tp_usrreq();
88#endif
89
90#ifdef EON
91void    eoninput(), eonctlinput(), eonprotoinit();
92#endif /* EON */
93
94extern  struct domain inetdomain;
95
96struct protosw inetsw[] = {
97{ 0,            &inetdomain,    0,              0,
98  0,            0,              0,              0,
99  0,
100  ip_init,      0,              ip_slowtimo,    ip_drain
101},
102{ SOCK_DGRAM,   &inetdomain,    IPPROTO_UDP,    PR_ATOMIC|PR_ADDR,
103  udp_input,    0,              udp_ctlinput,   ip_ctloutput,
104  udp_usrreq,
105  udp_init
106},
107{ SOCK_STREAM,  &inetdomain,    IPPROTO_TCP,
108        PR_CONNREQUIRED|PR_IMPLOPCL|PR_WANTRCVD,
109  tcp_input,    0,              tcp_ctlinput,   tcp_ctloutput,
110  0,
111  tcp_init,     tcp_fasttimo,   tcp_slowtimo,   tcp_drain,
112  &tcp_usrreqs
113},
114{ SOCK_RAW,     &inetdomain,    IPPROTO_RAW,    PR_ATOMIC|PR_ADDR,
115  rip_input,    0,              0,              rip_ctloutput,
116  rip_usrreq,
117  0,            0,              0,              0,
118},
119{ SOCK_RAW,     &inetdomain,    IPPROTO_ICMP,   PR_ATOMIC|PR_ADDR,
120  icmp_input,   0,              0,              rip_ctloutput,
121  rip_usrreq
122},
123{ SOCK_RAW,     &inetdomain,    IPPROTO_IGMP,   PR_ATOMIC|PR_ADDR,
124  igmp_input,   0,              0,              rip_ctloutput,
125  rip_usrreq,
126  igmp_init,    igmp_fasttimo,  igmp_slowtimo
127},
128{ SOCK_RAW,     &inetdomain,    IPPROTO_RSVP,   PR_ATOMIC|PR_ADDR,
129  rsvp_input,   0,              0,              rip_ctloutput,
130  rip_usrreq,
131  0,            0,              0,              0,
132},
133{ SOCK_RAW,     &inetdomain,    IPPROTO_IPIP,   PR_ATOMIC|PR_ADDR,
134  ipip_input,   0,              0,              rip_ctloutput,
135  rip_usrreq,
136  0,            0,              0,              0,
137},
138#ifdef IPDIVERT
139{ SOCK_RAW,     &inetdomain,    IPPROTO_DIVERT, PR_ATOMIC|PR_ADDR,
140  div_input,    0,              0,              ip_ctloutput,
141  div_usrreq,
142  div_init,     0,              0,              0,
143},
144#endif
145#ifdef TPIP
146{ SOCK_SEQPACKET,&inetdomain,   IPPROTO_TP,     PR_CONNREQUIRED|PR_WANTRCVD,
147  tpip_input,   0,              tpip_ctlinput,  tp_ctloutput,
148  tp_usrreq,
149  tp_init,      0,              tp_slowtimo,    tp_drain,
150},
151#endif
152/* EON (ISO CLNL over IP) */
153#ifdef EON
154{ SOCK_RAW,     &inetdomain,    IPPROTO_EON,    0,
155  eoninput,     0,              eonctlinput,            0,
156  0,
157  eonprotoinit, 0,              0,              0,
158},
159#endif
160#ifdef IPXIP
161{ SOCK_RAW,     &inetdomain,    IPPROTO_IDP,    PR_ATOMIC|PR_ADDR,
162  ipxip_input,  0,              ipxip_ctlinput, 0,
163  rip_usrreq,
164  0,            0,              0,              0,
165},
166#endif
167#ifdef NSIP
168{ SOCK_RAW,     &inetdomain,    IPPROTO_IDP,    PR_ATOMIC|PR_ADDR,
169  idpip_input,  0,              nsip_ctlinput,  0,
170  rip_usrreq,
171  0,            0,              0,              0,
172},
173#endif
174        /* raw wildcard */
175{ SOCK_RAW,     &inetdomain,    0,              PR_ATOMIC|PR_ADDR,
176  rip_input,    0,              0,              rip_ctloutput,
177  rip_usrreq,
178  rip_init,     0,              0,              0,
179},
180};
181
182extern int in_inithead(void **, int);
183
184struct domain inetdomain =
185    { AF_INET, "internet", 0, 0, 0, 
186      inetsw, &inetsw[sizeof(inetsw)/sizeof(inetsw[0])], 0,
187      in_inithead, 32, sizeof(struct sockaddr_in)
188    };
189
190DOMAIN_SET(inet);
191
192SYSCTL_NODE(_net,      PF_INET,         inet,   CTLFLAG_RW, 0,
193        "Internet Family");
194
195SYSCTL_NODE(_net_inet, IPPROTO_IP,      ip,     CTLFLAG_RW, 0,  "IP");
196SYSCTL_NODE(_net_inet, IPPROTO_ICMP,    icmp,   CTLFLAG_RW, 0,  "ICMP");
197SYSCTL_NODE(_net_inet, IPPROTO_UDP,     udp,    CTLFLAG_RW, 0,  "UDP");
198SYSCTL_NODE(_net_inet, IPPROTO_TCP,     tcp,    CTLFLAG_RW, 0,  "TCP");
199SYSCTL_NODE(_net_inet, IPPROTO_IGMP,    igmp,   CTLFLAG_RW, 0,  "IGMP");
200#ifdef IPDIVERT
201SYSCTL_NODE(_net_inet, IPPROTO_DIVERT,  div,    CTLFLAG_RW, 0,  "DIVERT");
202#endif
Note: See TracBrowser for help on using the repository browser.