#
# 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_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_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_TUNNEL
	tristate "IPv6: tunnel transformation"
	depends on IPV6
	select XFRM
	---help---
	  Support for generic IPv6-in-IPv6 tunnel transformation, which is
	  required by the IPv6-in-IPv6 tunneling module as well as tunnel mode
	  IPComp.
	  
	  If unsure, say Y.

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

	  If unsure, say N.

