#
# For a description of the syntax of this configuration file,
# see the file kconfig-language.txt in the NuttX tools repository.
#

menu "ICMPv6 Networking Support"

config NET_ICMPv6
	bool "Enable ICMPv6 networking"
	default n
	select NET_MCASTGROUP
	depends on NET
	---help---
		Enable minimal ICMPv6 support. Includes built-in support
		for sending replies to received ECHO (ping) requests.

config NET_ICMPv6_NO_STACK
	bool "Disable ICMPv6 stack"
	default n
	select NET_ICMPv6
	---help---
		Build without ICMPv6 stack even if ICMPv6 networking support enabled.

if NET_ICMPv6 && !NET_ICMPv6_NO_STACK

config NET_ICMPv6_PMTU_ENTRIES
	int "PMTUD ICMPv6 pmtu entry"
	default 0
	---help---
		The number of the ICMPv6 pmtu entry

config NET_ICMPv6_PMTU_TIMEOUT
	int "PMTUD ICMPv6 pmtu entry timeout (Time Unit:minute)"
	default 10
	depends on NET_ICMPv6_PMTU_ENTRIES != 0
	---help---
		The timout of the ICMPv6 pmtu entry

config NET_ICMPv6_SOCKET
	bool "IPPROTO_ICMP6 socket support"
	default n
	select MM_IOB
	---help---
		Enable support for IPPROTO_ICMP6 sockets.  These sockets are needed
		for application level support for sending ICMPv7 ECHO requests and
		receiving associated ICMPv6 ECHO replies.

config NET_ICMPv6_NEIGHBOR
	bool "Solicit destination addresses"
	default n
	---help---
		Enable logic to send ICMPv6 neighbor solicitation requests if
		the target IPv6 address mapping does not appear in the Neighbor
		table.

if NET_ICMPv6_NEIGHBOR

config ICMPv6_NEIGHBOR_MAXTRIES
	int "ICMPv6 neighbor solicitation retries"
	default 5
	---help---
		Send the Neighbor solicitation this number of times before giving
		up and deciding that the target IP6 address is non reachable.

config ICMPv6_NEIGHBOR_DELAYMSEC
	int "ICMPv6 neighbor re-solicit delay"
	default 20
	---help---
		Wait this number of milliseconds after sending the Neighbor
		Solicitation before checking if the IPv6 address mapping is present
		in the Neighbor Table.  This time should be related to the maximum
		round trip time on the network since it is basically the time from
		when an Neighbor Solicitation is sent until the Neighbor
		Advertisement is received.

endif # NET_ICMPv6_NEIGHBOR

config NET_ICMPv6_AUTOCONF
	bool "ICMPv6 auto-configuration"
	default n
	---help---
		Enable ioctl() logic that implements ICMPv6 auto configuration.
		ICMPv6 auto configuration is an alternative to DHCPv6 for obtaining
		an IPv6 address from a router.

if NET_ICMPv6_AUTOCONF

config ICMPv6_AUTOCONF_MAXTRIES
	int "ICMPv6 router solicitation retries"
	default 5
	---help---
		Send the Router solicitation this number of times before giving
		up and deciding that no router is going to provide an IP address.

config ICMPv6_AUTOCONF_DELAYMSEC
	int "ICMPv6 router re-solicit delay"
	default 20
	---help---
		Wait this number of milliseconds before re-sending the Router
		Solicitation.  This time should be related to the maximum
		round trip time on the network since it is basically the time from
		when an Router Solicitation is sent until the Router
		Advertisement is received.

config ICMPv6_AUTOCONF_RDNSS
	bool "ICMPv6 handle RDNSS field in router advertise"
	default n
	---help---
		Handle the RDNSS field in the Router Advertisement and add it to
		netdb DNS Server.

endif # NET_ICMPv6_AUTOCONF

config NET_ICMPv6_ROUTER
	bool "Router Advertisement"
	default n
	---help---
		In a router-less environment, NuttX can be configured to provide a
		response to Router Solicitation messages and, hence, providing
		addressing to IPv6 nodes on the network.

if NET_ICMPv6_ROUTER

config NET_ICMPv6_ROUTER_LIFETIME
	int "Router Advertisement router lifetime in seconds"
	default 1800
	---help---
		Set the router lifetime for advertising as a default router.
		Set to 0 to only advertise autoconfiguration prefix without
		advertising as a router.

config NET_ICMPv6_ROUTER_MANUAL
	bool "Manual router prefix"
	default n
	---help---
		Select this to set the advertised router prefix manually. Otherwise, it
		will be derived from the device IPv6 address and prefix length set in
		the netdev structure.

if NET_ICMPv6_ROUTER_MANUAL

