#
# IPv6 configuration
#

#   IPv6 as module will cause a CRASH if you try to unload it
menuconfig IPV6
	tristate "The IPv6 protocol"
	default m
	---help---
	  This is complemental support for the IP version 6.
	  You will still be able to do traditional IPv4 networking as well.

	  For general information about IPv6, see
	  <http://playground.sun.com/pub/ipng/html/ipng-main.html>.
	  For Linux IPv6 development information, see <http://www.linux-ipv6.org>.
	  For specific information about IPv6 under Linux, read the HOWTO at
	  <http://www.bieringer.de/linux/IPv6/>.

	  To compile this protocol support as a module, choose M here: the 
	  module will be called ipv6.

if IPV6

config IPV6_PRIVACY
	bool "IPv6: Privacy Extensions (RFC 3041) support"
	---help---
	  Privacy Extensions for Stateless Address Autoconfiguration in IPv6
	  support.  With this option, additional periodically-altered
	  pseudo-random global-scope unicast address(es) will be assigned to
	  your interface(s).
	
	  We use our standard pseudo-random algorithm to generate the
          randomized interface identifier, instead of one described in RFC 3041.

	  By default the kernel does not generate temporary addresses.
	  To use temporary addresses, do
	
	        echo 2 >/proc/sys/net/ipv6/conf/all/use_tempaddr 

	  See <file:Documentation/networking/ip-sysctl.txt> for details.

config IPV6_ROUTER_PREF
	bool "IPv6: Router Preference (RFC 4191) support"
	---help---
	  Router Preference is an optional extension to the Router
	  Advertisement message which improves the ability of hosts
	  to pick an appropriate router, especially when the hosts
	  are placed in a multi-homed network.

	  If unsure, say N.

config IPV6_ROUTE_INFO
	bool "IPv6: Route Information (RFC 4191) support (EXPERIMENTAL)"
	depends on IPV6_ROUTER_PREF && EXPERIMENTAL
	---help---
	  This is experimental support of Route Information.

	  If unsure, say N.

config IPV6_OPTIMISTIC_DAD
	bool "IPv6: Enable RFC 4429 Optimistic DAD (EXPERIMENTAL)"
	depends on EXPERIMENTAL
	---help---
	  This is experimental support for optimistic Duplicate
	  Address Detection.  It allows for autoconfigured addresses
	  to be used more quickly.

	  If unsure, say N.

config INET6_AH
	tristate "IPv6: AH transformation"
	select XFRM_ALGO
	select CRYPTO
	select CRYPTO_HMAC
	select CRYPTO_MD5
	select CRYPTO_SHA1
	---help---
	  Support for IPsec AH.

	  If unsure, say Y.

config INET6_ESP
	tristate "IPv6: ESP transformation"
	select XFRM_ALGO
	select CRYPTO
	select CRYPTO_AUTHENC
	select CRYPTO_HMAC
	select CRYPTO_MD5
	select CRYPTO_CBC
	select CRYPTO_SHA1
	select CRYPTO_DES
	---help---
	  Support for IPsec ESP.

	  If unsure, say Y.

config INET6_IPCOMP
	tristate "IPv6: IPComp transformation"
	select INET6_XFRM_TUNNEL
	select XFRM_IPCOMP
	---help---
	  Support for IP Payload Compression Protocol (IPComp) (RFC3173),
	  typically needed for IPsec.

	  If unsure, say Y.

config IPV6_MIP6
	tristate "IPv6: Mobility (EXPERIMENTAL)"
	depends on EXPERIMENTAL
	select XFRM
	---help---
	  Support for IPv6 Mobility described in RFC 3775.

	  If unsure, say N.

config INET6_XFRM_TUNNEL
	tristate
	select INET6_TUNNEL
	default n

config INET6_TUNNEL
	tristate
	default n

config INET6_XFRM_MODE_TRANSPORT
	tristate "IPv6: IPsec transport mode"
	default IPV6
	select XFRM
	---help---
	  Support for IPsec transport mode.

	  If unsure, say Y.

config INET6_XFRM_MODE_TUNNEL
	tristate "IPv6: IPsec tunnel mode"
	default IPV6
	select XFRM
	---help---
	  Support for IPsec tunnel mode.

	  If unsure, say Y.

