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

menu "UDP Networking"

config NET_UDP
	bool "UDP Networking"
	default n
	select NET_READAHEAD if !NET_UDP_NO_STACK
	depends on NET
	---help---
		Enable or disable UDP networking support.

config NET_UDP_NO_STACK
	bool "Disable UDP/IP Stack"
	default NET_USRSOCK_UDP if NET_USRSOCK
	select NET_UDP
	---help---
		Build without UDP/IP stack even if UDP networking support enabled.

if NET_UDP && !NET_UDP_NO_STACK

config NET_BROADCAST
	bool "UDP broadcast Rx support"
	default n
	---help---
		Incoming UDP broadcast support

config NET_UDP_CHECKSUMS
	bool "UDP checksums"
	default NET_IPv6
	---help---
		Enable/disable UDP checksum support.  UDP checksum support is
		REQUIRED for IPv6.

config NET_UDP_PREALLOC_CONNS
	int "Preallocated UDP sockets"
	default 8
	---help---
		Number of UDP 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_UDP_ALLOC_CONNS
	int "Dynamic UDP connections allocation"
	default 0
	---help---
		Dynamic memory allocations for UDP.

		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_UDP_MAX_CONNS
	int "Maximum number of UDP connections"
	default 0
	depends on NET_UDP_ALLOC_CONNS > 0
	---help---
		If dynamic connections allocation is selected (NET_UDP_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_UDP_NPOLLWAITERS
	int "Number of UDP poll waiters"
	default 1

config NET_UDP_WRITE_BUFFERS
	bool "Enable UDP/IP write buffering"
	default n
	select NET_WRITE_BUFFERS
	---help---
		Write buffers allows buffering of ongoing UDP/IP packets, providing
		for higher performance, streamed output.

		You might want to disable UDP/IP write buffering on a highly memory
		memory constrained system where there are no performance issues.

if NET_UDP_WRITE_BUFFERS

config NET_UDP_NWRBCHAINS
	int "Number of pre-allocated I/O buffer chain heads"
	default 8
	---help---
		These tiny nodes are used as "containers" to support queuing of
		UDP write buffers.  This setting will limit the number of UDP write
		operations that can be "in-flight" at any give time.  So a good
		choice for this value would be the same as the maximum number of
		UDP connections.

config NET_UDP_WRBUFFER_DEBUG
	bool "Force write buffer debug"
	default n
	depends on DEBUG_FEATURES
	select IOB_DEBUG
	---help---
		This option will force debug output from UDP write buffer logic,
		even without network debug output.  This is not normally something
		that would want to do but is convenient if you are debugging the
		write buffer logic and do not want to get overloaded with other
		network-related debug output.

config NET_UDP_WRBUFFER_DUMP
	bool "Force write buffer dump"
	default n
	depends on DEBUG_NET || NET_UDP_WRBUFFER_DEBUG
	select IOB_DEBUG
	---help---
		Dump the contents of the write buffers.  You do not want to do this
		unless you really want to analyze the write buffer transfers in
		detail.

endif # NET_UDP_WRITE_BUFFERS

config NET_UDP_NOTIFIER
	bool "Support UDP read-ahead notifications"
	default n
	depends on SCHED_WORKQUEUE
	select WQUEUE_NOTIFIER
	---help---
		Enable building of UDP read-ahead notifier logic that will execute a
		worker function on the low priority work queue when read-ahead data
		is available.  This is a general purpose notifier, but was
		developed specifically to support poll() logic where the poll must
		wait for read-ahead data to become available.

endif # NET_UDP && !NET_UDP_NO_STACK
endmenu # UDP Networking
