#
# IPv6 configuration
#

#   IPv6 as module will cause a CRASH if you try to unload it
config 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.

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

	  By default, kernel do 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"
	depends on IPV6
	---help---
	  Router Preference is an optional extension to the Router
	  Advertisement message to improve the ability of hosts
	  to pick more appropriate router, especially when the hosts
	  is 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 IPV6 && 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"
	depends on IPV6
	select XFRM
	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"
	depends on IPV6
	select XFRM
	select CRYPTO
	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"
	depends on IPV6
	select XFRM
	select INET6_XFRM_TUNNEL
	select CRYPTO
	select CRYPTO_DEFLATE
	---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 IPV6 && 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"
	depends on IPV6
	default IPV6
	select XFRM
	---help---
	  Support for IPsec transport mode.

	  If unsure, say Y.

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

	  If unsure, say Y.

config INET6_XFRM_MODE_BEET
	tristate "IPv6: IPsec BEET mode"
	depends on IPV6
	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 IPV6 && EXPERIMENTAL
	select XFRM
	---help---
	  Support for MIPv6 route optimization mode.

config IPV6_SIT
	tristate "IPv6: IPv6-in-IPv4 tunnel (SIT driver)"
	depends on IPV6
	select INET_TUNNEL
	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.ko. If unsure, say Y.

config IPV6_TUNNEL
	tristate "IPv6: IPv6-in-IPv6 tunnel"
	select INET6_TUNNEL
	depends on IPV6
	---help---
	  Support for IPv6-in-IPv6 tunnels described in RFC 2473.

	  If unsure, say N.

config IPV6_MULTIPLE_TABLES
	bool "IPv6: Multiple Routing Tables"
	depends on IPV6 && 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.

