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