in_proto.c revision 1.5 1 /*
2 * Copyright (c) 1982, 1986 Regents of the University of California.
3 * 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 * from: @(#)in_proto.c 7.5 (Berkeley) 6/28/90
34 * $Id: in_proto.c,v 1.5 1993/12/18 00:41:54 mycroft Exp $
35 */
36
37 #include <sys/param.h>
38 #include <sys/socket.h>
39 #include <sys/protosw.h>
40 #include <sys/domain.h>
41 #include <sys/mbuf.h>
42
43 #include <netinet/in.h>
44 #include <netinet/in_systm.h>
45
46 /*
47 * TCP/IP protocol family: IP, ICMP, UDP, TCP.
48 */
49 int ip_output(),ip_ctloutput();
50 int ip_init(),ip_slowtimo(),ip_drain();
51 int icmp_input();
52 #ifdef MULTICAST
53 int igmp_init(), igmp_input(), igmp_fasttimo();
54 #endif
55 int udp_input(),udp_ctlinput();
56 int udp_usrreq();
57 int udp_init();
58 int tcp_input(),tcp_ctlinput();
59 int tcp_usrreq(),tcp_ctloutput();
60 int tcp_init(),tcp_fasttimo(),tcp_slowtimo(),tcp_drain();
61 int rip_input(),rip_output(),rip_ctloutput(), rip_usrreq();
62 /*
63 * IMP protocol family: raw interface.
64 * Using the raw interface entry to get the timer routine
65 * in is a kludge.
66 */
67 #ifdef IMP
68 int rimp_output(), hostslowtimo();
69 #endif
70
71 #ifdef NSIP
72 int idpip_input(), nsip_ctlinput();
73 #endif
74
75 #ifdef TPIP
76 int tpip_input(), tpip_ctlinput(), tp_ctloutput(), tp_usrreq();
77 int tp_init(), tp_slowtimo(), tp_drain();
78 #endif
79
80 #ifdef EON
81 int eoninput(), eonctlinput(), eonprotoinit();
82 #endif EON
83
84 extern struct domain inetdomain;
85
86 struct protosw inetsw[] = {
87 { 0, &inetdomain, 0, 0,
88 0, ip_output, 0, 0,
89 0,
90 ip_init, 0, ip_slowtimo, ip_drain,
91 },
92 { SOCK_DGRAM, &inetdomain, IPPROTO_UDP, PR_ATOMIC|PR_ADDR,
93 udp_input, 0, udp_ctlinput, ip_ctloutput,
94 udp_usrreq,
95 udp_init, 0, 0, 0,
96 },
97 { SOCK_STREAM, &inetdomain, IPPROTO_TCP, PR_CONNREQUIRED|PR_WANTRCVD,
98 tcp_input, 0, tcp_ctlinput, tcp_ctloutput,
99 tcp_usrreq,
100 tcp_init, tcp_fasttimo, tcp_slowtimo, tcp_drain,
101 },
102 { SOCK_RAW, &inetdomain, IPPROTO_RAW, PR_ATOMIC|PR_ADDR,
103 rip_input, rip_output, 0, rip_ctloutput,
104 rip_usrreq,
105 0, 0, 0, 0,
106 },
107 { SOCK_RAW, &inetdomain, IPPROTO_ICMP, PR_ATOMIC|PR_ADDR,
108 icmp_input, rip_output, 0, rip_ctloutput,
109 rip_usrreq,
110 0, 0, 0, 0,
111 },
112 #ifdef TPIP
113 { SOCK_SEQPACKET,&inetdomain, IPPROTO_TP, PR_CONNREQUIRED|PR_WANTRCVD,
114 tpip_input, 0, tpip_ctlinput, tp_ctloutput,
115 tp_usrreq,
116 tp_init, 0, tp_slowtimo, tp_drain,
117 },
118 #endif
119 /* EON (ISO CLNL over IP) */
120 #ifdef EON
121 { SOCK_RAW, &inetdomain, IPPROTO_EON, 0,
122 eoninput, 0, eonctlinput, 0,
123 0,
124 eonprotoinit, 0, 0, 0,
125 },
126 #endif
127 #ifdef MULTICAST
128 { SOCK_RAW, &inetdomain, IPPROTO_IGMP, PR_ATOMIC|PR_ADDR,
129 igmp_input, rip_output, 0, rip_ctloutput,
130 rip_usrreq,
131 igmp_init, igmp_fasttimo, 0, 0,
132 },
133 #endif
134 #ifdef NSIP
135 { SOCK_RAW, &inetdomain, IPPROTO_IDP, PR_ATOMIC|PR_ADDR,
136 idpip_input, rip_output, nsip_ctlinput, 0,
137 rip_usrreq,
138 0, 0, 0, 0,
139 },
140 #endif
141 /* raw wildcard */
142 { SOCK_RAW, &inetdomain, 0, PR_ATOMIC|PR_ADDR,
143 rip_input, rip_output, 0, rip_ctloutput,
144 rip_usrreq,
145 0, 0, 0, 0,
146 },
147 };
148
149 struct domain inetdomain =
150 { AF_INET, "internet", 0, 0, 0,
151 inetsw, &inetsw[sizeof(inetsw)/sizeof(inetsw[0])] };
152
153 #if NIMP > 0
154 extern struct domain impdomain;
155
156 struct protosw impsw[] = {
157 { SOCK_RAW, &impdomain, 0, PR_ATOMIC|PR_ADDR,
158 0, rimp_output, 0, 0,
159 rip_usrreq,
160 0, 0, hostslowtimo, 0,
161 },
162 };
163
164 struct domain impdomain =
165 { AF_IMPLINK, "imp", 0, 0, 0,
166 impsw, &impsw[sizeof (impsw)/sizeof(impsw[0])] };
167 #endif
168
169