1 /* $KAME: in6_proto.c,v 1.47 2000/03/29 07:37:22 sumikawa Exp $ */
4 * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 * 3. Neither the name of the project nor the names of its contributors
16 * may be used to endorse or promote products derived from this software
17 * without specific prior written permission.
19 * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
23 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33 * Copyright (c) 1982, 1986, 1993
34 * The Regents of the University of California. All rights reserved.
36 * Redistribution and use in source and binary forms, with or without
37 * modification, are permitted provided that the following conditions
39 * 1. Redistributions of source code must retain the above copyright
40 * notice, this list of conditions and the following disclaimer.
41 * 2. Redistributions in binary form must reproduce the above copyright
42 * notice, this list of conditions and the following disclaimer in the
43 * documentation and/or other materials provided with the distribution.
44 * 3. All advertising materials mentioning features or use of this software
45 * must display the following acknowledgement:
46 * This product includes software developed by the University of
47 * California, Berkeley and its contributors.
48 * 4. Neither the name of the University nor the names of its contributors
49 * may be used to endorse or promote products derived from this software
50 * without specific prior written permission.
52 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
53 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
54 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
55 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
56 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
57 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
58 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
59 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
60 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
61 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
64 * @(#)in_proto.c 8.1 (Berkeley) 6/10/93
67 #if (defined(__FreeBSD__) && __FreeBSD__ >= 3) || defined(__NetBSD__)
69 #if __NetBSD__ /*XXX*/
70 #include "opt_ipsec.h"
74 #include <sys/param.h>
75 #include <sys/socket.h>
76 #if defined(__FreeBSD__) || defined (__APPLE__)
77 #include <sys/socketvar.h>
79 #include <sys/protosw.h>
80 #include <sys/kernel.h>
81 #include <sys/domain.h>
83 #if defined (__FreeBSD__) || defined (__APPLE__)
84 #include <sys/systm.h>
85 #include <sys/sysctl.h>
89 #include <net/radix.h>
90 #include <net/route.h>
92 #include <netinet/in.h>
93 #include <netinet/in_systm.h>
94 #include <netinet/in_var.h>
95 #include <netinet/ip_encap.h>
96 #if defined (__APPLE__) || (defined(__FreeBSD__) && __FreeBSD__ >= 3) || (defined(__NetBSD__) && !defined(TCP6)) || defined(__OpenBSD__) || (defined(__bsdi__) && _BSDI_VERSION >= 199802)
97 #include <netinet/ip.h>
98 #include <netinet/ip_var.h>
100 #if (defined(__NetBSD__) && !defined(TCP6)) || defined(__OpenBSD__) || (defined(__bsdi__) && _BSDI_VERSION >= 199802)
101 #include <netinet/in_pcb.h>
103 #include <netinet/ip6.h>
104 #include <netinet6/ip6_var.h>
105 #include <netinet/icmp6.h>
107 #if defined (__APPLE__)
108 #include <netinet/tcp.h>
109 #include <netinet/tcp_timer.h>
110 #include <netinet/tcp_var.h>
111 #include <netinet/udp.h>
112 #include <netinet/udp_var.h>
113 # if (defined(__FreeBSD__) && __FreeBSD__ >= 4)
114 #include <netinet6/tcp6_var.h>
117 #if defined(__NetBSD__) && !defined(TCP6)
118 #include <netinet/tcp.h>
119 #include <netinet/tcp_fsm.h>
120 #include <netinet/tcp_seq.h>
121 #include <netinet/tcp_timer.h>
122 #include <netinet/tcp_var.h>
123 #include <netinet/tcpip.h>
124 #include <netinet/tcp_debug.h>
126 #include <netinet6/tcp6.h>
127 #include <netinet6/tcp6_fsm.h>
128 #include <netinet6/tcp6_seq.h>
129 #include <netinet6/tcp6_timer.h>
130 #include <netinet6/tcp6_var.h>
134 #include <netinet6/udp6.h>
135 #include <netinet6/udp6_var.h>
137 #include <netinet6/pim6_var.h>
139 #include <netinet6/nd6.h>
140 #if defined (__APPLE__)
141 #include <netinet6/in6_prefix.h>
145 #include <netinet6/ipsec.h>
146 #include <netinet6/ah.h>
148 #include <netinet6/esp.h>
150 #include <netinet6/ipcomp.h>
153 #include <netinet6/ip6protosw.h>
154 #include <netinet/tcpip.h>
158 #include <netinet6/in6_gif.h>
162 #include <netinet6/mip6.h>
165 #include <net/net_osdep.h>
167 #define offsetof(type, member) ((size_t)(&((type *)0)->member))
170 * TCP/IP protocol family: IP6, ICMP6, UDP, TCP.
173 extern struct domain inet6domain
;
174 #if defined(__FreeBSD__) && __FreeBSD__ >= 3 || defined (__APPLE__)
175 static struct pr_usrreqs nousrreqs
;
178 struct ip6protosw inet6sw
[] = {
179 { 0, &inet6domain
, IPPROTO_IPV6
, 0,
182 ip6_init
, 0, frag6_slowtimo
, frag6_drain
,
185 { SOCK_DGRAM
, &inet6domain
, IPPROTO_UDP
, PR_ATOMIC
| PR_ADDR
,
186 udp6_input
, 0, udp6_ctlinput
, ip6_ctloutput
,
191 { SOCK_STREAM
, &inet6domain
, IPPROTO_TCP
, PR_CONNREQUIRED
| PR_WANTRCVD
,
192 tcp6_input
, 0, tcp6_ctlinput
, tcp_ctloutput
,
194 tcp_init
, 0, 0, tcp_drain
,
197 { SOCK_RAW
, &inet6domain
, IPPROTO_RAW
, PR_ATOMIC
| PR_ADDR
,
198 rip6_input
, rip6_output
, rip6_ctlinput
, rip6_ctloutput
,
203 { SOCK_RAW
, &inet6domain
, IPPROTO_ICMPV6
, PR_ATOMIC
| PR_ADDR
,
204 icmp6_input
, rip6_output
, 0, rip6_ctloutput
,
206 icmp6_init
, icmp6_fasttimo
, 0, 0,
209 { SOCK_RAW
, &inet6domain
, IPPROTO_DSTOPTS
,PR_ATOMIC
|PR_ADDR
,
210 dest6_input
, 0, 0, 0,
215 { SOCK_RAW
, &inet6domain
, IPPROTO_ROUTING
,PR_ATOMIC
|PR_ADDR
,
216 route6_input
, 0, 0, 0,
221 { SOCK_RAW
, &inet6domain
, IPPROTO_FRAGMENT
,PR_ATOMIC
|PR_ADDR
,
222 frag6_input
, 0, 0, 0,
228 { SOCK_RAW
, &inet6domain
, IPPROTO_AH
, PR_ATOMIC
|PR_ADDR
,
235 { SOCK_RAW
, &inet6domain
, IPPROTO_ESP
, PR_ATOMIC
|PR_ADDR
,
242 { SOCK_RAW
, &inet6domain
, IPPROTO_IPCOMP
, PR_ATOMIC
|PR_ADDR
,
243 ipcomp6_input
, 0, 0, 0,
249 { SOCK_RAW
, &inet6domain
, IPPROTO_IPV4
, PR_ATOMIC
|PR_ADDR
,
250 encap6_input
, rip6_output
, 0, rip6_ctloutput
,
256 { SOCK_RAW
, &inet6domain
, IPPROTO_IPV6
, PR_ATOMIC
|PR_ADDR
,
257 encap6_input
, rip6_output
, 0, rip6_ctloutput
,
263 { SOCK_RAW
, &inet6domain
, IPPROTO_PIM
, PR_ATOMIC
|PR_ADDR
,
264 pim6_input
, rip6_output
, 0, rip6_ctloutput
,
270 { SOCK_RAW
, &inet6domain
, 0, PR_ATOMIC
| PR_ADDR
,
271 rip6_input
, rip6_output
, 0, rip6_ctloutput
,
279 struct ip6protosw in6_gif_protosw
=
280 { SOCK_RAW
, &inet6domain
, 0/*IPPROTO_IPV[46]*/, PR_ATOMIC
|PR_ADDR
,
281 in6_gif_input
, rip6_output
, 0, rip6_ctloutput
,
289 struct ip6protosw mip6_tunnel_protosw
=
290 { SOCK_RAW
, &inet6domain
, 0/*IPPROTO_IPV[46]*/, PR_ATOMIC
|PR_ADDR
,
291 mip6_tunnel_input
, rip6_output
, 0, rip6_ctloutput
,
298 extern int in6_inithead
__P((void **, int));
299 int in6_proto_count
= (sizeof (inet6sw
) / sizeof (struct ip6protosw
));
300 extern void in6_dinit(void);
302 struct domain inet6domain
=
303 { AF_INET6
, "internet6", in6_dinit
, 0, 0,
305 in6_inithead
, offsetof(struct sockaddr_in6
, sin6_addr
) << 3, sizeof(struct sockaddr_in6
) ,
306 sizeof(struct sockaddr_in6
), 0
312 * Internet configuration info
314 #ifndef IPV6FORWARDING
316 #define IPV6FORWARDING 1 /* forward IP6 packets not for us */
318 #define IPV6FORWARDING 0 /* don't forward IP6 packets not for us */
319 #endif /* GATEWAY6 */
320 #endif /* !IPV6FORWARDING */
322 #ifndef IPV6_SENDREDIRECTS
323 #define IPV6_SENDREDIRECTS 1
326 int ip6_forwarding
= IPV6FORWARDING
; /* act as router? */
327 int ip6_sendredirects
= IPV6_SENDREDIRECTS
;
328 int ip6_defhlim
= IPV6_DEFHLIM
;
329 int ip6_defmcasthlim
= IPV6_DEFAULT_MULTICAST_HOPS
;
330 int ip6_accept_rtadv
= 0; /* "IPV6FORWARDING ? 0 : 1" is dangerous */
331 int ip6_maxfragpackets
= 200;
332 int ip6_log_interval
= 5;
333 int ip6_hdrnestlimit
= 50; /* appropriate? */
334 int ip6_dad_count
= 1; /* DupAddrDetectionTransmits */
335 u_int32_t ip6_flow_seq
;
336 int ip6_auto_flowlabel
= 1;
338 int ip6_gif_hlim
= GIF_HLIM
;
340 int ip6_gif_hlim
= 0;
342 int ip6_use_deprecated
= 1; /* allow deprecated addr (RFC2462 5.5.4) */
343 int ip6_rr_prune
= 5; /* router renumbering prefix
344 * walk list every 5 sec. */
345 #if MAPPED_ADDR_ENABLED
346 int ip6_mapped_addr_on
= 1;
347 #endif /* MAPPED_ADDR_ENABLED */
349 u_int32_t ip6_id
= 0UL;
350 int ip6_keepfaith
= 0;
351 time_t ip6_log_time
= (time_t)0L;
356 * BSDI4 defines these variables in in_proto.c...
357 * XXX: what if we don't define INET? Should we define pmtu6_expire
358 * or so? (jinmei@kame.net 19990310)
360 int pmtu_expire
= 60*10;
361 int pmtu_probe
= 60*2;
364 /* raw IP6 parameters */
366 * Nominal space allocated to a raw ip socket.
368 #define RIPV6SNDQ 8192
369 #define RIPV6RCVQ 8192
371 u_long rip6_sendspace
= RIPV6SNDQ
;
372 u_long rip6_recvspace
= RIPV6RCVQ
;
374 /* ICMPV6 parameters */
375 int icmp6_rediraccept
= 1; /* accept and process redirects */
376 int icmp6_redirtimeout
= 10 * 60; /* 10 minutes */
377 u_int icmp6errratelim
= 1000; /* 1000usec = 1msec */
378 int icmp6_nodeinfo
= 1; /* enable/disable NI response */
381 /* TCP on IP6 parameters */
382 int tcp6_sendspace
= 1024 * 8;
383 int tcp6_recvspace
= 1024 * 8;
384 int tcp6_mssdflt
= TCP6_MSS
;
385 int tcp6_rttdflt
= TCP6TV_SRTTDFLT
/ PR_SLOWHZ
;
386 int tcp6_do_rfc1323
= 1;
387 int tcp6_conntimeo
= TCP6TV_KEEP_INIT
; /* initial connection timeout */
388 int tcp6_43maxseg
= 0;
392 * Parameters for keepalive option.
393 * Connections for which SO_KEEPALIVE is set will be probed
394 * after being idle for a time of tcp6_keepidle (in units of PR_SLOWHZ).
395 * Starting at that time, the connection is probed at intervals
396 * of tcp6_keepintvl (same units) until a response is received
397 * or until tcp6_keepcnt probes have been made, at which time
398 * the connection is dropped. Note that a tcp6_keepidle value
399 * under 2 hours is nonconformant with RFC-1122, Internet Host Requirements.
401 int tcp6_keepidle
= TCP6TV_KEEP_IDLE
; /* time before probing idle */
402 int tcp6_keepintvl
= TCP6TV_KEEPINTVL
; /* interval betwn idle probes */
403 int tcp6_keepcnt
= TCP6TV_KEEPCNT
; /* max idle probes */
404 int tcp6_maxpersistidle
= TCP6TV_KEEP_IDLE
; /* max idle time in persist */
407 #define TCP6_LISTEN_HASH_SIZE 17
408 #define TCP6_CONN_HASH_SIZE 97
409 #define TCP6_SYN_HASH_SIZE 293
410 #define TCP6_SYN_BUCKET_SIZE 35
412 #define TCP6_LISTEN_HASH_SIZE 97
413 #define TCP6_CONN_HASH_SIZE 9973
414 #define TCP6_SYN_HASH_SIZE 997
415 #define TCP6_SYN_BUCKET_SIZE 35
417 int tcp6_listen_hash_size
= TCP6_LISTEN_HASH_SIZE
;
418 int tcp6_conn_hash_size
= TCP6_CONN_HASH_SIZE
;
419 struct tcp6_hash_list tcp6_listen_hash
[TCP6_LISTEN_HASH_SIZE
],
420 tcp6_conn_hash
[TCP6_CONN_HASH_SIZE
];
422 int tcp6_syn_cache_size
= TCP6_SYN_HASH_SIZE
;
423 int tcp6_syn_cache_limit
= TCP6_SYN_HASH_SIZE
*TCP6_SYN_BUCKET_SIZE
;
424 int tcp6_syn_bucket_limit
= 3*TCP6_SYN_BUCKET_SIZE
;
425 struct syn_cache_head6 tcp6_syn_cache
[TCP6_SYN_HASH_SIZE
];
426 struct syn_cache_head6
*tcp6_syn_cache_first
;
427 int tcp6_syn_cache_interval
= 8; /* runs timer every 4 seconds */
428 int tcp6_syn_cache_timeo
= TCP6TV_KEEP_INIT
;
431 * Parameters for computing a desirable data segment size
432 * given an upper bound (either interface MTU, or peer's MSS option)_.
433 * As applications tend to use a buffer size that is a multiple
434 * of kilobytes, try for something that divides evenly. However,
435 * do not round down too much.
437 * Round segment size down to a multiple of TCP6_ROUNDSIZE if this
438 * does not result in lowering by more than (size/TCP6_ROUNDFRAC).
439 * For example, round 536 to 512. Older versions of the system
440 * effectively used MCLBYTES (1K or 2K) as TCP6_ROUNDSIZE, with
441 * a value of 1 for TCP6_ROUNDFRAC (eliminating its effect).
442 * We round to a multiple of 256 for SLIP.
444 #ifndef TCP6_ROUNDSIZE
445 #define TCP6_ROUNDSIZE 256 /* round to multiple of 256 */
447 #ifndef TCP6_ROUNDFRAC
448 #define TCP6_ROUNDFRAC 10 /* round down at most N/10, or 10% */
451 int tcp6_roundsize
= TCP6_ROUNDSIZE
;
452 int tcp6_roundfrac
= TCP6_ROUNDFRAC
;
455 /* UDP on IP6 parameters */
456 int udp6_sendspace
= 9216; /* really max datagram size */
457 int udp6_recvspace
= 40 * (1024 + sizeof(struct sockaddr_in6
));
458 /* 40 1K datagrams */
460 #if defined(__FreeBSD__) || defined(__APPLE__)
462 * sysctl related items.
464 SYSCTL_NODE(_net
, PF_INET6
, inet6
, CTLFLAG_RW
, 0,
468 SYSCTL_NODE(_net_inet6
, IPPROTO_IPV6
, ip6
, CTLFLAG_RW
, 0, "IP6");
469 SYSCTL_NODE(_net_inet6
, IPPROTO_ICMPV6
, icmp6
, CTLFLAG_RW
, 0, "ICMP6");
470 SYSCTL_NODE(_net_inet6
, IPPROTO_UDP
, udp6
, CTLFLAG_RW
, 0, "UDP6");
471 SYSCTL_NODE(_net_inet6
, IPPROTO_TCP
, tcp6
, CTLFLAG_RW
, 0, "TCP6");
473 SYSCTL_NODE(_net_inet6
, IPPROTO_ESP
, ipsec6
, CTLFLAG_RW
, 0, "IPSEC6");
478 sysctl_ip6_forwarding SYSCTL_HANDLER_ARGS
481 int old_ip6_forwarding
;
484 error
= SYSCTL_OUT(req
, arg1
, sizeof(int));
485 if (error
|| !req
->newptr
)
487 old_ip6_forwarding
= ip6_forwarding
;
488 error
= SYSCTL_IN(req
, arg1
, sizeof(int));
491 changed
= (ip6_forwarding
? 1 : 0) ^ (old_ip6_forwarding
? 1 : 0);
495 * XXX while host->router removes prefix got from RA,
496 * router->host case nukes all the prefixes managed by in6_prefix.c
497 * (both RR and static). therefore, switching from host->router->host
498 * will remove statically configured addresses/prefixes.
499 * not sure if it is intended behavior or not.
501 if (ip6_forwarding
!= 0) { /* host becomes router */
503 struct nd_prefix
*pr
, *next
;
505 for (pr
= nd_prefix
.lh_first
; pr
; pr
= next
) {
506 next
= pr
->ndpr_next
;
507 if (!IN6_IS_ADDR_UNSPECIFIED(&pr
->ndpr_addr
))
508 in6_ifdel(pr
->ndpr_ifp
, &pr
->ndpr_addr
);
512 } else { /* router becomes host */
513 while(!LIST_EMPTY(&rr_prefix
))
514 delete_each_prefix(LIST_FIRST(&rr_prefix
),
521 SYSCTL_OID(_net_inet6_ip6
, IPV6CTL_FORWARDING
, forwarding
,
522 CTLTYPE_INT
|CTLFLAG_RW
, &ip6_forwarding
, 0, sysctl_ip6_forwarding
,
524 SYSCTL_INT(_net_inet6_ip6
, IPV6CTL_SENDREDIRECTS
,
525 redirect
, CTLFLAG_RW
, &ip6_sendredirects
, 0, "");
526 SYSCTL_INT(_net_inet6_ip6
, IPV6CTL_DEFHLIM
,
527 hlim
, CTLFLAG_RW
, &ip6_defhlim
, 0, "");
528 SYSCTL_INT(_net_inet6_ip6
, IPV6CTL_MAXFRAGPACKETS
,
529 maxfragpackets
, CTLFLAG_RW
, &ip6_maxfragpackets
, 0, "");
530 SYSCTL_INT(_net_inet6_ip6
, IPV6CTL_ACCEPT_RTADV
,
531 accept_rtadv
, CTLFLAG_RW
, &ip6_accept_rtadv
, 0, "");
532 SYSCTL_INT(_net_inet6_ip6
, IPV6CTL_KEEPFAITH
,
533 keepfaith
, CTLFLAG_RW
, &ip6_keepfaith
, 0, "");
534 SYSCTL_INT(_net_inet6_ip6
, IPV6CTL_LOG_INTERVAL
,
535 log_interval
, CTLFLAG_RW
, &ip6_log_interval
, 0, "");
536 SYSCTL_INT(_net_inet6_ip6
, IPV6CTL_HDRNESTLIMIT
,
537 hdrnestlimit
, CTLFLAG_RW
, &ip6_hdrnestlimit
, 0, "");
538 SYSCTL_INT(_net_inet6_ip6
, IPV6CTL_DAD_COUNT
,
539 dad_count
, CTLFLAG_RW
, &ip6_dad_count
, 0, "");
540 SYSCTL_INT(_net_inet6_ip6
, IPV6CTL_AUTO_FLOWLABEL
,
541 auto_flowlabel
, CTLFLAG_RW
, &ip6_auto_flowlabel
, 0, "");
542 SYSCTL_INT(_net_inet6_ip6
, IPV6CTL_DEFMCASTHLIM
,
543 defmcasthlim
, CTLFLAG_RW
, &ip6_defmcasthlim
, 0, "");
544 SYSCTL_INT(_net_inet6_ip6
, IPV6CTL_GIF_HLIM
,
545 gifhlim
, CTLFLAG_RW
, &ip6_gif_hlim
, 0, "");
546 SYSCTL_STRING(_net_inet6_ip6
, IPV6CTL_KAME_VERSION
,
547 kame_version
, CTLFLAG_RD
, __KAME_VERSION
, 0, "");
548 SYSCTL_INT(_net_inet6_ip6
, IPV6CTL_USE_DEPRECATED
,
549 use_deprecated
, CTLFLAG_RW
, &ip6_use_deprecated
, 0, "");
550 SYSCTL_INT(_net_inet6_ip6
, IPV6CTL_RR_PRUNE
,
551 rr_prune
, CTLFLAG_RW
, &ip6_rr_prune
, 0, "");
552 #if MAPPED_ADDR_ENABLED
553 SYSCTL_INT(_net_inet6_ip6
, IPV6CTL_MAPPED_ADDR
,
554 mapped_addr
, CTLFLAG_RW
, &ip6_mapped_addr_on
, 0, "");
555 #endif /* MAPPED_ADDR_ENABLED */
557 /* net.inet6.icmp6 */
558 SYSCTL_INT(_net_inet6_icmp6
, ICMPV6CTL_REDIRACCEPT
,
559 rediraccept
, CTLFLAG_RW
, &icmp6_rediraccept
, 0, "");
560 SYSCTL_INT(_net_inet6_icmp6
, ICMPV6CTL_REDIRTIMEOUT
,
561 redirtimeout
, CTLFLAG_RW
, &icmp6_redirtimeout
, 0, "");
562 SYSCTL_STRUCT(_net_inet6_icmp6
, ICMPV6CTL_STATS
, stats
, CTLFLAG_RD
,
563 &icmp6stat
, icmp6stat
, "");
564 SYSCTL_INT(_net_inet6_icmp6
, ICMPV6CTL_ERRRATELIMIT
,
565 errratelimit
, CTLFLAG_RW
, &icmp6errratelim
, 0, "");
566 SYSCTL_INT(_net_inet6_icmp6
, ICMPV6CTL_ND6_PRUNE
,
567 nd6_prune
, CTLFLAG_RW
, &nd6_prune
, 0, "");
568 SYSCTL_INT(_net_inet6_icmp6
, ICMPV6CTL_ND6_DELAY
,
569 nd6_delay
, CTLFLAG_RW
, &nd6_delay
, 0, "");
570 SYSCTL_INT(_net_inet6_icmp6
, ICMPV6CTL_ND6_UMAXTRIES
,
571 nd6_umaxtries
, CTLFLAG_RW
, &nd6_umaxtries
, 0, "");
572 SYSCTL_INT(_net_inet6_icmp6
, ICMPV6CTL_ND6_MMAXTRIES
,
573 nd6_mmaxtries
, CTLFLAG_RW
, &nd6_mmaxtries
, 0, "");
574 SYSCTL_INT(_net_inet6_icmp6
, ICMPV6CTL_ND6_USELOOPBACK
,
575 nd6_useloopback
, CTLFLAG_RW
, &nd6_useloopback
, 0, "");
576 //SYSCTL_INT(_net_inet6_icmp6, ICMPV6CTL_ND6_PROXYALL,
577 // nd6_proxyall, CTLFLAG_RW, &nd6_proxyall, 0, "");
578 SYSCTL_INT(_net_inet6_icmp6
, ICMPV6CTL_NODEINFO
,
579 nodeinfo
, CTLFLAG_RW
, &icmp6_nodeinfo
, 0, "");
582 #if defined(__FreeBSD__) && __FreeBSD__ < 3
584 SYSCTL_INT(_net_inet6_udp6
, UDP6CTL_SENDMAX
,
585 sendmax
, CTLFLAG_RW
, &udp6_sendspace
, 0, "");
586 SYSCTL_INT(_net_inet6_udp6
, UDP6CTL_RECVSPACE
,
587 recvspace
, CTLFLAG_RW
, &udp6_recvspace
, 0, "");
590 SYSCTL_INT(_net_inet6_tcp6
, TCP6CTL_MSSDFLT
,
591 mssdflt
, CTLFLAG_RW
, &tcp6_mssdflt
, 0, "");
592 SYSCTL_INT(_net_inet6_tcp6
, TCP6CTL_DO_RFC1323
,
593 do_rfc1323
, CTLFLAG_RW
, &tcp6_do_rfc1323
, 0, "");
594 SYSCTL_INT(_net_inet6_tcp6
, TCP6CTL_KEEPIDLE
,
595 keepidle
, CTLFLAG_RW
, &tcp6_keepidle
, 0, "");
596 SYSCTL_INT(_net_inet6_tcp6
, TCP6CTL_KEEPINTVL
,
597 keepintvl
, CTLFLAG_RW
, &tcp6_keepintvl
, 0, "");
598 SYSCTL_INT(_net_inet6_tcp6
, TCP6CTL_KEEPCNT
,
599 keepcnt
, CTLFLAG_RW
, &tcp6_keepcnt
, 0, "");
600 SYSCTL_INT(_net_inet6_tcp6
, TCP6CTL_MAXPERSISTIDLE
,
601 maxpersistidle
, CTLFLAG_RW
, &tcp6_maxpersistidle
, 0, "");
602 SYSCTL_INT(_net_inet6_tcp6
, TCP6CTL_SENDSPACE
,
603 sendspace
, CTLFLAG_RW
, &tcp6_sendspace
, 0, "");
604 SYSCTL_INT(_net_inet6_tcp6
, TCP6CTL_RECVSPACE
,
605 recvspace
, CTLFLAG_RW
, &tcp6_recvspace
, 0, "");
606 SYSCTL_INT(_net_inet6_tcp6
, TCP6CTL_CONNTIMEO
,
607 conntimeo
, CTLFLAG_RW
, &tcp6_conntimeo
, 0, "");
608 SYSCTL_INT(_net_inet6_tcp6
, TCP6CTL_PMTU
,
609 pmtu
, CTLFLAG_RW
, &tcp6_pmtu
, 0, "");
610 SYSCTL_INT(_net_inet6_tcp6
, TCP6CTL_PMTU_EXPIRE
,
611 pmtu_expire
, CTLFLAG_RW
, &pmtu_expire
, 0, "");
612 SYSCTL_INT(_net_inet6_tcp6
, TCP6CTL_PMTU_PROBE
,
613 pmtu_probe
, CTLFLAG_RW
, &pmtu_probe
, 0, "");
614 SYSCTL_INT(_net_inet6_tcp6
, TCP6CTL_43MAXSEG
,
615 pmtu_43maxseg
, CTLFLAG_RW
, &tcp6_43maxseg
, 0, "");
616 SYSCTL_STRUCT(_net_inet6_tcp6
, TCP6CTL_STATS
, stats
, CTLFLAG_RD
,
617 &tcp6stat
, tcp6stat
, "");
618 SYSCTL_INT(_net_inet6_tcp6
, TCP6CTL_SYN_CACHE_LIMIT
,
619 syn_cache_limit
, CTLFLAG_RW
, &tcp6_syn_cache_limit
, 0, "");
620 SYSCTL_INT(_net_inet6_tcp6
, TCP6CTL_SYN_BUCKET_LIMIT
,
621 syn_bucket_limit
, CTLFLAG_RW
, &tcp6_syn_bucket_limit
, 0, "");
622 SYSCTL_INT(_net_inet6_tcp6
, TCP6CTL_SYN_CACHE_INTER
,
623 syn_cache_interval
, CTLFLAG_RW
, &tcp6_syn_cache_interval
, 0, "");
624 #endif /* !(defined(__FreeBSD__) && __FreeBSD__ >= 3) */
626 #endif /* __FreeBSD__ */