# 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_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 60
	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