config NET_ICMPv6_PREFLEN
	int "Prefix length"
	default 64
	range 0 128
	---help---
		The length (in bits) of the IPv6 address prefix.  This is the number
		of MS bits under the network mask.  The default of 64 would
		correspond to a network mask of:

			0xffff:0xffff:0xffff:0xffff:0x0000:0x0000:0x0000:0x0000.

comment "Router Prefix"

config NET_ICMPv6_PREFIX_1
	hex "[0]"
	default 0xfc00
	range 0x0 0xffff
	---help---
		This the IPv6 address prefix that will be provided in the IPv6 Router
		Advertisement message.  This is the first of the 8-values.  The
		default for all eight values is fc00::0.

config NET_ICMPv6_PREFIX_2
	hex "[1]"
	default 0x0000
	range 0x0 0xffff
	---help---
		This the IPv6 address prefix that will be provided in the IPv6 Router
		Advertisement message.  This is the second of the 8-values.  The
		default for all eight values is fc00::0.

config NET_ICMPv6_PREFIX_3
	hex "[2]"
	default 0x0000
	range 0x0 0xffff
	---help---
		This the IPv6 address prefix that will be provided in the IPv6 Router
		Advertisement message.  This is the third of the 8-values.  The
		default for all eight values is fc00::0.

config NET_ICMPv6_PREFIX_4
	hex "[3]"
	default 0x0000
	range 0x0 0xffff
	---help---
		This the IPv6 address prefix that will be provided in the IPv6 Router
		Advertisement message.  This is the fourth of the 8-values.  The
		default for all eight values is fc00::0.

config NET_ICMPv6_PREFIX_5
	hex "[4]"
	default 0x0000
	range 0x0 0xffff
	---help---
		This the IPv6 address prefix that will be provided in the IPv6 Router
		Advertisement message.  This is the fifth of the 8-values.  The
		default for all eight values is fc00::0.

config NET_ICMPv6_PREFIX_6
	hex "[5]"
	default 0x0000
	range 0x0 0xffff
	---help---
		This the IPv6 address prefix that will be provided in the IPv6 Router
		Advertisement message.  This is the sixth of the 8-values.  The
		default for all eight values is fc00::0.

config NET_ICMPv6_PREFIX_7
	hex "[6]"
	default 0x0000
	range 0x0 0xffff
	---help---
		This the IPv6 address prefix that will be provided in the IPv6 Router
		Advertisement message.  This is the seventh of the 8-values.  The
		default for all eight values is fc00::0.

config NET_ICMPv6_PREFIX_8
	hex "[7]"
	default 0x0000
	range 0x0 0xffff
	---help---
		This the IPv6 address prefix that will be provided in the IPv6 Router
		Advertisement message.  This is the last of the 8-values.  The
		default for all eight values is fc00::0.

config NET_ICMPv6_ROUTER_RDNSS
	bool "Fill the RDNSS into Router Advertisement"
	default n
	---help---
		Fill the RDNSS from the netdb DNS Server into the Router
		Advertisement.

endif # NET_ICMPv6_ROUTER_MANUAL
endif # NET_ICMPv6_ROUTER

if NET_ICMPv6_SOCKET

config NET_ICMPv6_PREALLOC_CONNS
	int "Preallocated ICMPv6 packet sockets"
	default 4
	---help---
		Number of ICMPv6 connections (all tasks).

		This number of connections will be pre-allocated during system boot.
		If dynamic connections allocation is enabled, more connections may
		be allocated at a later time, as the system needs them. Else this
		will be the maximum number of connections available to the system
		at all times.

		Set to 0 to disable (and rely only on dynamic allocations).

config NET_ICMPv6_ALLOC_CONNS
	int "Dynamic ICMPv6 connections allocation"
	default 0
	---help---
		Dynamic memory allocations for ICMPv6.

		When set to 0 all dynamic allocations are disabled.

		When set to 1 a new connection will be allocated every time,
		and it will be free'd when no longer needed.

		Setting this to 2 or more will allocate the connections in
		batches (with batch size equal to this config). When a
		connection is no longer needed, it will be returned to the
		free connections pool, and it will never be deallocated!

config NET_ICMPv6_MAX_CONNS
	int "Maximum number of ICMPv6 connections"
	default 0
	depends on NET_ICMPv6_ALLOC_CONNS > 0
	---help---
		If dynamic connections allocation is selected (NET_ICMPv6_ALLOC_CONNS > 0)
		this will limit the number of connections that can be allocated.

		This is useful in case the system is under very heavy load (or
		under attack), ensuring that the heap will not be exhausted.

config NET_ICMPv6_NPOLLWAITERS
	int "Number of ICMPv6 poll waiters"
	default 1

endif # NET_ICMPv6_SOCKET

endif # NET_ICMPv6 && !NET_ICMPv6_NO_STACK
endmenu # ICMPv6 Networking Support
