# Kconfig.ipv6 - IPv6 Options

#
# Copyright (c) 2016 Intel Corporation.
#
# SPDX-License-Identifier: Apache-2.0
#

menuconfig NET_IPV6
	bool "IPv6"
	default y
	help
	Enable IPv6 support. This should be selected by default as there
	is limited set of network bearers provided that support IPv4.

if NET_IPV6

config NET_IF_UNICAST_IPV6_ADDR_COUNT
	int "Max number of unicast IPv6 addresses per network interface"
	default 2

config NET_IF_MCAST_IPV6_ADDR_COUNT
	int "Max number of multicast IPv6 addresses per network interface"
	default 1

config NET_IF_IPV6_PREFIX_COUNT
	int "Max number of IPv6 prefixes per network interface"
	default 2

config NET_INITIAL_HOP_LIMIT
	int "Initial hop limit for a connection"
	default 64
	help
	The value should be > 0

config NET_IPV6_MAX_NEIGHBORS
	int "How many IPv6 neighbors are supported"
	default 8
	range 1 254
	help
	The value depends on your network needs.

config NET_IPV6_MLD
	bool "Multicast Listener Discovery support"
	default y
	help
	The value depends on your network needs. MLD should normally
	be active. Currently we support only MLDv2. See RFC 3810 for
	details.

config NET_IPV6_NBR_CACHE
	bool "Neighbor cache"
	default y
	help
	The value depends on your network needs. Neighbor cache should
	normally be active.

config NET_IPV6_ND
	bool "Activate neighbor discovery"
	depends on NET_IPV6_NBR_CACHE
	default y
	help
	The value depends on your network needs. ND should normally
	be active.

config NET_IPV6_DAD
	bool "Activate duplicate address detection"
	depends on NET_IPV6_NBR_CACHE
	default y
	help
	The value depends on your network needs. DAD should normally
	be active.

config NET_IPV6_RA_RDNSS
	bool "Support RA RDNSS option"
	depends on NET_IPV6_ND
	default y
	help
	Support Router Advertisement Recursive DNS Server option.
	See RFC 6106 for details. The value depends on your network needs.

config NET_6LO
	bool "Enable 6lowpan IPv6 Compression library"
	help
	6lowpan compression and fragmentation.

config NET_6LO_CONTEXT
	bool "Enable 6lowpan context based compression"
	default n
	depends on NET_6LO
	help
	Enables 6lowpan context based compression based on information
	received in RA(Router Advertisement) message.

config NET_MAX_6LO_CONTEXTS
	int "Number of supported 6CO (6lowpan contexts options)"
	depends on NET_6LO_CONTEXT
	default 1
	range 1 16
	help
	6lowpan context options table size. The value depends on your
	network and memory connsuption. More size occupies more memory.

config NET_DEBUG_6LO
	bool "Enable 6lowpan debug"
	depends on NET_6LO && NET_LOG

if NET_LOG

config NET_DEBUG_IPV6
	bool "Debug core IPv6"
	default n
	help
	Enables core IPv6 code part to output debug messages

config NET_DEBUG_ICMPV6
	bool "Debug ICMPv6"
	default n
	help
	Enables ICMPv6 code part to output debug messages

config NET_DEBUG_IPV6_NBR_CACHE
	bool "Debug IPv6 neighbour cache"
	default n
	help
	Enables Neighbour Cache code part to output debug messages

endif # NET_LOG

endif # NET_IPV6
