#
# 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 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.

