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

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_FRAGMENT
	bool "Support IPv6 fragmentation"
	default n
	help
	IPv6 fragmentation is disabled by default. This saves memory and
	should not cause issues normally as we support anyway the minimum
	length IPv6 packets (1280 bytes). If you enable fragmentation
	support, please increase amount of RX data buffers so that larger
	than 1280 byte packets can be received.

config NET_IPV6_FRAGMENT_MAX_COUNT
	int "How many packets to reassemble at a time"
	range 1 16
	default 1
	depends on NET_IPV6_FRAGMENT
	help
	How many fragmented IPv6 packets can be waiting reassembly
	simultaneously. Each fragment count might use up to 1280 bytes
	of memory so you need to plan this and increase the network buffer
	count.

config NET_IPV6_FRAGMENT_TIMEOUT
	int "How long to wait the fragments to receive"
	range 1 60
	default 5
	depends on NET_IPV6_FRAGMENT
	help
	How long to wait for IPv6 fragment to arrive before the reassembly
	will timeout. RFC 2460 chapter 4.5 tells to wait for 60 seconds but
	this might be too long in memory constrained devices. This value
	is in seconds.

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 consumption. More 6CO options uses 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 neighbor cache"
	default n
	help
	Enables Neighbor Cache code to output debug messages

endif # NET_LOG

endif # NET_IPV6
