xref: /freebsd-src/sys/netinet6/in6_proto.c (revision 4f96be33fe7676c69c5abb476bb09bba0c63a3f4)
1caf43b02SWarner Losh /*-
251369649SPedro F. Giffuni  * SPDX-License-Identifier: BSD-3-Clause
351369649SPedro F. Giffuni  *
482cd038dSYoshinobu Inoue  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
582cd038dSYoshinobu Inoue  * All rights reserved.
682cd038dSYoshinobu Inoue  *
782cd038dSYoshinobu Inoue  * Redistribution and use in source and binary forms, with or without
882cd038dSYoshinobu Inoue  * modification, are permitted provided that the following conditions
982cd038dSYoshinobu Inoue  * are met:
1082cd038dSYoshinobu Inoue  * 1. Redistributions of source code must retain the above copyright
1182cd038dSYoshinobu Inoue  *    notice, this list of conditions and the following disclaimer.
1282cd038dSYoshinobu Inoue  * 2. Redistributions in binary form must reproduce the above copyright
1382cd038dSYoshinobu Inoue  *    notice, this list of conditions and the following disclaimer in the
1482cd038dSYoshinobu Inoue  *    documentation and/or other materials provided with the distribution.
1582cd038dSYoshinobu Inoue  * 3. Neither the name of the project nor the names of its contributors
1682cd038dSYoshinobu Inoue  *    may be used to endorse or promote products derived from this software
1782cd038dSYoshinobu Inoue  *    without specific prior written permission.
1882cd038dSYoshinobu Inoue  *
1982cd038dSYoshinobu Inoue  * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
2082cd038dSYoshinobu Inoue  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2182cd038dSYoshinobu Inoue  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2282cd038dSYoshinobu Inoue  * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
2382cd038dSYoshinobu Inoue  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2482cd038dSYoshinobu Inoue  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2582cd038dSYoshinobu Inoue  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2682cd038dSYoshinobu Inoue  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2782cd038dSYoshinobu Inoue  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2882cd038dSYoshinobu Inoue  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2982cd038dSYoshinobu Inoue  * SUCH DAMAGE.
30b48287a3SDavid E. O'Brien  *
31b48287a3SDavid E. O'Brien  *	$KAME: in6_proto.c,v 1.91 2001/05/27 13:28:35 itojun Exp $
3282cd038dSYoshinobu Inoue  */
3382cd038dSYoshinobu Inoue 
34caf43b02SWarner Losh /*-
3582cd038dSYoshinobu Inoue  * Copyright (c) 1982, 1986, 1993
3682cd038dSYoshinobu Inoue  *	The Regents of the University of California.  All rights reserved.
3782cd038dSYoshinobu Inoue  *
3882cd038dSYoshinobu Inoue  * Redistribution and use in source and binary forms, with or without
3982cd038dSYoshinobu Inoue  * modification, are permitted provided that the following conditions
4082cd038dSYoshinobu Inoue  * are met:
4182cd038dSYoshinobu Inoue  * 1. Redistributions of source code must retain the above copyright
4282cd038dSYoshinobu Inoue  *    notice, this list of conditions and the following disclaimer.
4382cd038dSYoshinobu Inoue  * 2. Redistributions in binary form must reproduce the above copyright
4482cd038dSYoshinobu Inoue  *    notice, this list of conditions and the following disclaimer in the
4582cd038dSYoshinobu Inoue  *    documentation and/or other materials provided with the distribution.
46fbbd9655SWarner Losh  * 3. Neither the name of the University nor the names of its contributors
4782cd038dSYoshinobu Inoue  *    may be used to endorse or promote products derived from this software
4882cd038dSYoshinobu Inoue  *    without specific prior written permission.
4982cd038dSYoshinobu Inoue  *
5082cd038dSYoshinobu Inoue  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
5182cd038dSYoshinobu Inoue  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
5282cd038dSYoshinobu Inoue  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
5382cd038dSYoshinobu Inoue  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
5482cd038dSYoshinobu Inoue  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
5582cd038dSYoshinobu Inoue  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
5682cd038dSYoshinobu Inoue  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
5782cd038dSYoshinobu Inoue  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
5882cd038dSYoshinobu Inoue  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
5982cd038dSYoshinobu Inoue  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
6082cd038dSYoshinobu Inoue  * SUCH DAMAGE.
6182cd038dSYoshinobu Inoue  */
6282cd038dSYoshinobu Inoue 
63b48287a3SDavid E. O'Brien #include <sys/cdefs.h>
64fb59c426SYoshinobu Inoue #include "opt_inet.h"
65686cdd19SJun-ichiro itojun Hagino #include "opt_inet6.h"
666a800098SYoshinobu Inoue #include "opt_ipsec.h"
67f8a8f9caSSUZUKI Shinsuke #include "opt_ipstealth.h"
68f8829a4aSRandall Stewart #include "opt_sctp.h"
6977931dd5SKip Macy #include "opt_route.h"
706a800098SYoshinobu Inoue 
7182cd038dSYoshinobu Inoue #include <sys/param.h>
7282cd038dSYoshinobu Inoue #include <sys/socket.h>
7382cd038dSYoshinobu Inoue #include <sys/socketvar.h>
74385195c0SMarko Zec #include <sys/proc.h>
7582cd038dSYoshinobu Inoue #include <sys/protosw.h>
76ebd8672cSBjoern A. Zeeb #include <sys/jail.h>
7782cd038dSYoshinobu Inoue #include <sys/kernel.h>
788ec07310SGleb Smirnoff #include <sys/malloc.h>
7982cd038dSYoshinobu Inoue #include <sys/domain.h>
8082cd038dSYoshinobu Inoue #include <sys/mbuf.h>
8182cd038dSYoshinobu Inoue #include <sys/systm.h>
8282cd038dSYoshinobu Inoue #include <sys/sysctl.h>
8382cd038dSYoshinobu Inoue 
8477fe40cfSGleb Smirnoff #include <net/if.h>
8577fe40cfSGleb Smirnoff #include <net/if_var.h>
8682cd038dSYoshinobu Inoue #include <netinet/in.h>
8777fe40cfSGleb Smirnoff #include <netinet/ip6.h>
8877fe40cfSGleb Smirnoff #include <netinet6/in6_var.h>
8977fe40cfSGleb Smirnoff #include <netinet6/ip6_var.h>
90686cdd19SJun-ichiro itojun Hagino #include <netinet/icmp6.h>
9177fe40cfSGleb Smirnoff #include <netinet6/nd6.h>
9233841545SHajimu UMEMOTO #include <netinet6/raw_ip6.h>
9382cd038dSYoshinobu Inoue 
94e7d02be1SGleb Smirnoff /* netinet6/raw_ip6.c */
9561f7427fSGleb Smirnoff extern struct protosw rip6_protosw;
96e7d02be1SGleb Smirnoff /* netinet6/udp6_usrreq.c */
97e7d02be1SGleb Smirnoff extern struct protosw udp6_protosw, udplite6_protosw;
9892e190f1SGleb Smirnoff /* netinet/tcp_usrreq.c */
9992e190f1SGleb Smirnoff extern struct protosw tcp6_protosw;
10077fe40cfSGleb Smirnoff /* netinet/sctp6_usrreq.c */
10177fe40cfSGleb Smirnoff extern struct protosw sctp6_seqpacket_protosw, sctp6_stream_protosw;
102e7d02be1SGleb Smirnoff 
10382cd038dSYoshinobu Inoue /*
10482cd038dSYoshinobu Inoue  * TCP/IP protocol family: IP6, ICMP6, UDP, TCP.
10582cd038dSYoshinobu Inoue  */
1068d5a3ca7SBjoern A. Zeeb FEATURE(inet6, "Internet Protocol version 6");
10782cd038dSYoshinobu Inoue 
108303989a2SRuslan Ermilov struct domain inet6domain = {
109303989a2SRuslan Ermilov 	.dom_family =		AF_INET6,
110303989a2SRuslan Ermilov 	.dom_name =		"internet6",
111303989a2SRuslan Ermilov 	.dom_rtattach =		in6_inithead,
112bc29160dSMarko Zec #ifdef VIMAGE
113bc29160dSMarko Zec 	.dom_rtdetach =		in6_detachhead,
114bc29160dSMarko Zec #endif
115303989a2SRuslan Ermilov 	.dom_ifattach =		in6_domifattach,
1161a75e3b2SAlexander V. Chernikov 	.dom_ifdetach =		in6_domifdetach,
117e7d02be1SGleb Smirnoff 	.dom_ifmtu    =		in6_domifmtu,
11861f7427fSGleb Smirnoff 	.dom_nprotosw =		14,
119e7d02be1SGleb Smirnoff 	.dom_protosw = {
120e7d02be1SGleb Smirnoff 		&tcp6_protosw,
121e7d02be1SGleb Smirnoff 		&udp6_protosw,
122e7d02be1SGleb Smirnoff #ifdef SCTP
123e7d02be1SGleb Smirnoff 		&sctp6_seqpacket_protosw,
124e7d02be1SGleb Smirnoff 		&sctp6_stream_protosw,
125e7d02be1SGleb Smirnoff #else
126e7d02be1SGleb Smirnoff 		NULL, NULL,
127e7d02be1SGleb Smirnoff #endif
128e7d02be1SGleb Smirnoff 		&udplite6_protosw,
129e7d02be1SGleb Smirnoff 		&rip6_protosw,
130e7d02be1SGleb Smirnoff 		/* Spacer 8 times for loadable protocols. XXXGL: why 8? */
131e7d02be1SGleb Smirnoff 		NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
132e7d02be1SGleb Smirnoff 	},
133303989a2SRuslan Ermilov };
13482cd038dSYoshinobu Inoue 
135644ca084SGleb Smirnoff DOMAIN_SET(inet6);
13682cd038dSYoshinobu Inoue 
13782cd038dSYoshinobu Inoue /*
13882cd038dSYoshinobu Inoue  * Internet configuration info
13982cd038dSYoshinobu Inoue  */
14082cea7e6SBjoern A. Zeeb #ifndef	IPV6FORWARDING
14182cea7e6SBjoern A. Zeeb #ifdef GATEWAY6
14282cea7e6SBjoern A. Zeeb #define	IPV6FORWARDING	1	/* forward IP6 packets not for us */
14382cea7e6SBjoern A. Zeeb #else
14482cea7e6SBjoern A. Zeeb #define	IPV6FORWARDING	0	/* don't forward IP6 packets not for us */
14582cea7e6SBjoern A. Zeeb #endif /* GATEWAY6 */
14682cea7e6SBjoern A. Zeeb #endif /* !IPV6FORWARDING */
14782cea7e6SBjoern A. Zeeb 
14882cea7e6SBjoern A. Zeeb #ifndef	IPV6_SENDREDIRECTS
14982cea7e6SBjoern A. Zeeb #define	IPV6_SENDREDIRECTS	1
15082cea7e6SBjoern A. Zeeb #endif
15182cea7e6SBjoern A. Zeeb 
15282cea7e6SBjoern A. Zeeb VNET_DEFINE(int, ip6_forwarding) = IPV6FORWARDING;	/* act as router? */
15382cea7e6SBjoern A. Zeeb VNET_DEFINE(int, ip6_sendredirects) = IPV6_SENDREDIRECTS;
15482cea7e6SBjoern A. Zeeb VNET_DEFINE(int, ip6_defhlim) = IPV6_DEFHLIM;
15582cea7e6SBjoern A. Zeeb VNET_DEFINE(int, ip6_defmcasthlim) = IPV6_DEFAULT_MULTICAST_HOPS;
15682cea7e6SBjoern A. Zeeb VNET_DEFINE(int, ip6_accept_rtadv) = 0;
157e7fa8d0aSHiroki Sato VNET_DEFINE(int, ip6_no_radr) = 0;
158e7fa8d0aSHiroki Sato VNET_DEFINE(int, ip6_norbit_raif) = 0;
159049087a0SHiroki Sato VNET_DEFINE(int, ip6_rfc6204w3) = 0;
16082cea7e6SBjoern A. Zeeb VNET_DEFINE(int, ip6_hdrnestlimit) = 15;/* How many header options will we
16182cea7e6SBjoern A. Zeeb 					 * process? */
16282cea7e6SBjoern A. Zeeb VNET_DEFINE(int, ip6_dad_count) = 1;	/* DupAddrDetectionTransmits */
16382cea7e6SBjoern A. Zeeb VNET_DEFINE(int, ip6_auto_flowlabel) = 1;
16482cea7e6SBjoern A. Zeeb VNET_DEFINE(int, ip6_use_deprecated) = 1;/* allow deprecated addr
16582cea7e6SBjoern A. Zeeb 					 * (RFC2462 5.5.4) */
16682cea7e6SBjoern A. Zeeb VNET_DEFINE(int, ip6_rr_prune) = 5;	/* router renumbering prefix
16782cea7e6SBjoern A. Zeeb 					 * walk list every 5 sec. */
16882cea7e6SBjoern A. Zeeb VNET_DEFINE(int, ip6_mcast_pmtu) = 0;	/* enable pMTU discovery for multicast? */
16982cea7e6SBjoern A. Zeeb VNET_DEFINE(int, ip6_v6only) = 1;
17082cea7e6SBjoern A. Zeeb 
17182cea7e6SBjoern A. Zeeb #ifdef IPSTEALTH
17282cea7e6SBjoern A. Zeeb VNET_DEFINE(int, ip6stealth) = 0;
17382cea7e6SBjoern A. Zeeb #endif
1743eaffc62SPawel Biernacki VNET_DEFINE(bool, ip6_log_cannot_forward) = 1;
17582cd038dSYoshinobu Inoue 
17682cd038dSYoshinobu Inoue /*
17782cd038dSYoshinobu Inoue  * BSDI4 defines these variables in in_proto.c...
17882cd038dSYoshinobu Inoue  * XXX: what if we don't define INET? Should we define pmtu6_expire
17982cd038dSYoshinobu Inoue  * or so? (jinmei@kame.net 19990310)
18082cd038dSYoshinobu Inoue  */
18182cea7e6SBjoern A. Zeeb VNET_DEFINE(int, pmtu_expire) = 60*10;
18282cea7e6SBjoern A. Zeeb VNET_DEFINE(int, pmtu_probe) = 60*2;
18382cd038dSYoshinobu Inoue 
18435b6e52cSPawel Biernacki VNET_DEFINE_STATIC(int, ip6_log_interval) = 5;
18535b6e52cSPawel Biernacki VNET_DEFINE_STATIC(int, ip6_log_count) = 0;
18635b6e52cSPawel Biernacki VNET_DEFINE_STATIC(struct timeval, ip6_log_last) = { 0 };
18735b6e52cSPawel Biernacki 
18835b6e52cSPawel Biernacki #define	V_ip6_log_interval	VNET(ip6_log_interval)
18935b6e52cSPawel Biernacki #define	V_ip6_log_count		VNET(ip6_log_count)
19035b6e52cSPawel Biernacki #define	V_ip6_log_last		VNET(ip6_log_last)
19135b6e52cSPawel Biernacki 
19282cd038dSYoshinobu Inoue /*
19382cd038dSYoshinobu Inoue  * sysctl related items.
19482cd038dSYoshinobu Inoue  */
1957029da5cSPawel Biernacki SYSCTL_NODE(_net, PF_INET6, inet6, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
19682cd038dSYoshinobu Inoue     "Internet6 Family");
19782cd038dSYoshinobu Inoue 
19882cd038dSYoshinobu Inoue /* net.inet6 */
1997029da5cSPawel Biernacki SYSCTL_NODE(_net_inet6,	IPPROTO_IPV6, ip6, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
2007029da5cSPawel Biernacki     "IP6");
2017029da5cSPawel Biernacki SYSCTL_NODE(_net_inet6,	IPPROTO_ICMPV6, icmp6, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
2027029da5cSPawel Biernacki     "ICMP6");
2037029da5cSPawel Biernacki SYSCTL_NODE(_net_inet6,	IPPROTO_UDP, udp6, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
2047029da5cSPawel Biernacki     "UDP6");
2057029da5cSPawel Biernacki SYSCTL_NODE(_net_inet6,	IPPROTO_TCP, tcp6, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
2067029da5cSPawel Biernacki     "TCP6");
20795033af9SMark Johnston #if defined(SCTP) || defined(SCTP_SUPPORT)
2087029da5cSPawel Biernacki SYSCTL_NODE(_net_inet6,	IPPROTO_SCTP, sctp6, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
2097029da5cSPawel Biernacki     "SCTP6");
210f8829a4aSRandall Stewart #endif
211fcf59617SAndrey V. Elsukov #if defined(IPSEC) || defined(IPSEC_SUPPORT)
2127029da5cSPawel Biernacki SYSCTL_NODE(_net_inet6,	IPPROTO_ESP, ipsec6, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
2137029da5cSPawel Biernacki     "IPSEC6");
214b2630c29SGeorge V. Neville-Neil #endif /* IPSEC */
21582cd038dSYoshinobu Inoue 
21682cd038dSYoshinobu Inoue /* net.inet6.ip6 */
21782cd038dSYoshinobu Inoue static int
sysctl_ip6_temppltime(SYSCTL_HANDLER_ARGS)21833841545SHajimu UMEMOTO sysctl_ip6_temppltime(SYSCTL_HANDLER_ARGS)
21982cd038dSYoshinobu Inoue {
22082366c22SMark Johnston 	int error, val;
22182cd038dSYoshinobu Inoue 
22282366c22SMark Johnston 	val = V_ip6_temp_preferred_lifetime;
22382366c22SMark Johnston 	error = sysctl_handle_int(oidp, &val, 0, req);
22482366c22SMark Johnston 	if (error != 0 || !req->newptr)
22582cd038dSYoshinobu Inoue 		return (error);
22682366c22SMark Johnston 	if (val < V_ip6_desync_factor + V_ip6_temp_regen_advance)
22733841545SHajimu UMEMOTO 		return (EINVAL);
22882366c22SMark Johnston 	V_ip6_temp_preferred_lifetime = val;
22982366c22SMark Johnston 	return (0);
23082cd038dSYoshinobu Inoue }
23182cd038dSYoshinobu Inoue 
232686cdd19SJun-ichiro itojun Hagino static int
sysctl_ip6_tempvltime(SYSCTL_HANDLER_ARGS)23333841545SHajimu UMEMOTO sysctl_ip6_tempvltime(SYSCTL_HANDLER_ARGS)
234686cdd19SJun-ichiro itojun Hagino {
23582366c22SMark Johnston 	int error, val;
236686cdd19SJun-ichiro itojun Hagino 
23782366c22SMark Johnston 	val = V_ip6_temp_valid_lifetime;
23882366c22SMark Johnston 	error = sysctl_handle_int(oidp, &val, 0, req);
23982366c22SMark Johnston 	if (error != 0 || !req->newptr)
240686cdd19SJun-ichiro itojun Hagino 		return (error);
24182366c22SMark Johnston 	if (val < V_ip6_temp_preferred_lifetime)
242686cdd19SJun-ichiro itojun Hagino 		return (EINVAL);
24382366c22SMark Johnston 	V_ip6_temp_valid_lifetime = val;
24482366c22SMark Johnston 	return (0);
245686cdd19SJun-ichiro itojun Hagino }
246686cdd19SJun-ichiro itojun Hagino 
24735b6e52cSPawel Biernacki int
ip6_log_ratelimit(void)24835b6e52cSPawel Biernacki ip6_log_ratelimit(void)
24935b6e52cSPawel Biernacki {
25035b6e52cSPawel Biernacki 
25135b6e52cSPawel Biernacki 	return (ppsratecheck(&V_ip6_log_last, &V_ip6_log_count,
25235b6e52cSPawel Biernacki 	    V_ip6_log_interval));
25335b6e52cSPawel Biernacki }
25435b6e52cSPawel Biernacki 
2556df8a710SGleb Smirnoff SYSCTL_INT(_net_inet6_ip6, IPV6CTL_FORWARDING, forwarding,
25682366c22SMark Johnston 	CTLFLAG_VNET | CTLFLAG_RW, &VNET_NAME(ip6_forwarding), 0,
257762d16d9SMark Johnston 	"Enable forwarding of IPv6 packets between interfaces");
2586df8a710SGleb Smirnoff SYSCTL_INT(_net_inet6_ip6, IPV6CTL_SENDREDIRECTS, redirect,
25982366c22SMark Johnston 	CTLFLAG_VNET | CTLFLAG_RW, &VNET_NAME(ip6_sendredirects), 0,
260762d16d9SMark Johnston 	"Send ICMPv6 redirects for unforwardable IPv6 packets");
26182366c22SMark Johnston SYSCTL_INT(_net_inet6_ip6, IPV6CTL_DEFHLIM, hlim,
26282366c22SMark Johnston 	CTLFLAG_VNET | CTLFLAG_RW, &VNET_NAME(ip6_defhlim), 0,
263762d16d9SMark Johnston 	"Default hop limit to use for outgoing IPv6 packets");
264a786f679SAndrey V. Elsukov SYSCTL_VNET_PCPUSTAT(_net_inet6_ip6, IPV6CTL_STATS, stats, struct ip6stat,
26582366c22SMark Johnston 	ip6stat,
26682366c22SMark Johnston 	"IP6 statistics (struct ip6stat, netinet6/ip6_var.h)");
2676df8a710SGleb Smirnoff SYSCTL_INT(_net_inet6_ip6, IPV6CTL_ACCEPT_RTADV, accept_rtadv,
268*03dac3e3SZhenlei Huang 	CTLFLAG_VNET | CTLFLAG_RWTUN, &VNET_NAME(ip6_accept_rtadv), 0,
26982366c22SMark Johnston 	"Default value of per-interface flag for accepting ICMPv6 RA messages");
2706df8a710SGleb Smirnoff SYSCTL_INT(_net_inet6_ip6, IPV6CTL_NO_RADR, no_radr,
271*03dac3e3SZhenlei Huang 	CTLFLAG_VNET | CTLFLAG_RWTUN, &VNET_NAME(ip6_no_radr), 0,
272e7fa8d0aSHiroki Sato 	"Default value of per-interface flag to control whether routers "
273e7fa8d0aSHiroki Sato 	"sending ICMPv6 RA messages on that interface are added into the "
27482366c22SMark Johnston 	"default router list");
2756df8a710SGleb Smirnoff SYSCTL_INT(_net_inet6_ip6, IPV6CTL_NORBIT_RAIF, norbit_raif,
2766df8a710SGleb Smirnoff 	CTLFLAG_VNET | CTLFLAG_RW, &VNET_NAME(ip6_norbit_raif), 0,
27782366c22SMark Johnston 	"Always set clear the R flag in ICMPv6 NA messages when accepting RA "
27882366c22SMark Johnston 	"on the interface");
2796df8a710SGleb Smirnoff SYSCTL_INT(_net_inet6_ip6, IPV6CTL_RFC6204W3, rfc6204w3,
2806df8a710SGleb Smirnoff 	CTLFLAG_VNET | CTLFLAG_RW, &VNET_NAME(ip6_rfc6204w3), 0,
281049087a0SHiroki Sato 	"Accept the default router list from ICMPv6 RA messages even "
28282366c22SMark Johnston 	"when packet forwarding is enabled");
2836df8a710SGleb Smirnoff SYSCTL_INT(_net_inet6_ip6, IPV6CTL_LOG_INTERVAL, log_interval,
28482366c22SMark Johnston 	CTLFLAG_VNET | CTLFLAG_RW, &VNET_NAME(ip6_log_interval), 0,
28582366c22SMark Johnston 	"Frequency in seconds at which to log IPv6 forwarding errors");
2866df8a710SGleb Smirnoff SYSCTL_INT(_net_inet6_ip6, IPV6CTL_HDRNESTLIMIT, hdrnestlimit,
28782366c22SMark Johnston 	CTLFLAG_VNET | CTLFLAG_RW, &VNET_NAME(ip6_hdrnestlimit), 0,
288762d16d9SMark Johnston 	"Default maximum number of IPv6 extension headers permitted on "
289762d16d9SMark Johnston 	"incoming IPv6 packets, 0 for no artificial limit");
2906df8a710SGleb Smirnoff SYSCTL_INT(_net_inet6_ip6, IPV6CTL_DAD_COUNT, dad_count,
29182366c22SMark Johnston 	CTLFLAG_VNET | CTLFLAG_RW, &VNET_NAME(ip6_dad_count), 0,
29282366c22SMark Johnston 	"Number of ICMPv6 NS messages sent during duplicate address detection");
2936df8a710SGleb Smirnoff SYSCTL_INT(_net_inet6_ip6, IPV6CTL_AUTO_FLOWLABEL, auto_flowlabel,
29482366c22SMark Johnston 	CTLFLAG_VNET | CTLFLAG_RW, &VNET_NAME(ip6_auto_flowlabel), 0,
29582366c22SMark Johnston 	"Provide an IPv6 flowlabel in outbound packets");
2966df8a710SGleb Smirnoff SYSCTL_INT(_net_inet6_ip6, IPV6CTL_DEFMCASTHLIM, defmcasthlim,
29782366c22SMark Johnston 	CTLFLAG_VNET | CTLFLAG_RW, &VNET_NAME(ip6_defmcasthlim), 0,
298762d16d9SMark Johnston 	"Default hop limit for IPv6 multicast packets originating from this "
299762d16d9SMark Johnston 	"node");
300eddfbb76SRobert Watson SYSCTL_STRING(_net_inet6_ip6, IPV6CTL_KAME_VERSION, kame_version,
30182366c22SMark Johnston 	CTLFLAG_RD, __KAME_VERSION, 0,
30282366c22SMark Johnston 	"KAME version string");
3036df8a710SGleb Smirnoff SYSCTL_INT(_net_inet6_ip6, IPV6CTL_USE_DEPRECATED, use_deprecated,
30482366c22SMark Johnston 	CTLFLAG_VNET | CTLFLAG_RW, &VNET_NAME(ip6_use_deprecated), 0,
30582366c22SMark Johnston 	"Allow the use of addresses whose preferred lifetimes have expired");
3066df8a710SGleb Smirnoff SYSCTL_INT(_net_inet6_ip6, IPV6CTL_RR_PRUNE, rr_prune,
30782366c22SMark Johnston 	CTLFLAG_VNET | CTLFLAG_RW, &VNET_NAME(ip6_rr_prune), 0,
30882366c22SMark Johnston 	""); /* XXX unused */
3096df8a710SGleb Smirnoff SYSCTL_INT(_net_inet6_ip6, IPV6CTL_USETEMPADDR, use_tempaddr,
31082366c22SMark Johnston 	CTLFLAG_VNET | CTLFLAG_RW, &VNET_NAME(ip6_use_tempaddr), 0,
31182366c22SMark Johnston 	"Create RFC3041 temporary addresses for autoconfigured addresses");
3126df8a710SGleb Smirnoff SYSCTL_PROC(_net_inet6_ip6, IPV6CTL_TEMPPLTIME, temppltime,
3137029da5cSPawel Biernacki 	CTLFLAG_VNET | CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT,
31482366c22SMark Johnston 	NULL, 0, sysctl_ip6_temppltime, "I",
31582366c22SMark Johnston 	"Maximum preferred lifetime for temporary addresses");
3166df8a710SGleb Smirnoff SYSCTL_PROC(_net_inet6_ip6, IPV6CTL_TEMPVLTIME, tempvltime,
3177029da5cSPawel Biernacki 	CTLFLAG_VNET | CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT,
31882366c22SMark Johnston 	NULL, 0, sysctl_ip6_tempvltime, "I",
31982366c22SMark Johnston 	"Maximum valid lifetime for temporary addresses");
3206df8a710SGleb Smirnoff SYSCTL_INT(_net_inet6_ip6, IPV6CTL_V6ONLY, v6only,
32182366c22SMark Johnston 	CTLFLAG_VNET | CTLFLAG_RW, &VNET_NAME(ip6_v6only), 0,
32282366c22SMark Johnston 	"Restrict AF_INET6 sockets to IPv6 addresses only");
3236df8a710SGleb Smirnoff SYSCTL_INT(_net_inet6_ip6, IPV6CTL_AUTO_LINKLOCAL, auto_linklocal,
324*03dac3e3SZhenlei Huang 	CTLFLAG_VNET | CTLFLAG_RWTUN, &VNET_NAME(ip6_auto_linklocal), 0,
325a283298cSHiroki Sato 	"Default value of per-interface flag for automatically adding an IPv6 "
326a283298cSHiroki Sato 	"link-local address to interfaces when attached");
327a786f679SAndrey V. Elsukov SYSCTL_VNET_PCPUSTAT(_net_inet6_ip6, IPV6CTL_RIP6STATS, rip6stats,
328a786f679SAndrey V. Elsukov 	struct rip6stat, rip6stat,
329a786f679SAndrey V. Elsukov 	"Raw IP6 statistics (struct rip6stat, netinet6/raw_ip6.h)");
3306df8a710SGleb Smirnoff SYSCTL_INT(_net_inet6_ip6, IPV6CTL_PREFER_TEMPADDR, prefer_tempaddr,
33182366c22SMark Johnston 	CTLFLAG_VNET | CTLFLAG_RW, &VNET_NAME(ip6_prefer_tempaddr), 0,
33282366c22SMark Johnston 	"Prefer RFC3041 temporary addresses in source address selection");
3336df8a710SGleb Smirnoff SYSCTL_INT(_net_inet6_ip6, IPV6CTL_USE_DEFAULTZONE, use_defaultzone,
33482366c22SMark Johnston 	CTLFLAG_VNET | CTLFLAG_RW, &VNET_NAME(ip6_use_defzone), 0,
33582366c22SMark Johnston 	"Use the default scope zone when none is specified");
3366df8a710SGleb Smirnoff SYSCTL_INT(_net_inet6_ip6, IPV6CTL_MCAST_PMTU, mcast_pmtu,
33782366c22SMark Johnston 	CTLFLAG_VNET | CTLFLAG_RW, &VNET_NAME(ip6_mcast_pmtu), 0,
33882366c22SMark Johnston 	"Enable path MTU discovery for multicast packets");
339f8a8f9caSSUZUKI Shinsuke #ifdef IPSTEALTH
3406df8a710SGleb Smirnoff SYSCTL_INT(_net_inet6_ip6, IPV6CTL_STEALTH, stealth, CTLFLAG_VNET | CTLFLAG_RW,
34182366c22SMark Johnston 	&VNET_NAME(ip6stealth), 0,
34282366c22SMark Johnston 	"Forward IPv6 packets without decrementing their TTL");
343f8a8f9caSSUZUKI Shinsuke #endif
3443eaffc62SPawel Biernacki SYSCTL_BOOL(_net_inet6_ip6, OID_AUTO,
3453eaffc62SPawel Biernacki 	log_cannot_forward, CTLFLAG_VNET | CTLFLAG_RW,
3463eaffc62SPawel Biernacki 	&VNET_NAME(ip6_log_cannot_forward), 1,
3473eaffc62SPawel Biernacki 	"Log packets that cannot be forwarded");
348