in6_proto.c revision 1.1.2.3 1 1.1.2.1 itojun /*
2 1.1.2.1 itojun * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
3 1.1.2.1 itojun * All rights reserved.
4 1.1.2.1 itojun *
5 1.1.2.1 itojun * Redistribution and use in source and binary forms, with or without
6 1.1.2.1 itojun * modification, are permitted provided that the following conditions
7 1.1.2.1 itojun * are met:
8 1.1.2.1 itojun * 1. Redistributions of source code must retain the above copyright
9 1.1.2.1 itojun * notice, this list of conditions and the following disclaimer.
10 1.1.2.1 itojun * 2. Redistributions in binary form must reproduce the above copyright
11 1.1.2.1 itojun * notice, this list of conditions and the following disclaimer in the
12 1.1.2.1 itojun * documentation and/or other materials provided with the distribution.
13 1.1.2.1 itojun * 3. Neither the name of the project nor the names of its contributors
14 1.1.2.1 itojun * may be used to endorse or promote products derived from this software
15 1.1.2.1 itojun * without specific prior written permission.
16 1.1.2.1 itojun *
17 1.1.2.1 itojun * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
18 1.1.2.1 itojun * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 1.1.2.1 itojun * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 1.1.2.1 itojun * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
21 1.1.2.1 itojun * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 1.1.2.1 itojun * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 1.1.2.1 itojun * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 1.1.2.1 itojun * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 1.1.2.1 itojun * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 1.1.2.1 itojun * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 1.1.2.1 itojun * SUCH DAMAGE.
28 1.1.2.1 itojun */
29 1.1.2.1 itojun
30 1.1.2.1 itojun /*
31 1.1.2.1 itojun * Copyright (c) 1982, 1986, 1993
32 1.1.2.1 itojun * The Regents of the University of California. All rights reserved.
33 1.1.2.1 itojun *
34 1.1.2.1 itojun * Redistribution and use in source and binary forms, with or without
35 1.1.2.1 itojun * modification, are permitted provided that the following conditions
36 1.1.2.1 itojun * are met:
37 1.1.2.1 itojun * 1. Redistributions of source code must retain the above copyright
38 1.1.2.1 itojun * notice, this list of conditions and the following disclaimer.
39 1.1.2.1 itojun * 2. Redistributions in binary form must reproduce the above copyright
40 1.1.2.1 itojun * notice, this list of conditions and the following disclaimer in the
41 1.1.2.1 itojun * documentation and/or other materials provided with the distribution.
42 1.1.2.1 itojun * 3. All advertising materials mentioning features or use of this software
43 1.1.2.1 itojun * must display the following acknowledgement:
44 1.1.2.1 itojun * This product includes software developed by the University of
45 1.1.2.1 itojun * California, Berkeley and its contributors.
46 1.1.2.1 itojun * 4. Neither the name of the University nor the names of its contributors
47 1.1.2.1 itojun * may be used to endorse or promote products derived from this software
48 1.1.2.1 itojun * without specific prior written permission.
49 1.1.2.1 itojun *
50 1.1.2.1 itojun * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
51 1.1.2.1 itojun * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
52 1.1.2.1 itojun * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
53 1.1.2.1 itojun * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
54 1.1.2.1 itojun * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
55 1.1.2.1 itojun * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
56 1.1.2.1 itojun * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
57 1.1.2.1 itojun * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
58 1.1.2.1 itojun * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
59 1.1.2.1 itojun * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
60 1.1.2.1 itojun * SUCH DAMAGE.
61 1.1.2.1 itojun *
62 1.1.2.1 itojun * @(#)in_proto.c 8.1 (Berkeley) 6/10/93
63 1.1.2.1 itojun */
64 1.1.2.1 itojun
65 1.1.2.1 itojun #if (defined(__FreeBSD__) && __FreeBSD__ >= 3) || defined(__NetBSD__)
66 1.1.2.1 itojun #include "opt_inet.h"
67 1.1.2.3 itojun #ifdef __NetBSD__ /*XXX*/
68 1.1.2.3 itojun #include "opt_ipsec.h"
69 1.1.2.3 itojun #endif
70 1.1.2.1 itojun #endif
71 1.1.2.1 itojun
72 1.1.2.1 itojun #include <sys/param.h>
73 1.1.2.1 itojun #include <sys/socket.h>
74 1.1.2.3 itojun #if defined(__FreeBSD__)
75 1.1.2.3 itojun #include <sys/socketvar.h>
76 1.1.2.3 itojun #endif
77 1.1.2.1 itojun #include <sys/protosw.h>
78 1.1.2.1 itojun #include <sys/kernel.h>
79 1.1.2.1 itojun #include <sys/domain.h>
80 1.1.2.1 itojun #include <sys/mbuf.h>
81 1.1.2.3 itojun #ifdef __FreeBSD__
82 1.1.2.3 itojun #include <sys/systm.h>
83 1.1.2.3 itojun #include <sys/sysctl.h>
84 1.1.2.3 itojun #endif
85 1.1.2.1 itojun
86 1.1.2.1 itojun #include <net/if.h>
87 1.1.2.1 itojun #include <net/radix.h>
88 1.1.2.1 itojun #include <net/route.h>
89 1.1.2.1 itojun
90 1.1.2.1 itojun #include <netinet/in.h>
91 1.1.2.1 itojun #include <netinet/in_systm.h>
92 1.1.2.1 itojun #include <netinet/in_var.h>
93 1.1.2.3 itojun #if (defined(__FreeBSD__) && __FreeBSD__ >= 3) || (defined(__NetBSD__) && !defined(TCP6)) || defined(__OpenBSD__) || (defined(__bsdi__) && _BSDI_VERSION >= 199802)
94 1.1.2.1 itojun #include <netinet/ip.h>
95 1.1.2.1 itojun #include <netinet/ip_var.h>
96 1.1.2.1 itojun #endif
97 1.1.2.3 itojun #if (defined(__NetBSD__) && !defined(TCP6)) || defined(__OpenBSD__) || (defined(__bsdi__) && _BSDI_VERSION >= 199802)
98 1.1.2.1 itojun #include <netinet/in_pcb.h>
99 1.1.2.1 itojun #endif
100 1.1.2.1 itojun #include <netinet6/ip6.h>
101 1.1.2.1 itojun #include <netinet6/ip6_var.h>
102 1.1.2.1 itojun #include <netinet6/icmp6.h>
103 1.1.2.3 itojun #if !(defined(__FreeBSD__) && __FreeBSD__ >= 3) && !defined(__OpenBSD__) && !(defined(__bsdi__) && _BSDI_VERSION >= 199802)
104 1.1.2.1 itojun #include <netinet6/in6_pcb.h>
105 1.1.2.1 itojun #endif
106 1.1.2.1 itojun
107 1.1.2.3 itojun #if (defined(__FreeBSD__) && __FreeBSD__ >= 3) || defined(__OpenBSD__) || (defined(__bsdi__) && _BSDI_VERSION >= 199802)
108 1.1.2.1 itojun #include <netinet/tcp.h>
109 1.1.2.1 itojun #include <netinet/tcp_timer.h>
110 1.1.2.1 itojun #include <netinet/tcp_var.h>
111 1.1.2.1 itojun #include <netinet/udp.h>
112 1.1.2.1 itojun #include <netinet/udp_var.h>
113 1.1.2.1 itojun #else
114 1.1.2.1 itojun #if defined(__NetBSD__) && !defined(TCP6)
115 1.1.2.1 itojun #include <netinet/tcp.h>
116 1.1.2.1 itojun #include <netinet/tcp_fsm.h>
117 1.1.2.1 itojun #include <netinet/tcp_seq.h>
118 1.1.2.1 itojun #include <netinet/tcp_timer.h>
119 1.1.2.1 itojun #include <netinet/tcp_var.h>
120 1.1.2.1 itojun #include <netinet/tcpip.h>
121 1.1.2.1 itojun #include <netinet/tcp_debug.h>
122 1.1.2.1 itojun #else
123 1.1.2.1 itojun #include <netinet6/tcp6.h>
124 1.1.2.1 itojun #include <netinet6/tcp6_fsm.h>
125 1.1.2.1 itojun #include <netinet6/tcp6_seq.h>
126 1.1.2.1 itojun #include <netinet6/tcp6_timer.h>
127 1.1.2.1 itojun #include <netinet6/tcp6_var.h>
128 1.1.2.1 itojun #endif
129 1.1.2.1 itojun #endif
130 1.1.2.1 itojun
131 1.1.2.3 itojun #if !defined(__OpenBSD__) && !(defined(__bsdi__) && _BSDI_VERSION >= 199802)
132 1.1.2.1 itojun #include <netinet6/udp6.h>
133 1.1.2.1 itojun #include <netinet6/udp6_var.h>
134 1.1.2.3 itojun #endif
135 1.1.2.1 itojun
136 1.1.2.1 itojun #include <netinet6/pim6_var.h>
137 1.1.2.1 itojun
138 1.1.2.1 itojun #include <netinet6/nd6.h>
139 1.1.2.3 itojun #ifdef __FreeBSD__
140 1.1.2.3 itojun #include <netinet6/in6_prefix.h>
141 1.1.2.3 itojun #endif
142 1.1.2.3 itojun
143 1.1.2.3 itojun #ifdef __OpenBSD__ /*KAME IPSEC*/
144 1.1.2.3 itojun #undef IPSEC
145 1.1.2.3 itojun #endif
146 1.1.2.1 itojun
147 1.1.2.1 itojun #ifdef IPSEC
148 1.1.2.3 itojun #include <netinet6/ipsec.h>
149 1.1.2.1 itojun #include <netinet6/ah.h>
150 1.1.2.1 itojun #ifdef IPSEC_ESP
151 1.1.2.1 itojun #include <netinet6/esp.h>
152 1.1.2.1 itojun #endif
153 1.1.2.1 itojun #include <netinet6/ipcomp.h>
154 1.1.2.1 itojun #endif /*IPSEC*/
155 1.1.2.1 itojun
156 1.1.2.1 itojun #include <netinet6/ip6protosw.h>
157 1.1.2.1 itojun
158 1.1.2.1 itojun #include "gif.h"
159 1.1.2.1 itojun #if NGIF > 0
160 1.1.2.1 itojun #include <netinet6/in6_gif.h>
161 1.1.2.1 itojun #endif
162 1.1.2.1 itojun
163 1.1.2.3 itojun #include <net/net_osdep.h>
164 1.1.2.3 itojun
165 1.1.2.1 itojun #define offsetof(type, member) ((size_t)(&((type *)0)->member))
166 1.1.2.1 itojun
167 1.1.2.1 itojun /*
168 1.1.2.1 itojun * TCP/IP protocol family: IP6, ICMP6, UDP, TCP.
169 1.1.2.1 itojun */
170 1.1.2.1 itojun
171 1.1.2.1 itojun extern struct domain inet6domain;
172 1.1.2.3 itojun #if defined(__FreeBSD__) && __FreeBSD__ >= 3
173 1.1.2.3 itojun static struct pr_usrreqs nousrreqs;
174 1.1.2.3 itojun #endif
175 1.1.2.1 itojun
176 1.1.2.1 itojun struct ip6protosw inet6sw[] = {
177 1.1.2.1 itojun { 0, &inet6domain, IPPROTO_IPV6, 0,
178 1.1.2.1 itojun 0, 0, 0, 0,
179 1.1.2.1 itojun 0,
180 1.1.2.3 itojun ip6_init, 0, frag6_slowtimo, frag6_drain,
181 1.1.2.3 itojun #ifndef __FreeBSD__
182 1.1.2.3 itojun ip6_sysctl,
183 1.1.2.3 itojun #else
184 1.1.2.3 itojun # if __FreeBSD__ >= 3
185 1.1.2.3 itojun &nousrreqs,
186 1.1.2.3 itojun # endif
187 1.1.2.3 itojun #endif
188 1.1.2.1 itojun },
189 1.1.2.1 itojun { SOCK_DGRAM, &inet6domain, IPPROTO_UDP, PR_ATOMIC | PR_ADDR,
190 1.1.2.1 itojun udp6_input, 0, udp6_ctlinput, ip6_ctloutput,
191 1.1.2.3 itojun #if defined(__FreeBSD__) && __FreeBSD__ >= 3
192 1.1.2.3 itojun 0, 0,
193 1.1.2.3 itojun #elif defined(HAVE_NRL_INPCB)
194 1.1.2.3 itojun udp6_usrreq, 0,
195 1.1.2.3 itojun #else
196 1.1.2.3 itojun udp6_usrreq, udp6_init,
197 1.1.2.3 itojun #endif
198 1.1.2.3 itojun 0, 0, 0,
199 1.1.2.3 itojun #ifndef __FreeBSD__
200 1.1.2.3 itojun #ifdef HAVE_NRL_INPCB
201 1.1.2.3 itojun udp_sysctl,
202 1.1.2.3 itojun #else
203 1.1.2.3 itojun udp6_sysctl,
204 1.1.2.3 itojun #endif
205 1.1.2.3 itojun #else
206 1.1.2.3 itojun # if __FreeBSD__ >= 3
207 1.1.2.3 itojun &udp6_usrreqs,
208 1.1.2.3 itojun # endif
209 1.1.2.3 itojun #endif
210 1.1.2.1 itojun },
211 1.1.2.1 itojun #ifdef TCP6
212 1.1.2.1 itojun { SOCK_STREAM, &inet6domain, IPPROTO_TCP, PR_CONNREQUIRED | PR_WANTRCVD,
213 1.1.2.1 itojun tcp6_input, 0, tcp6_ctlinput, tcp6_ctloutput,
214 1.1.2.1 itojun tcp6_usrreq,
215 1.1.2.3 itojun tcp6_init, tcp6_fasttimo, tcp6_slowtimo, tcp6_drain,
216 1.1.2.3 itojun #ifndef __FreeBSD__
217 1.1.2.3 itojun tcp6_sysctl,
218 1.1.2.3 itojun #else
219 1.1.2.3 itojun # if __FreeBSD__ >= 3
220 1.1.2.3 itojun &tcp6_usrreqs,
221 1.1.2.3 itojun # endif
222 1.1.2.3 itojun #endif
223 1.1.2.1 itojun },
224 1.1.2.1 itojun #else
225 1.1.2.1 itojun { SOCK_STREAM, &inet6domain, IPPROTO_TCP, PR_CONNREQUIRED | PR_WANTRCVD,
226 1.1.2.1 itojun tcp6_input, 0, tcp6_ctlinput, tcp_ctloutput,
227 1.1.2.3 itojun #if defined(__FreeBSD__) && __FreeBSD__ >= 3
228 1.1.2.3 itojun 0,
229 1.1.2.3 itojun #elif defined(HAVE_NRL_INPCB)
230 1.1.2.3 itojun tcp6_usrreq,
231 1.1.2.3 itojun #else
232 1.1.2.1 itojun tcp_usrreq,
233 1.1.2.1 itojun #endif
234 1.1.2.3 itojun #ifdef INET /* don't call timeout routines twice */
235 1.1.2.3 itojun tcp_init, 0, 0, tcp_drain,
236 1.1.2.3 itojun #else
237 1.1.2.3 itojun tcp_init, tcp_fasttimo, tcp_slowtimo, tcp_drain,
238 1.1.2.3 itojun #endif
239 1.1.2.3 itojun #ifndef __FreeBSD__
240 1.1.2.3 itojun tcp_sysctl,
241 1.1.2.3 itojun #else
242 1.1.2.3 itojun # if __FreeBSD__ >= 3
243 1.1.2.3 itojun &tcp6_usrreqs,
244 1.1.2.3 itojun # endif
245 1.1.2.3 itojun #endif
246 1.1.2.3 itojun },
247 1.1.2.3 itojun #endif /*TCP6*/
248 1.1.2.1 itojun { SOCK_RAW, &inet6domain, IPPROTO_RAW, PR_ATOMIC | PR_ADDR,
249 1.1.2.1 itojun rip6_input, rip6_output, 0, rip6_ctloutput,
250 1.1.2.3 itojun #if defined(__FreeBSD__) && __FreeBSD__ >= 3
251 1.1.2.3 itojun 0,
252 1.1.2.3 itojun #else
253 1.1.2.1 itojun rip6_usrreq,
254 1.1.2.3 itojun #endif
255 1.1.2.3 itojun 0, 0, 0, 0,
256 1.1.2.3 itojun #if defined(__FreeBSD__) && __FreeBSD__ >= 3
257 1.1.2.3 itojun &rip6_usrreqs
258 1.1.2.3 itojun #endif
259 1.1.2.1 itojun },
260 1.1.2.1 itojun { SOCK_RAW, &inet6domain, IPPROTO_ICMPV6, PR_ATOMIC | PR_ADDR,
261 1.1.2.1 itojun icmp6_input, rip6_output, 0, rip6_ctloutput,
262 1.1.2.3 itojun #if defined(__FreeBSD__) && __FreeBSD__ >= 3
263 1.1.2.3 itojun 0,
264 1.1.2.3 itojun #else
265 1.1.2.1 itojun rip6_usrreq,
266 1.1.2.3 itojun #endif
267 1.1.2.3 itojun icmp6_init, icmp6_fasttimo, 0, 0,
268 1.1.2.3 itojun #ifndef __FreeBSD__
269 1.1.2.3 itojun icmp6_sysctl,
270 1.1.2.3 itojun #else
271 1.1.2.3 itojun # if __FreeBSD__ >= 3
272 1.1.2.3 itojun &rip6_usrreqs
273 1.1.2.3 itojun # endif
274 1.1.2.3 itojun #endif
275 1.1.2.1 itojun },
276 1.1.2.1 itojun { SOCK_RAW, &inet6domain, IPPROTO_DSTOPTS,PR_ATOMIC|PR_ADDR,
277 1.1.2.1 itojun dest6_input, 0, 0, 0,
278 1.1.2.1 itojun 0,
279 1.1.2.1 itojun 0, 0, 0, 0,
280 1.1.2.3 itojun #if defined(__FreeBSD__) && __FreeBSD__ >= 3
281 1.1.2.3 itojun &nousrreqs
282 1.1.2.3 itojun #endif
283 1.1.2.1 itojun },
284 1.1.2.1 itojun { SOCK_RAW, &inet6domain, IPPROTO_ROUTING,PR_ATOMIC|PR_ADDR,
285 1.1.2.1 itojun route6_input, 0, 0, 0,
286 1.1.2.1 itojun 0,
287 1.1.2.1 itojun 0, 0, 0, 0,
288 1.1.2.3 itojun #if defined(__FreeBSD__) && __FreeBSD__ >= 3
289 1.1.2.3 itojun &nousrreqs
290 1.1.2.3 itojun #endif
291 1.1.2.1 itojun },
292 1.1.2.1 itojun { SOCK_RAW, &inet6domain, IPPROTO_FRAGMENT,PR_ATOMIC|PR_ADDR,
293 1.1.2.1 itojun frag6_input, 0, 0, 0,
294 1.1.2.1 itojun 0,
295 1.1.2.1 itojun 0, 0, 0, 0,
296 1.1.2.3 itojun #if defined(__FreeBSD__) && __FreeBSD__ >= 3
297 1.1.2.3 itojun &nousrreqs
298 1.1.2.3 itojun #endif
299 1.1.2.1 itojun },
300 1.1.2.1 itojun #ifdef IPSEC
301 1.1.2.1 itojun { SOCK_RAW, &inet6domain, IPPROTO_AH, PR_ATOMIC|PR_ADDR,
302 1.1.2.1 itojun ah6_input, 0, 0, 0,
303 1.1.2.1 itojun 0,
304 1.1.2.3 itojun 0, 0, 0, 0,
305 1.1.2.3 itojun #ifndef __FreeBSD__
306 1.1.2.3 itojun ipsec6_sysctl,
307 1.1.2.3 itojun #else
308 1.1.2.3 itojun # if __FreeBSD__ >= 3
309 1.1.2.3 itojun &nousrreqs,
310 1.1.2.3 itojun # endif
311 1.1.2.3 itojun #endif
312 1.1.2.1 itojun },
313 1.1.2.1 itojun #ifdef IPSEC_ESP
314 1.1.2.1 itojun { SOCK_RAW, &inet6domain, IPPROTO_ESP, PR_ATOMIC|PR_ADDR,
315 1.1.2.1 itojun esp6_input, 0, 0, 0,
316 1.1.2.1 itojun 0,
317 1.1.2.3 itojun 0, 0, 0, 0,
318 1.1.2.3 itojun #ifndef __FreeBSD__
319 1.1.2.3 itojun ipsec6_sysctl,
320 1.1.2.3 itojun #else
321 1.1.2.3 itojun # if __FreeBSD__ >= 3
322 1.1.2.3 itojun &nousrreqs,
323 1.1.2.3 itojun # endif
324 1.1.2.3 itojun #endif
325 1.1.2.1 itojun },
326 1.1.2.1 itojun #endif
327 1.1.2.1 itojun { SOCK_RAW, &inet6domain, IPPROTO_IPCOMP, PR_ATOMIC|PR_ADDR,
328 1.1.2.1 itojun ipcomp6_input, 0, 0, 0,
329 1.1.2.1 itojun 0,
330 1.1.2.3 itojun 0, 0, 0, 0,
331 1.1.2.3 itojun #ifndef __FreeBSD__
332 1.1.2.3 itojun ipsec6_sysctl,
333 1.1.2.3 itojun #else
334 1.1.2.3 itojun # if __FreeBSD__ >= 3
335 1.1.2.3 itojun &nousrreqs,
336 1.1.2.3 itojun # endif
337 1.1.2.3 itojun #endif
338 1.1.2.1 itojun },
339 1.1.2.1 itojun #endif /* IPSEC */
340 1.1.2.1 itojun #if NGIF > 0
341 1.1.2.1 itojun { SOCK_RAW, &inet6domain, IPPROTO_IPV4, PR_ATOMIC|PR_ADDR,
342 1.1.2.1 itojun in6_gif_input,0, 0, 0,
343 1.1.2.1 itojun 0,
344 1.1.2.1 itojun 0, 0, 0, 0,
345 1.1.2.3 itojun #if defined(__FreeBSD__) && __FreeBSD__ >= 3
346 1.1.2.3 itojun &nousrreqs
347 1.1.2.3 itojun #endif
348 1.1.2.1 itojun },
349 1.1.2.1 itojun #ifdef INET6
350 1.1.2.1 itojun { SOCK_RAW, &inet6domain, IPPROTO_IPV6, PR_ATOMIC|PR_ADDR,
351 1.1.2.1 itojun in6_gif_input,0, 0, 0,
352 1.1.2.1 itojun 0,
353 1.1.2.1 itojun 0, 0, 0, 0,
354 1.1.2.3 itojun #if defined(__FreeBSD__) && __FreeBSD__ >= 3
355 1.1.2.3 itojun &nousrreqs
356 1.1.2.3 itojun #endif
357 1.1.2.1 itojun },
358 1.1.2.1 itojun #endif /* INET6 */
359 1.1.2.1 itojun #endif /* GIF */
360 1.1.2.1 itojun { SOCK_RAW, &inet6domain, IPPROTO_PIM, PR_ATOMIC|PR_ADDR,
361 1.1.2.1 itojun pim6_input, rip6_output, 0, rip6_ctloutput,
362 1.1.2.3 itojun #if defined(__FreeBSD__) && __FreeBSD__ >= 3
363 1.1.2.3 itojun 0,
364 1.1.2.3 itojun #else
365 1.1.2.1 itojun rip6_usrreq,
366 1.1.2.3 itojun #endif
367 1.1.2.1 itojun 0, 0, 0, 0,
368 1.1.2.3 itojun #if defined(__FreeBSD__) && __FreeBSD__ >= 3
369 1.1.2.3 itojun &rip6_usrreqs
370 1.1.2.3 itojun # endif
371 1.1.2.1 itojun },
372 1.1.2.1 itojun /* raw wildcard */
373 1.1.2.1 itojun { SOCK_RAW, &inet6domain, 0, PR_ATOMIC | PR_ADDR,
374 1.1.2.1 itojun rip6_input, rip6_output, 0, rip6_ctloutput,
375 1.1.2.3 itojun #if defined(__FreeBSD__) && __FreeBSD__ >= 3
376 1.1.2.3 itojun 0, 0,
377 1.1.2.3 itojun #else
378 1.1.2.3 itojun rip6_usrreq, rip6_init,
379 1.1.2.3 itojun #endif
380 1.1.2.3 itojun 0, 0, 0,
381 1.1.2.3 itojun #if defined(__FreeBSD__) && __FreeBSD__ >= 3
382 1.1.2.3 itojun &rip6_usrreqs
383 1.1.2.3 itojun #endif
384 1.1.2.1 itojun },
385 1.1.2.1 itojun };
386 1.1.2.1 itojun
387 1.1.2.3 itojun #ifdef __FreeBSD__
388 1.1.2.3 itojun extern int in6_inithead __P((void **, int));
389 1.1.2.3 itojun #endif
390 1.1.2.3 itojun
391 1.1.2.1 itojun struct domain inet6domain =
392 1.1.2.1 itojun { AF_INET6, "internet6", 0, 0, 0,
393 1.1.2.1 itojun (struct protosw *)inet6sw,
394 1.1.2.1 itojun (struct protosw *)&inet6sw[sizeof(inet6sw)/sizeof(inet6sw[0])], 0,
395 1.1.2.3 itojun #ifdef __FreeBSD__
396 1.1.2.3 itojun in6_inithead,
397 1.1.2.3 itojun #else
398 1.1.2.3 itojun rn_inithead,
399 1.1.2.3 itojun #endif
400 1.1.2.3 itojun offsetof(struct sockaddr_in6, sin6_addr) << 3,
401 1.1.2.1 itojun sizeof(struct sockaddr_in6) };
402 1.1.2.1 itojun
403 1.1.2.1 itojun #ifdef __FreeBSD__
404 1.1.2.1 itojun DOMAIN_SET(inet6);
405 1.1.2.1 itojun #endif
406 1.1.2.1 itojun
407 1.1.2.1 itojun /*
408 1.1.2.1 itojun * Internet configuration info
409 1.1.2.1 itojun */
410 1.1.2.1 itojun #ifndef IPV6FORWARDING
411 1.1.2.1 itojun #ifdef GATEWAY6
412 1.1.2.1 itojun #define IPV6FORWARDING 1 /* forward IP6 packets not for us */
413 1.1.2.1 itojun #else
414 1.1.2.1 itojun #define IPV6FORWARDING 0 /* don't forward IP6 packets not for us */
415 1.1.2.1 itojun #endif /* GATEWAY6 */
416 1.1.2.1 itojun #endif /* !IPV6FORWARDING */
417 1.1.2.1 itojun
418 1.1.2.1 itojun #ifndef IPV6_SENDREDIRECTS
419 1.1.2.1 itojun #define IPV6_SENDREDIRECTS 1
420 1.1.2.1 itojun #endif
421 1.1.2.1 itojun
422 1.1.2.1 itojun int ip6_forwarding = IPV6FORWARDING; /* act as router? */
423 1.1.2.1 itojun int ip6_sendredirects = IPV6_SENDREDIRECTS;
424 1.1.2.1 itojun int ip6_defhlim = IPV6_DEFHLIM;
425 1.1.2.1 itojun int ip6_defmcasthlim = IPV6_DEFAULT_MULTICAST_HOPS;
426 1.1.2.1 itojun int ip6_accept_rtadv = 0; /* "IPV6FORWARDING ? 0 : 1" is dangerous */
427 1.1.2.1 itojun int ip6_maxfragpackets = 200;
428 1.1.2.1 itojun int ip6_log_interval = 5;
429 1.1.2.1 itojun int ip6_hdrnestlimit = 50; /* appropriate? */
430 1.1.2.1 itojun int ip6_dad_count = 1; /* DupAddrDetectionTransmits */
431 1.1.2.1 itojun u_int32_t ip6_flow_seq;
432 1.1.2.1 itojun int ip6_auto_flowlabel = 1;
433 1.1.2.1 itojun #if NGIF > 0
434 1.1.2.1 itojun int ip6_gif_hlim = GIF_HLIM;
435 1.1.2.1 itojun #else
436 1.1.2.1 itojun int ip6_gif_hlim = 0;
437 1.1.2.1 itojun #endif
438 1.1.2.3 itojun int ip6_use_deprecated = 1; /* allow deprecated addr (RFC2462 5.5.4) */
439 1.1.2.3 itojun int ip6_rr_prune = 5; /* router renumbering prefix
440 1.1.2.3 itojun * walk list every 5 sec. */
441 1.1.2.3 itojun #ifdef MAPPED_ADDR_ENABLED
442 1.1.2.3 itojun int ip6_mapped_addr_on = 1;
443 1.1.2.3 itojun #endif /* MAPPED_ADDR_ENABLED */
444 1.1.2.1 itojun
445 1.1.2.3 itojun u_int32_t ip6_id = 0UL;
446 1.1.2.1 itojun int ip6_keepfaith = 0;
447 1.1.2.1 itojun time_t ip6_log_time = (time_t)0L;
448 1.1.2.1 itojun
449 1.1.2.1 itojun /* icmp6 */
450 1.1.2.3 itojun #ifndef __bsdi__
451 1.1.2.3 itojun /*
452 1.1.2.3 itojun * BSDI4 defines these variables in in_proto.c...
453 1.1.2.3 itojun * XXX: what if we don't define INET? Should we define pmtu6_expire
454 1.1.2.3 itojun * or so? (jinmei (at) kame.net 19990310)
455 1.1.2.3 itojun */
456 1.1.2.1 itojun int pmtu_expire = 60*10;
457 1.1.2.1 itojun int pmtu_probe = 60*2;
458 1.1.2.3 itojun #endif
459 1.1.2.1 itojun
460 1.1.2.1 itojun /* raw IP6 parameters */
461 1.1.2.1 itojun /*
462 1.1.2.1 itojun * Nominal space allocated to a raw ip socket.
463 1.1.2.1 itojun */
464 1.1.2.1 itojun #define RIPV6SNDQ 8192
465 1.1.2.1 itojun #define RIPV6RCVQ 8192
466 1.1.2.1 itojun
467 1.1.2.1 itojun u_long rip6_sendspace = RIPV6SNDQ;
468 1.1.2.1 itojun u_long rip6_recvspace = RIPV6RCVQ;
469 1.1.2.1 itojun
470 1.1.2.1 itojun /* ICMPV6 parameters */
471 1.1.2.1 itojun int icmp6_rediraccept = 1; /* accept and process redirects */
472 1.1.2.1 itojun int icmp6_redirtimeout = 10 * 60; /* 10 minutes */
473 1.1.2.1 itojun u_int icmp6errratelim = 1000; /* 1000usec = 1msec */
474 1.1.2.1 itojun
475 1.1.2.1 itojun #ifdef TCP6
476 1.1.2.1 itojun /* TCP on IP6 parameters */
477 1.1.2.1 itojun int tcp6_sendspace = 1024 * 8;
478 1.1.2.1 itojun int tcp6_recvspace = 1024 * 8;
479 1.1.2.1 itojun int tcp6_mssdflt = TCP6_MSS;
480 1.1.2.1 itojun int tcp6_rttdflt = TCP6TV_SRTTDFLT / PR_SLOWHZ;
481 1.1.2.1 itojun int tcp6_do_rfc1323 = 1;
482 1.1.2.1 itojun int tcp6_conntimeo = TCP6TV_KEEP_INIT; /* initial connection timeout */
483 1.1.2.1 itojun int tcp6_43maxseg = 0;
484 1.1.2.1 itojun int tcp6_pmtu = 0;
485 1.1.2.1 itojun
486 1.1.2.1 itojun /*
487 1.1.2.1 itojun * Parameters for keepalive option.
488 1.1.2.1 itojun * Connections for which SO_KEEPALIVE is set will be probed
489 1.1.2.1 itojun * after being idle for a time of tcp6_keepidle (in units of PR_SLOWHZ).
490 1.1.2.1 itojun * Starting at that time, the connection is probed at intervals
491 1.1.2.1 itojun * of tcp6_keepintvl (same units) until a response is received
492 1.1.2.1 itojun * or until tcp6_keepcnt probes have been made, at which time
493 1.1.2.1 itojun * the connection is dropped. Note that a tcp6_keepidle value
494 1.1.2.1 itojun * under 2 hours is nonconformant with RFC-1122, Internet Host Requirements.
495 1.1.2.1 itojun */
496 1.1.2.1 itojun int tcp6_keepidle = TCP6TV_KEEP_IDLE; /* time before probing idle */
497 1.1.2.1 itojun int tcp6_keepintvl = TCP6TV_KEEPINTVL; /* interval betwn idle probes */
498 1.1.2.1 itojun int tcp6_keepcnt = TCP6TV_KEEPCNT; /* max idle probes */
499 1.1.2.1 itojun int tcp6_maxpersistidle = TCP6TV_KEEP_IDLE; /* max idle time in persist */
500 1.1.2.1 itojun
501 1.1.2.1 itojun #ifndef INET_SERVER
502 1.1.2.1 itojun #define TCP6_LISTEN_HASH_SIZE 17
503 1.1.2.1 itojun #define TCP6_CONN_HASH_SIZE 97
504 1.1.2.1 itojun #define TCP6_SYN_HASH_SIZE 293
505 1.1.2.1 itojun #define TCP6_SYN_BUCKET_SIZE 35
506 1.1.2.1 itojun #else
507 1.1.2.1 itojun #define TCP6_LISTEN_HASH_SIZE 97
508 1.1.2.1 itojun #define TCP6_CONN_HASH_SIZE 9973
509 1.1.2.1 itojun #define TCP6_SYN_HASH_SIZE 997
510 1.1.2.1 itojun #define TCP6_SYN_BUCKET_SIZE 35
511 1.1.2.1 itojun #endif
512 1.1.2.1 itojun int tcp6_listen_hash_size = TCP6_LISTEN_HASH_SIZE;
513 1.1.2.1 itojun int tcp6_conn_hash_size = TCP6_CONN_HASH_SIZE;
514 1.1.2.1 itojun struct tcp6_hash_list tcp6_listen_hash[TCP6_LISTEN_HASH_SIZE],
515 1.1.2.1 itojun tcp6_conn_hash[TCP6_CONN_HASH_SIZE];
516 1.1.2.1 itojun
517 1.1.2.1 itojun int tcp6_syn_cache_size = TCP6_SYN_HASH_SIZE;
518 1.1.2.1 itojun int tcp6_syn_cache_limit = TCP6_SYN_HASH_SIZE*TCP6_SYN_BUCKET_SIZE;
519 1.1.2.1 itojun int tcp6_syn_bucket_limit = 3*TCP6_SYN_BUCKET_SIZE;
520 1.1.2.1 itojun struct syn_cache_head6 tcp6_syn_cache[TCP6_SYN_HASH_SIZE];
521 1.1.2.1 itojun struct syn_cache_head6 *tcp6_syn_cache_first;
522 1.1.2.1 itojun int tcp6_syn_cache_interval = 8; /* runs timer every 4 seconds */
523 1.1.2.1 itojun int tcp6_syn_cache_timeo = TCP6TV_KEEP_INIT;
524 1.1.2.1 itojun
525 1.1.2.1 itojun /*
526 1.1.2.1 itojun * Parameters for computing a desirable data segment size
527 1.1.2.1 itojun * given an upper bound (either interface MTU, or peer's MSS option)_.
528 1.1.2.1 itojun * As applications tend to use a buffer size that is a multiple
529 1.1.2.1 itojun * of kilobytes, try for something that divides evenly. However,
530 1.1.2.1 itojun * do not round down too much.
531 1.1.2.1 itojun *
532 1.1.2.1 itojun * Round segment size down to a multiple of TCP6_ROUNDSIZE if this
533 1.1.2.1 itojun * does not result in lowering by more than (size/TCP6_ROUNDFRAC).
534 1.1.2.1 itojun * For example, round 536 to 512. Older versions of the system
535 1.1.2.1 itojun * effectively used MCLBYTES (1K or 2K) as TCP6_ROUNDSIZE, with
536 1.1.2.1 itojun * a value of 1 for TCP6_ROUNDFRAC (eliminating its effect).
537 1.1.2.1 itojun * We round to a multiple of 256 for SLIP.
538 1.1.2.1 itojun */
539 1.1.2.1 itojun #ifndef TCP6_ROUNDSIZE
540 1.1.2.1 itojun #define TCP6_ROUNDSIZE 256 /* round to multiple of 256 */
541 1.1.2.1 itojun #endif
542 1.1.2.1 itojun #ifndef TCP6_ROUNDFRAC
543 1.1.2.1 itojun #define TCP6_ROUNDFRAC 10 /* round down at most N/10, or 10% */
544 1.1.2.1 itojun #endif
545 1.1.2.1 itojun
546 1.1.2.1 itojun int tcp6_roundsize = TCP6_ROUNDSIZE;
547 1.1.2.1 itojun int tcp6_roundfrac = TCP6_ROUNDFRAC;
548 1.1.2.1 itojun #endif /*TCP6*/
549 1.1.2.1 itojun
550 1.1.2.1 itojun /* UDP on IP6 parameters */
551 1.1.2.1 itojun int udp6_sendspace = 9216; /* really max datagram size */
552 1.1.2.1 itojun int udp6_recvspace = 40 * (1024 + sizeof(struct sockaddr_in6));
553 1.1.2.1 itojun /* 40 1K datagrams */
554 1.1.2.1 itojun
555 1.1.2.1 itojun #ifdef __FreeBSD__
556 1.1.2.1 itojun /*
557 1.1.2.1 itojun * sysctl related items.
558 1.1.2.1 itojun */
559 1.1.2.1 itojun SYSCTL_NODE(_net, PF_INET6, inet6, CTLFLAG_RW, 0,
560 1.1.2.1 itojun "Internet6 Family");
561 1.1.2.1 itojun
562 1.1.2.1 itojun /* net.inet6 */
563 1.1.2.1 itojun SYSCTL_NODE(_net_inet6, IPPROTO_IPV6, ip6, CTLFLAG_RW, 0, "IP6");
564 1.1.2.1 itojun SYSCTL_NODE(_net_inet6, IPPROTO_ICMPV6, icmp6, CTLFLAG_RW, 0, "ICMP6");
565 1.1.2.1 itojun SYSCTL_NODE(_net_inet6, IPPROTO_UDP, udp6, CTLFLAG_RW, 0, "UDP6");
566 1.1.2.1 itojun SYSCTL_NODE(_net_inet6, IPPROTO_TCP, tcp6, CTLFLAG_RW, 0, "TCP6");
567 1.1.2.1 itojun #ifdef IPSEC
568 1.1.2.1 itojun SYSCTL_NODE(_net_inet6, IPPROTO_ESP, ipsec6, CTLFLAG_RW, 0, "IPSEC6");
569 1.1.2.1 itojun #endif /* IPSEC */
570 1.1.2.1 itojun
571 1.1.2.1 itojun /* net.inet6.ip6 */
572 1.1.2.3 itojun static int
573 1.1.2.3 itojun sysctl_ip6_forwarding SYSCTL_HANDLER_ARGS
574 1.1.2.3 itojun {
575 1.1.2.3 itojun int error = 0;
576 1.1.2.3 itojun int old_ip6_forwarding;
577 1.1.2.3 itojun int changed;
578 1.1.2.3 itojun
579 1.1.2.3 itojun error = SYSCTL_OUT(req, arg1, sizeof(int));
580 1.1.2.3 itojun if (error || !req->newptr)
581 1.1.2.3 itojun return (error);
582 1.1.2.3 itojun old_ip6_forwarding = ip6_forwarding;
583 1.1.2.3 itojun error = SYSCTL_IN(req, arg1, sizeof(int));
584 1.1.2.3 itojun if (error != 0)
585 1.1.2.3 itojun return (error);
586 1.1.2.3 itojun changed = (ip6_forwarding ? 1 : 0) ^ (old_ip6_forwarding ? 1 : 0);
587 1.1.2.3 itojun if (changed == 0)
588 1.1.2.3 itojun return (error);
589 1.1.2.3 itojun if (ip6_forwarding != 0) { /* host becomes router */
590 1.1.2.3 itojun int s = splnet();
591 1.1.2.3 itojun struct nd_prefix *pr, *next;
592 1.1.2.3 itojun
593 1.1.2.3 itojun for (pr = nd_prefix.lh_first; pr; pr = next) {
594 1.1.2.3 itojun next = pr->ndpr_next;
595 1.1.2.3 itojun if (!IN6_IS_ADDR_UNSPECIFIED(&pr->ndpr_addr))
596 1.1.2.3 itojun in6_ifdel(pr->ndpr_ifp, &pr->ndpr_addr);
597 1.1.2.3 itojun prelist_remove(pr);
598 1.1.2.3 itojun }
599 1.1.2.3 itojun splx(s);
600 1.1.2.3 itojun } else { /* router becomes host */
601 1.1.2.3 itojun struct socket so;
602 1.1.2.3 itojun
603 1.1.2.3 itojun /* XXX: init dummy so */
604 1.1.2.3 itojun bzero(&so, sizeof(so));
605 1.1.2.3 itojun while(!LIST_EMPTY(&rr_prefix))
606 1.1.2.3 itojun delete_each_prefix(&so, LIST_FIRST(&rr_prefix),
607 1.1.2.3 itojun PR_ORIG_KERNEL);
608 1.1.2.3 itojun }
609 1.1.2.3 itojun
610 1.1.2.3 itojun return (error);
611 1.1.2.3 itojun }
612 1.1.2.3 itojun
613 1.1.2.3 itojun SYSCTL_OID(_net_inet6_ip6, IPV6CTL_FORWARDING, forwarding,
614 1.1.2.3 itojun CTLTYPE_INT|CTLFLAG_RW, &ip6_forwarding, 0, sysctl_ip6_forwarding,
615 1.1.2.3 itojun "I", "");
616 1.1.2.1 itojun SYSCTL_INT(_net_inet6_ip6, IPV6CTL_SENDREDIRECTS,
617 1.1.2.1 itojun redirect, CTLFLAG_RW, &ip6_sendredirects, 0, "");
618 1.1.2.1 itojun SYSCTL_INT(_net_inet6_ip6, IPV6CTL_DEFHLIM,
619 1.1.2.1 itojun hlim, CTLFLAG_RW, &ip6_defhlim, 0, "");
620 1.1.2.1 itojun SYSCTL_INT(_net_inet6_ip6, IPV6CTL_MAXFRAGPACKETS,
621 1.1.2.1 itojun maxfragpackets, CTLFLAG_RW, &ip6_maxfragpackets, 0, "");
622 1.1.2.1 itojun SYSCTL_INT(_net_inet6_ip6, IPV6CTL_ACCEPT_RTADV,
623 1.1.2.1 itojun accept_rtadv, CTLFLAG_RW, &ip6_accept_rtadv, 0, "");
624 1.1.2.1 itojun SYSCTL_INT(_net_inet6_ip6, IPV6CTL_KEEPFAITH,
625 1.1.2.1 itojun keepfaith, CTLFLAG_RW, &ip6_keepfaith, 0, "");
626 1.1.2.1 itojun SYSCTL_INT(_net_inet6_ip6, IPV6CTL_LOG_INTERVAL,
627 1.1.2.1 itojun log_interval, CTLFLAG_RW, &ip6_log_interval, 0, "");
628 1.1.2.1 itojun SYSCTL_INT(_net_inet6_ip6, IPV6CTL_HDRNESTLIMIT,
629 1.1.2.1 itojun hdrnestlimit, CTLFLAG_RW, &ip6_hdrnestlimit, 0, "");
630 1.1.2.1 itojun SYSCTL_INT(_net_inet6_ip6, IPV6CTL_DAD_COUNT,
631 1.1.2.1 itojun dad_count, CTLFLAG_RW, &ip6_dad_count, 0, "");
632 1.1.2.1 itojun SYSCTL_INT(_net_inet6_ip6, IPV6CTL_AUTO_FLOWLABEL,
633 1.1.2.1 itojun auto_flowlabel, CTLFLAG_RW, &ip6_auto_flowlabel, 0, "");
634 1.1.2.1 itojun SYSCTL_INT(_net_inet6_ip6, IPV6CTL_DEFMCASTHLIM,
635 1.1.2.1 itojun defmcasthlim, CTLFLAG_RW, &ip6_defmcasthlim, 0, "");
636 1.1.2.1 itojun SYSCTL_INT(_net_inet6_ip6, IPV6CTL_GIF_HLIM,
637 1.1.2.1 itojun gifhlim, CTLFLAG_RW, &ip6_gif_hlim, 0, "");
638 1.1.2.3 itojun SYSCTL_STRING(_net_inet6_ip6, IPV6CTL_KAME_VERSION,
639 1.1.2.3 itojun kame_version, CTLFLAG_RD, __KAME_VERSION, 0, "");
640 1.1.2.3 itojun SYSCTL_INT(_net_inet6_ip6, IPV6CTL_USE_DEPRECATED,
641 1.1.2.3 itojun use_deprecated, CTLFLAG_RW, &ip6_use_deprecated, 0, "");
642 1.1.2.3 itojun SYSCTL_INT(_net_inet6_ip6, IPV6CTL_RR_PRUNE,
643 1.1.2.3 itojun rr_prune, CTLFLAG_RW, &ip6_rr_prune, 0, "");
644 1.1.2.3 itojun #ifdef MAPPED_ADDR_ENABLED
645 1.1.2.3 itojun SYSCTL_INT(_net_inet6_ip6, IPV6CTL_MAPPED_ADDR,
646 1.1.2.3 itojun mapped_addr, CTLFLAG_RW, &ip6_mapped_addr_on, 0, "");
647 1.1.2.3 itojun #endif /* MAPPED_ADDR_ENABLED */
648 1.1.2.1 itojun
649 1.1.2.1 itojun /* net.inet6.icmp6 */
650 1.1.2.1 itojun SYSCTL_INT(_net_inet6_icmp6, ICMPV6CTL_REDIRACCEPT,
651 1.1.2.1 itojun rediraccept, CTLFLAG_RW, &icmp6_rediraccept, 0, "");
652 1.1.2.1 itojun SYSCTL_INT(_net_inet6_icmp6, ICMPV6CTL_REDIRTIMEOUT,
653 1.1.2.1 itojun redirtimeout, CTLFLAG_RW, &icmp6_redirtimeout, 0, "");
654 1.1.2.1 itojun SYSCTL_STRUCT(_net_inet6_icmp6, ICMPV6CTL_STATS, stats, CTLFLAG_RD,
655 1.1.2.1 itojun &icmp6stat, icmp6stat, "");
656 1.1.2.1 itojun SYSCTL_INT(_net_inet6_icmp6, ICMPV6CTL_ERRRATELIMIT,
657 1.1.2.1 itojun errratelimit, CTLFLAG_RW, &icmp6errratelim, 0, "");
658 1.1.2.1 itojun SYSCTL_INT(_net_inet6_icmp6, ICMPV6CTL_ND6_PRUNE,
659 1.1.2.1 itojun nd6_prune, CTLFLAG_RW, &nd6_prune, 0, "");
660 1.1.2.1 itojun SYSCTL_INT(_net_inet6_icmp6, ICMPV6CTL_ND6_DELAY,
661 1.1.2.1 itojun nd6_delay, CTLFLAG_RW, &nd6_delay, 0, "");
662 1.1.2.1 itojun SYSCTL_INT(_net_inet6_icmp6, ICMPV6CTL_ND6_UMAXTRIES,
663 1.1.2.1 itojun nd6_umaxtries, CTLFLAG_RW, &nd6_umaxtries, 0, "");
664 1.1.2.1 itojun SYSCTL_INT(_net_inet6_icmp6, ICMPV6CTL_ND6_MMAXTRIES,
665 1.1.2.1 itojun nd6_mmaxtries, CTLFLAG_RW, &nd6_mmaxtries, 0, "");
666 1.1.2.1 itojun SYSCTL_INT(_net_inet6_icmp6, ICMPV6CTL_ND6_USELOOPBACK,
667 1.1.2.1 itojun nd6_useloopback, CTLFLAG_RW, &nd6_useloopback, 0, "");
668 1.1.2.1 itojun SYSCTL_INT(_net_inet6_icmp6, ICMPV6CTL_ND6_PROXYALL,
669 1.1.2.1 itojun nd6_proxyall, CTLFLAG_RW, &nd6_proxyall, 0, "");
670 1.1.2.1 itojun
671 1.1.2.3 itojun #if __FreeBSD__ < 3
672 1.1.2.1 itojun /* net.inet6.udp6 */
673 1.1.2.1 itojun SYSCTL_INT(_net_inet6_udp6, UDP6CTL_SENDMAX,
674 1.1.2.1 itojun sendmax, CTLFLAG_RW, &udp6_sendspace, 0, "");
675 1.1.2.1 itojun SYSCTL_INT(_net_inet6_udp6, UDP6CTL_RECVSPACE,
676 1.1.2.1 itojun recvspace, CTLFLAG_RW, &udp6_recvspace, 0, "");
677 1.1.2.1 itojun
678 1.1.2.1 itojun /* net.inet6.tcp6 */
679 1.1.2.1 itojun SYSCTL_INT(_net_inet6_tcp6, TCP6CTL_MSSDFLT,
680 1.1.2.1 itojun mssdflt, CTLFLAG_RW, &tcp6_mssdflt, 0, "");
681 1.1.2.1 itojun SYSCTL_INT(_net_inet6_tcp6, TCP6CTL_DO_RFC1323,
682 1.1.2.1 itojun do_rfc1323, CTLFLAG_RW, &tcp6_do_rfc1323, 0, "");
683 1.1.2.1 itojun SYSCTL_INT(_net_inet6_tcp6, TCP6CTL_KEEPIDLE,
684 1.1.2.1 itojun keepidle, CTLFLAG_RW, &tcp6_keepidle, 0, "");
685 1.1.2.1 itojun SYSCTL_INT(_net_inet6_tcp6, TCP6CTL_KEEPINTVL,
686 1.1.2.1 itojun keepintvl, CTLFLAG_RW, &tcp6_keepintvl, 0, "");
687 1.1.2.1 itojun SYSCTL_INT(_net_inet6_tcp6, TCP6CTL_KEEPCNT,
688 1.1.2.1 itojun keepcnt, CTLFLAG_RW, &tcp6_keepcnt, 0, "");
689 1.1.2.1 itojun SYSCTL_INT(_net_inet6_tcp6, TCP6CTL_MAXPERSISTIDLE,
690 1.1.2.1 itojun maxpersistidle, CTLFLAG_RW, &tcp6_maxpersistidle, 0, "");
691 1.1.2.1 itojun SYSCTL_INT(_net_inet6_tcp6, TCP6CTL_SENDSPACE,
692 1.1.2.1 itojun sendspace, CTLFLAG_RW, &tcp6_sendspace, 0, "");
693 1.1.2.1 itojun SYSCTL_INT(_net_inet6_tcp6, TCP6CTL_RECVSPACE,
694 1.1.2.1 itojun recvspace, CTLFLAG_RW, &tcp6_recvspace, 0, "");
695 1.1.2.1 itojun SYSCTL_INT(_net_inet6_tcp6, TCP6CTL_CONNTIMEO,
696 1.1.2.1 itojun conntimeo, CTLFLAG_RW, &tcp6_conntimeo, 0, "");
697 1.1.2.1 itojun SYSCTL_INT(_net_inet6_tcp6, TCP6CTL_PMTU,
698 1.1.2.1 itojun pmtu, CTLFLAG_RW, &tcp6_pmtu, 0, "");
699 1.1.2.1 itojun SYSCTL_INT(_net_inet6_tcp6, TCP6CTL_PMTU_EXPIRE,
700 1.1.2.1 itojun pmtu_expire, CTLFLAG_RW, &pmtu_expire, 0, "");
701 1.1.2.1 itojun SYSCTL_INT(_net_inet6_tcp6, TCP6CTL_PMTU_PROBE,
702 1.1.2.1 itojun pmtu_probe, CTLFLAG_RW, &pmtu_probe, 0, "");
703 1.1.2.1 itojun SYSCTL_INT(_net_inet6_tcp6, TCP6CTL_43MAXSEG,
704 1.1.2.1 itojun pmtu_43maxseg, CTLFLAG_RW, &tcp6_43maxseg, 0, "");
705 1.1.2.1 itojun SYSCTL_STRUCT(_net_inet6_tcp6, TCP6CTL_STATS, stats, CTLFLAG_RD,
706 1.1.2.1 itojun &tcp6stat, tcp6stat, "");
707 1.1.2.1 itojun SYSCTL_INT(_net_inet6_tcp6, TCP6CTL_SYN_CACHE_LIMIT,
708 1.1.2.1 itojun syn_cache_limit, CTLFLAG_RW, &tcp6_syn_cache_limit, 0, "");
709 1.1.2.1 itojun SYSCTL_INT(_net_inet6_tcp6, TCP6CTL_SYN_BUCKET_LIMIT,
710 1.1.2.1 itojun syn_bucket_limit, CTLFLAG_RW, &tcp6_syn_bucket_limit, 0, "");
711 1.1.2.1 itojun SYSCTL_INT(_net_inet6_tcp6, TCP6CTL_SYN_CACHE_INTER,
712 1.1.2.1 itojun syn_cache_interval, CTLFLAG_RW, &tcp6_syn_cache_interval, 0, "");
713 1.1.2.3 itojun #endif /* !(defined(__FreeBSD__) && __FreeBSD__ >= 3) */
714 1.1.2.1 itojun
715 1.1.2.1 itojun #endif /* __FreeBSD__ */
716