config INET6_XFRM_MODE_BEET
	tristate "IPv6: IPsec BEET mode"
	default IPV6
	select XFRM
	---help---
	  Support for IPsec BEET mode.

	  If unsure, say Y.

config INET6_XFRM_MODE_ROUTEOPTIMIZATION
	tristate "IPv6: MIPv6 route optimization mode (EXPERIMENTAL)"
	depends on EXPERIMENTAL
	select XFRM
	---help---
	  Support for MIPv6 route optimization mode.

config IPV6_SIT
	tristate "IPv6: IPv6-in-IPv4 tunnel (SIT driver)"
	select INET_TUNNEL
	select IPV6_NDISC_NODETYPE
	default y
	---help---
	  Tunneling means encapsulating data of one protocol type within
	  another protocol and sending it over a channel that understands the
	  encapsulating protocol. This driver implements encapsulation of IPv6
	  into IPv4 packets. This is useful if you want to connect two IPv6
	  networks over an IPv4-only path.

	  Saying M here will produce a module called sit. If unsure, say Y.

config IPV6_SIT_6RD
	bool "IPv6: IPv6 Rapid Deployment (6RD) (EXPERIMENTAL)"
	depends on IPV6_SIT && EXPERIMENTAL
	default n
	---help---
	  IPv6 Rapid Deployment (6rd; draft-ietf-softwire-ipv6-6rd) builds upon
	  mechanisms of 6to4 (RFC3056) to enable a service provider to rapidly
	  deploy IPv6 unicast service to IPv4 sites to which it provides
	  customer premise equipment.  Like 6to4, it utilizes stateless IPv6 in
	  IPv4 encapsulation in order to transit IPv4-only network
	  infrastructure.  Unlike 6to4, a 6rd service provider uses an IPv6
	  prefix of its own in place of the fixed 6to4 prefix.

	  With this option enabled, the SIT driver offers 6rd functionality by
	  providing additional ioctl API to configure the IPv6 Prefix for in
	  stead of static 2002::/16 for 6to4.

	  If unsure, say N.

config IPV6_NDISC_NODETYPE
	bool

config IPV6_TUNNEL
	tristate "IPv6: IP-in-IPv6 tunnel (RFC2473)"
	select INET6_TUNNEL
	---help---
	  Support for IPv6-in-IPv6 and IPv4-in-IPv6 tunnels described in
	  RFC 2473.

	  If unsure, say N.

config IPV6_MULTIPLE_TABLES
	bool "IPv6: Multiple Routing Tables"
	depends on EXPERIMENTAL
	select FIB_RULES
	---help---
	  Support multiple routing tables.

config IPV6_SUBTREES
	bool "IPv6: source address based routing"
	depends on IPV6_MULTIPLE_TABLES
	---help---
	  Enable routing by source address or prefix.

	  The destination address is still the primary routing key, so mixing
	  normal and source prefix specific routes in the same routing table
	  may sometimes lead to unintended routing behavior.  This can be
	  avoided by defining different routing tables for the normal and
	  source prefix specific routes.

	  If unsure, say N.

config IPV6_MROUTE
	bool "IPv6: multicast routing (EXPERIMENTAL)"
	depends on IPV6 && EXPERIMENTAL
	---help---
	  Experimental support for IPv6 multicast forwarding.
	  If unsure, say N.

config IPV6_MROUTE_MULTIPLE_TABLES
	bool "IPv6: multicast policy routing"
	depends on IPV6_MROUTE
	select FIB_RULES
	help
	  Normally, a multicast router runs a userspace daemon and decides
	  what to do with a multicast packet based on the source and
	  destination addresses. If you say Y here, the multicast router
	  will also be able to take interfaces and packet marks into
	  account and run multiple instances of userspace daemons
	  simultaneously, each one handling a single table.

	  If unsure, say N.

config IPV6_PIMSM_V2
	bool "IPv6: PIM-SM version 2 support (EXPERIMENTAL)"
	depends on IPV6_MROUTE
	---help---
	  Support for IPv6 PIM multicast routing protocol PIM-SMv2.
	  If unsure, say N.

endif # IPV6
