#
# 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 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 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_ROUTEOPTIMIZATION
	tristate "IPv6: MIPv6 route optimization mode (EXPERIMENTAL)"
	depends on IPV6 && EXPERIMENTAL
	select XFRM
	---help---
	  Support for MIPv6 route optimization mode.

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_SUBTREES
	bool "IPv6: source address based routing"
	depends on IPV6 && EXPERIMENTAL
	---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_MULTIPLE_TABLES
	bool "IPv6: Multiple Routing Tables"
	depends on IPV6 && EXPERIMENTAL
	select FIB_RULES
	---help---
	  Support multiple routing tables.

