in6_proto.c revision 139826
10Sduke/* $FreeBSD: head/sys/netinet6/in6_proto.c 139826 2005-01-07 02:30:35Z imp $ */ 211884Sykantser/* $KAME: in6_proto.c,v 1.91 2001/05/27 13:28:35 itojun Exp $ */ 30Sduke 40Sduke/*- 50Sduke * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. 60Sduke * All rights reserved. 70Sduke * 80Sduke * Redistribution and use in source and binary forms, with or without 90Sduke * modification, are permitted provided that the following conditions 100Sduke * are met: 110Sduke * 1. Redistributions of source code must retain the above copyright 120Sduke * notice, this list of conditions and the following disclaimer. 130Sduke * 2. Redistributions in binary form must reproduce the above copyright 140Sduke * notice, this list of conditions and the following disclaimer in the 150Sduke * documentation and/or other materials provided with the distribution. 160Sduke * 3. Neither the name of the project nor the names of its contributors 170Sduke * may be used to endorse or promote products derived from this software 180Sduke * without specific prior written permission. 192362Sohair * 202362Sohair * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND 212362Sohair * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 220Sduke * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 230Sduke * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE 240Sduke * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2516930Siignatyev * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2616930Siignatyev * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2716930Siignatyev * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2816930Siignatyev * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2916930Siignatyev * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 300Sduke * SUCH DAMAGE. 3116930Siignatyev */ 3216930Siignatyev 330Sduke/*- 3416930Siignatyev * Copyright (c) 1982, 1986, 1993 3516930Siignatyev * The Regents of the University of California. All rights reserved. 3616930Siignatyev * 3716930Siignatyev * Redistribution and use in source and binary forms, with or without 3816930Siignatyev * modification, are permitted provided that the following conditions 390Sduke * are met: 4016930Siignatyev * 1. Redistributions of source code must retain the above copyright 4116930Siignatyev * notice, this list of conditions and the following disclaimer. 4216930Siignatyev * 2. Redistributions in binary form must reproduce the above copyright 4316930Siignatyev * notice, this list of conditions and the following disclaimer in the 4416930Siignatyev * documentation and/or other materials provided with the distribution. 450Sduke * 4. Neither the name of the University nor the names of its contributors 4616930Siignatyev * may be used to endorse or promote products derived from this software 4716930Siignatyev * without specific prior written permission. 4816930Siignatyev * 4916930Siignatyev * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 5016930Siignatyev * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 510Sduke * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 5216930Siignatyev * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 5316930Siignatyev * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 5416930Siignatyev * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 5516930Siignatyev * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 5616930Siignatyev * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 570Sduke * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 5816930Siignatyev * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 5916930Siignatyev * SUCH DAMAGE. 600Sduke * 610Sduke * @(#)in_proto.c 8.1 (Berkeley) 6/10/93 620Sduke */ 630Sduke 640Sduke#include "opt_inet.h" 650Sduke#include "opt_inet6.h" 660Sduke#include "opt_ipsec.h" 670Sduke 680Sduke#include <sys/param.h> 690Sduke#include <sys/socket.h> 700Sduke#include <sys/socketvar.h> 710Sduke#include <sys/protosw.h> 720Sduke#include <sys/kernel.h> 730Sduke#include <sys/domain.h> 740Sduke#include <sys/mbuf.h> 750Sduke#include <sys/systm.h> 760Sduke#include <sys/sysctl.h> 770Sduke 780Sduke#include <net/if.h> 790Sduke#include <net/radix.h> 800Sduke#include <net/route.h> 810Sduke 820Sduke#include <netinet/in.h> 830Sduke#include <netinet/in_systm.h> 840Sduke#include <netinet/in_var.h> 850Sduke#include <netinet/ip_encap.h> 860Sduke#include <netinet/ip.h> 870Sduke#include <netinet/ip_var.h> 880Sduke#include <netinet/ip6.h> 890Sduke#include <netinet6/ip6_var.h> 900Sduke#include <netinet/icmp6.h> 910Sduke 920Sduke#include <netinet/tcp.h> 930Sduke#include <netinet/tcp_timer.h> 940Sduke#include <netinet/tcp_var.h> 950Sduke#include <netinet/udp.h> 960Sduke#include <netinet/udp_var.h> 970Sduke#include <netinet6/tcp6_var.h> 980Sduke#include <netinet6/raw_ip6.h> 990Sduke#include <netinet6/udp6_var.h> 1000Sduke#include <netinet6/pim6_var.h> 1010Sduke#include <netinet6/nd6.h> 1020Sduke 1030Sduke#ifdef IPSEC 1040Sduke#include <netinet6/ipsec.h> 1050Sduke#ifdef INET6 1060Sduke#include <netinet6/ipsec6.h> 1070Sduke#endif 1080Sduke#include <netinet6/ah.h> 1090Sduke#ifdef INET6 1100Sduke#include <netinet6/ah6.h> 1110Sduke#endif 1120Sduke#ifdef IPSEC_ESP 1130Sduke#include <netinet6/esp.h> 1140Sduke#ifdef INET6 1150Sduke#include <netinet6/esp6.h> 1160Sduke#endif 1170Sduke#endif 1180Sduke#include <netinet6/ipcomp.h> 1190Sduke#ifdef INET6 1200Sduke#include <netinet6/ipcomp6.h> 1210Sduke#endif 1220Sduke#endif /* IPSEC */ 1230Sduke 1240Sduke#ifdef FAST_IPSEC 1250Sduke#include <netipsec/ipsec6.h> 1260Sduke#define IPSEC 1270Sduke#define IPSEC_ESP 1280Sduke#define ah6_input ipsec6_common_input 1290Sduke#define esp6_input ipsec6_common_input 1300Sduke#define ipcomp6_input ipsec6_common_input 1310Sduke#endif /* FAST_IPSEC */ 1320Sduke 1330Sduke#include <netinet6/ip6protosw.h> 1340Sduke 1350Sduke#include <net/net_osdep.h> 1360Sduke 1370Sduke/* 1380Sduke * TCP/IP protocol family: IP6, ICMP6, UDP, TCP. 1390Sduke */ 1400Sduke 1410Sdukeextern struct domain inet6domain; 1420Sdukestatic struct pr_usrreqs nousrreqs; 1430Sduke 1440Sduke#define PR_LISTEN 0 1450Sduke#define PR_ABRTACPTDIS 0 1460Sduke 1470Sdukestruct ip6protosw inet6sw[] = { 1480Sduke{ 0, &inet6domain, IPPROTO_IPV6, 0, 1490Sduke 0, 0, 0, 0, 1500Sduke 0, 1510Sduke ip6_init, 0, frag6_slowtimo, frag6_drain, 1520Sduke &nousrreqs, 1530Sduke}, 1540Sduke{ SOCK_DGRAM, &inet6domain, IPPROTO_UDP, PR_ATOMIC|PR_ADDR, 1550Sduke udp6_input, 0, udp6_ctlinput, ip6_ctloutput, 1560Sduke 0, 1570Sduke 0, 0, 0, 0, 1580Sduke &udp6_usrreqs, 1590Sduke}, 1600Sduke{ SOCK_STREAM, &inet6domain, IPPROTO_TCP, PR_CONNREQUIRED|PR_WANTRCVD|PR_LISTEN, 1610Sduke tcp6_input, 0, tcp6_ctlinput, tcp_ctloutput, 1620Sduke 0, 1630Sduke#ifdef INET /* don't call initialization and timeout routines twice */ 1640Sduke 0, 0, 0, tcp_drain, 1650Sduke#else 1660Sduke tcp_init, tcp_fasttimo, tcp_slowtimo, tcp_drain, 1670Sduke#endif 1680Sduke &tcp6_usrreqs, 1690Sduke}, 1700Sduke{ SOCK_RAW, &inet6domain, IPPROTO_RAW, PR_ATOMIC|PR_ADDR, 1710Sduke rip6_input, rip6_output, rip6_ctlinput, rip6_ctloutput, 1720Sduke 0, 1730Sduke 0, 0, 0, 0, 1740Sduke &rip6_usrreqs 1750Sduke}, 1760Sduke{ SOCK_RAW, &inet6domain, IPPROTO_ICMPV6, PR_ATOMIC|PR_ADDR|PR_LASTHDR, 1770Sduke icmp6_input, rip6_output, rip6_ctlinput, rip6_ctloutput, 1780Sduke 0, 1790Sduke icmp6_init, icmp6_fasttimo, 0, 0, 1800Sduke &rip6_usrreqs 1810Sduke}, 1820Sduke{ SOCK_RAW, &inet6domain, IPPROTO_DSTOPTS,PR_ATOMIC|PR_ADDR, 1830Sduke dest6_input, 0, 0, 0, 1840Sduke 0, 1850Sduke 0, 0, 0, 0, 1860Sduke &nousrreqs 1870Sduke}, 1880Sduke{ SOCK_RAW, &inet6domain, IPPROTO_ROUTING,PR_ATOMIC|PR_ADDR, 1890Sduke route6_input, 0, 0, 0, 1900Sduke 0, 1910Sduke 0, 0, 0, 0, 1920Sduke &nousrreqs 1930Sduke}, 1940Sduke{ SOCK_RAW, &inet6domain, IPPROTO_FRAGMENT,PR_ATOMIC|PR_ADDR, 1950Sduke frag6_input, 0, 0, 0, 1960Sduke 0, 1970Sduke 0, 0, 0, 0, 1980Sduke &nousrreqs 1990Sduke}, 2000Sduke#ifdef IPSEC 2010Sduke{ SOCK_RAW, &inet6domain, IPPROTO_AH, PR_ATOMIC|PR_ADDR, 2020Sduke ah6_input, 0, 0, 0, 2030Sduke 0, 2040Sduke 0, 0, 0, 0, 2050Sduke &nousrreqs, 2060Sduke}, 2070Sduke#ifdef IPSEC_ESP 2080Sduke{ SOCK_RAW, &inet6domain, IPPROTO_ESP, PR_ATOMIC|PR_ADDR, 2090Sduke esp6_input, 0, 2100Sduke esp6_ctlinput, 2110Sduke 0, 2120Sduke 0, 2130Sduke 0, 0, 0, 0, 2140Sduke &nousrreqs, 2150Sduke}, 2160Sduke#endif 2170Sduke{ SOCK_RAW, &inet6domain, IPPROTO_IPCOMP, PR_ATOMIC|PR_ADDR, 2180Sduke ipcomp6_input, 0, 0, 0, 2190Sduke 0, 2200Sduke 0, 0, 0, 0, 2210Sduke &nousrreqs, 2220Sduke}, 2230Sduke#endif /* IPSEC */ 2240Sduke#ifdef INET 2250Sduke{ SOCK_RAW, &inet6domain, IPPROTO_IPV4, PR_ATOMIC|PR_ADDR|PR_LASTHDR, 2260Sduke encap6_input, rip6_output, 0, rip6_ctloutput, 2270Sduke 0, 2280Sduke encap_init, 0, 0, 0, 2290Sduke &rip6_usrreqs 2300Sduke}, 2310Sduke#endif /* INET */ 2320Sduke{ SOCK_RAW, &inet6domain, IPPROTO_IPV6, PR_ATOMIC|PR_ADDR|PR_LASTHDR, 2330Sduke encap6_input, rip6_output, 0, rip6_ctloutput, 2340Sduke 0, 2350Sduke encap_init, 0, 0, 0, 2360Sduke &rip6_usrreqs 2370Sduke}, 2380Sduke{ SOCK_RAW, &inet6domain, IPPROTO_PIM, PR_ATOMIC|PR_ADDR|PR_LASTHDR, 2390Sduke pim6_input, rip6_output, 0, rip6_ctloutput, 2400Sduke 0, 2410Sduke 0, 0, 0, 0, 2420Sduke &rip6_usrreqs 2430Sduke}, 2440Sduke/* raw wildcard */ 2450Sduke{ SOCK_RAW, &inet6domain, 0, PR_ATOMIC|PR_ADDR, 2460Sduke rip6_input, rip6_output, 0, rip6_ctloutput, 2470Sduke 0, 2480Sduke 0, 0, 0, 0, 2490Sduke &rip6_usrreqs 2500Sduke}, 2510Sduke}; 2520Sduke 2530Sdukeextern int in6_inithead __P((void **, int)); 2540Sduke 2550Sdukestruct domain inet6domain = 2560Sduke { AF_INET6, "internet6", 0, 0, 0, 2570Sduke (struct protosw *)inet6sw, 2580Sduke (struct protosw *)&inet6sw[sizeof(inet6sw)/sizeof(inet6sw[0])], 0, 2590Sduke in6_inithead, 2600Sduke offsetof(struct sockaddr_in6, sin6_addr) << 3, 2610Sduke sizeof(struct sockaddr_in6), 2620Sduke in6_domifattach, in6_domifdetach, }; 2630Sduke 2640SdukeDOMAIN_SET(inet6); 2650Sduke 2660Sduke/* 2670Sduke * Internet configuration info 2680Sduke */ 2690Sduke#ifndef IPV6FORWARDING 2700Sduke#ifdef GATEWAY6 2710Sduke#define IPV6FORWARDING 1 /* forward IP6 packets not for us */ 2720Sduke#else 2730Sduke#define IPV6FORWARDING 0 /* don't forward IP6 packets not for us */ 2740Sduke#endif /* GATEWAY6 */ 2750Sduke#endif /* !IPV6FORWARDING */ 2760Sduke 2770Sduke#ifndef IPV6_SENDREDIRECTS 2780Sduke#define IPV6_SENDREDIRECTS 1 2790Sduke#endif 2800Sduke 2810Sdukeint ip6_forwarding = IPV6FORWARDING; /* act as router? */ 2820Sdukeint ip6_sendredirects = IPV6_SENDREDIRECTS; 2830Sdukeint ip6_defhlim = IPV6_DEFHLIM; 2840Sdukeint ip6_defmcasthlim = IPV6_DEFAULT_MULTICAST_HOPS; 2850Sdukeint ip6_accept_rtadv = 0; /* "IPV6FORWARDING ? 0 : 1" is dangerous */ 2860Sdukeint ip6_maxfragpackets; /* initialized in frag6.c:frag6_init() */ 2870Sdukeint ip6_maxfrags; /* initialized in frag6.c:frag6_init() */ 2880Sdukeint ip6_log_interval = 5; 2890Sdukeint ip6_hdrnestlimit = 50; /* appropriate? */ 2900Sdukeint ip6_dad_count = 1; /* DupAddrDetectionTransmits */ 2910Sdukeint ip6_auto_flowlabel = 1; 2920Sdukeint ip6_gif_hlim = 0; 2930Sdukeint ip6_use_deprecated = 1; /* allow deprecated addr (RFC2462 5.5.4) */ 2940Sdukeint ip6_rr_prune = 5; /* router renumbering prefix 2950Sduke * walk list every 5 sec. */ 2960Sdukeint ip6_v6only = 1; 2970Sduke 2980Sdukeint ip6_keepfaith = 0; 2990Sduketime_t ip6_log_time = (time_t)0L; 3000Sduke 3010Sduke/* icmp6 */ 3020Sduke/* 3030Sduke * BSDI4 defines these variables in in_proto.c... 3040Sduke * XXX: what if we don't define INET? Should we define pmtu6_expire 3050Sduke * or so? (jinmei@kame.net 19990310) 3060Sduke */ 3070Sdukeint pmtu_expire = 60*10; 3080Sdukeint pmtu_probe = 60*2; 3090Sduke 3100Sduke/* raw IP6 parameters */ 3110Sduke/* 3120Sduke * Nominal space allocated to a raw ip socket. 3130Sduke */ 3140Sduke#define RIPV6SNDQ 8192 3150Sduke#define RIPV6RCVQ 8192 3160Sduke 3170Sdukeu_long rip6_sendspace = RIPV6SNDQ; 3180Sdukeu_long rip6_recvspace = RIPV6RCVQ; 3190Sduke 3200Sduke/* ICMPV6 parameters */ 3210Sdukeint icmp6_rediraccept = 1; /* accept and process redirects */ 3220Sdukeint icmp6_redirtimeout = 10 * 60; /* 10 minutes */ 3230Sdukeint icmp6errppslim = 100; /* 100pps */ 3240Sdukeint icmp6_nodeinfo = 3; /* enable/disable NI response */ 3250Sduke 3260Sduke/* UDP on IP6 parameters */ 3270Sdukeint udp6_sendspace = 9216; /* really max datagram size */ 3280Sdukeint udp6_recvspace = 40 * (1024 + sizeof(struct sockaddr_in6)); 3290Sduke /* 40 1K datagrams */ 3300Sduke 3310Sduke/* 3320Sduke * sysctl related items. 3330Sduke */ 3340SdukeSYSCTL_NODE(_net, PF_INET6, inet6, CTLFLAG_RW, 0, 3350Sduke "Internet6 Family"); 3360Sduke 3370Sduke/* net.inet6 */ 3380SdukeSYSCTL_NODE(_net_inet6, IPPROTO_IPV6, ip6, CTLFLAG_RW, 0, "IP6"); 3390SdukeSYSCTL_NODE(_net_inet6, IPPROTO_ICMPV6, icmp6, CTLFLAG_RW, 0, "ICMP6"); 3400SdukeSYSCTL_NODE(_net_inet6, IPPROTO_UDP, udp6, CTLFLAG_RW, 0, "UDP6"); 3410SdukeSYSCTL_NODE(_net_inet6, IPPROTO_TCP, tcp6, CTLFLAG_RW, 0, "TCP6"); 3420Sduke#ifdef IPSEC 3430SdukeSYSCTL_NODE(_net_inet6, IPPROTO_ESP, ipsec6, CTLFLAG_RW, 0, "IPSEC6"); 3440Sduke#endif /* IPSEC */ 3450Sduke 3460Sduke/* net.inet6.ip6 */ 3470Sdukestatic int 3480Sdukesysctl_ip6_temppltime(SYSCTL_HANDLER_ARGS) 3490Sduke{ 3500Sduke int error = 0; 3510Sduke int old; 3520Sduke 3530Sduke error = SYSCTL_OUT(req, arg1, sizeof(int)); 3540Sduke if (error || !req->newptr) 3550Sduke return (error); 3560Sduke old = ip6_temp_preferred_lifetime; 3570Sduke error = SYSCTL_IN(req, arg1, sizeof(int)); 3580Sduke if (ip6_temp_preferred_lifetime < 3590Sduke ip6_desync_factor + ip6_temp_regen_advance) { 3600Sduke ip6_temp_preferred_lifetime = old; 3610Sduke return (EINVAL); 3620Sduke } 3630Sduke return (error); 3640Sduke} 3650Sduke 3660Sdukestatic int 3670Sdukesysctl_ip6_tempvltime(SYSCTL_HANDLER_ARGS) 3680Sduke{ 3690Sduke int error = 0; 3700Sduke int old; 3710Sduke 3720Sduke error = SYSCTL_OUT(req, arg1, sizeof(int)); 3730Sduke if (error || !req->newptr) 3740Sduke return (error); 3750Sduke old = ip6_temp_valid_lifetime; 3760Sduke error = SYSCTL_IN(req, arg1, sizeof(int)); 3770Sduke if (ip6_temp_valid_lifetime < ip6_temp_preferred_lifetime) { 3780Sduke ip6_temp_preferred_lifetime = old; 3790Sduke return (EINVAL); 3800Sduke } 3810Sduke return (error); 3820Sduke} 3830Sduke 3840SdukeSYSCTL_INT(_net_inet6_ip6, IPV6CTL_FORWARDING, 3850Sduke forwarding, CTLFLAG_RW, &ip6_forwarding, 0, ""); 3860SdukeSYSCTL_INT(_net_inet6_ip6, IPV6CTL_SENDREDIRECTS, 3870Sduke redirect, CTLFLAG_RW, &ip6_sendredirects, 0, ""); 3880SdukeSYSCTL_INT(_net_inet6_ip6, IPV6CTL_DEFHLIM, 3890Sduke hlim, CTLFLAG_RW, &ip6_defhlim, 0, ""); 3900SdukeSYSCTL_STRUCT(_net_inet6_ip6, IPV6CTL_STATS, stats, CTLFLAG_RD, 3910Sduke &ip6stat, ip6stat, ""); 3920SdukeSYSCTL_INT(_net_inet6_ip6, IPV6CTL_MAXFRAGPACKETS, 3930Sduke maxfragpackets, CTLFLAG_RW, &ip6_maxfragpackets, 0, ""); 3940SdukeSYSCTL_INT(_net_inet6_ip6, IPV6CTL_ACCEPT_RTADV, 3950Sduke accept_rtadv, CTLFLAG_RW, &ip6_accept_rtadv, 0, ""); 3960SdukeSYSCTL_INT(_net_inet6_ip6, IPV6CTL_KEEPFAITH, 3970Sduke keepfaith, CTLFLAG_RW, &ip6_keepfaith, 0, ""); 3980SdukeSYSCTL_INT(_net_inet6_ip6, IPV6CTL_LOG_INTERVAL, 3990Sduke log_interval, CTLFLAG_RW, &ip6_log_interval, 0, ""); 4000SdukeSYSCTL_INT(_net_inet6_ip6, IPV6CTL_HDRNESTLIMIT, 4010Sduke hdrnestlimit, CTLFLAG_RW, &ip6_hdrnestlimit, 0, ""); 4020SdukeSYSCTL_INT(_net_inet6_ip6, IPV6CTL_DAD_COUNT, 4030Sduke dad_count, CTLFLAG_RW, &ip6_dad_count, 0, ""); 4040SdukeSYSCTL_INT(_net_inet6_ip6, IPV6CTL_AUTO_FLOWLABEL, 4050Sduke auto_flowlabel, CTLFLAG_RW, &ip6_auto_flowlabel, 0, ""); 4060SdukeSYSCTL_INT(_net_inet6_ip6, IPV6CTL_DEFMCASTHLIM, 4070Sduke defmcasthlim, CTLFLAG_RW, &ip6_defmcasthlim, 0, ""); 4080SdukeSYSCTL_INT(_net_inet6_ip6, IPV6CTL_GIF_HLIM, 4090Sduke gifhlim, CTLFLAG_RW, &ip6_gif_hlim, 0, ""); 4100SdukeSYSCTL_STRING(_net_inet6_ip6, IPV6CTL_KAME_VERSION, 4110Sduke kame_version, CTLFLAG_RD, __KAME_VERSION, 0, ""); 4120SdukeSYSCTL_INT(_net_inet6_ip6, IPV6CTL_USE_DEPRECATED, 4130Sduke use_deprecated, CTLFLAG_RW, &ip6_use_deprecated, 0, ""); 4140SdukeSYSCTL_INT(_net_inet6_ip6, IPV6CTL_RR_PRUNE, 4150Sduke rr_prune, CTLFLAG_RW, &ip6_rr_prune, 0, ""); 4160SdukeSYSCTL_INT(_net_inet6_ip6, IPV6CTL_USETEMPADDR, 4170Sduke use_tempaddr, CTLFLAG_RW, &ip6_use_tempaddr, 0, ""); 4180SdukeSYSCTL_OID(_net_inet6_ip6, IPV6CTL_TEMPPLTIME, temppltime, 4198170Ssla CTLTYPE_INT|CTLFLAG_RW, &ip6_temp_preferred_lifetime, 0, 4200Sduke sysctl_ip6_temppltime, "I", ""); 4210SdukeSYSCTL_OID(_net_inet6_ip6, IPV6CTL_TEMPVLTIME, tempvltime, 4228170Ssla CTLTYPE_INT|CTLFLAG_RW, &ip6_temp_valid_lifetime, 0, 4238170Ssla sysctl_ip6_tempvltime, "I", ""); 4248170SslaSYSCTL_INT(_net_inet6_ip6, IPV6CTL_V6ONLY, 4250Sduke v6only, CTLFLAG_RW, &ip6_v6only, 0, ""); 4260SdukeSYSCTL_INT(_net_inet6_ip6, IPV6CTL_AUTO_LINKLOCAL, 4270Sduke auto_linklocal, CTLFLAG_RW, &ip6_auto_linklocal, 0, ""); 4280SdukeSYSCTL_STRUCT(_net_inet6_ip6, IPV6CTL_RIP6STATS, rip6stats, CTLFLAG_RD, 4290Sduke &rip6stat, rip6stat, ""); 4300SdukeSYSCTL_INT(_net_inet6_ip6, IPV6CTL_PREFER_TEMPADDR, 431 prefer_tempaddr, CTLFLAG_RW, &ip6_prefer_tempaddr, 0, ""); 432SYSCTL_INT(_net_inet6_ip6, IPV6CTL_MAXFRAGS, 433 maxfrags, CTLFLAG_RW, &ip6_maxfrags, 0, ""); 434 435/* net.inet6.icmp6 */ 436SYSCTL_INT(_net_inet6_icmp6, ICMPV6CTL_REDIRACCEPT, 437 rediraccept, CTLFLAG_RW, &icmp6_rediraccept, 0, ""); 438SYSCTL_INT(_net_inet6_icmp6, ICMPV6CTL_REDIRTIMEOUT, 439 redirtimeout, CTLFLAG_RW, &icmp6_redirtimeout, 0, ""); 440SYSCTL_STRUCT(_net_inet6_icmp6, ICMPV6CTL_STATS, stats, CTLFLAG_RD, 441 &icmp6stat, icmp6stat, ""); 442SYSCTL_INT(_net_inet6_icmp6, ICMPV6CTL_ND6_PRUNE, 443 nd6_prune, CTLFLAG_RW, &nd6_prune, 0, ""); 444SYSCTL_INT(_net_inet6_icmp6, ICMPV6CTL_ND6_DELAY, 445 nd6_delay, CTLFLAG_RW, &nd6_delay, 0, ""); 446SYSCTL_INT(_net_inet6_icmp6, ICMPV6CTL_ND6_UMAXTRIES, 447 nd6_umaxtries, CTLFLAG_RW, &nd6_umaxtries, 0, ""); 448SYSCTL_INT(_net_inet6_icmp6, ICMPV6CTL_ND6_MMAXTRIES, 449 nd6_mmaxtries, CTLFLAG_RW, &nd6_mmaxtries, 0, ""); 450SYSCTL_INT(_net_inet6_icmp6, ICMPV6CTL_ND6_USELOOPBACK, 451 nd6_useloopback, CTLFLAG_RW, &nd6_useloopback, 0, ""); 452SYSCTL_INT(_net_inet6_icmp6, ICMPV6CTL_NODEINFO, 453 nodeinfo, CTLFLAG_RW, &icmp6_nodeinfo, 0, ""); 454SYSCTL_INT(_net_inet6_icmp6, ICMPV6CTL_ERRPPSLIMIT, 455 errppslimit, CTLFLAG_RW, &icmp6errppslim, 0, ""); 456SYSCTL_INT(_net_inet6_icmp6, ICMPV6CTL_ND6_MAXNUDHINT, 457 nd6_maxnudhint, CTLFLAG_RW, &nd6_maxnudhint, 0, ""); 458SYSCTL_INT(_net_inet6_icmp6, ICMPV6CTL_ND6_DEBUG, 459 nd6_debug, CTLFLAG_RW, &nd6_debug, 0, ""); 460