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

menu "Netlink Socket Support"

config NET_NETLINK
	bool "Netlink socket support"
	default n
	depends on SCHED_WORKQUEUE
	select WQUEUE_NOTIFIER
	---help---
		Enable support for Netlink-like IPC sockets that will permit user-
		space applications to interact with network services.

		This logic is a WIP.  Currently only fragmentary support is
		available, not enough to actually do anything of consequence.
		Only the following features are implemented at this time:

		  NETLINK_ROUTE capability to read the ARP table.

if NET_NETLINK

config NETLINK_PREALLOC_CONNS
	int "Preallocated Netlink connections"
	default 4
	---help---
		Number of Netlink 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 NETLINK_ALLOC_CONNS
	int "Dynamic Netlink connections allocation"
	default 0
	---help---
		Dynamic memory allocations for Netlink.

		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 NETLINK_MAX_CONNS
	int "Maximum number of Netlink connections"
	default 0
	depends on NETLINK_ALLOC_CONNS > 0
	---help---
		If dynamic connections allocation is selected (NETLINK_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.

menu "Netlink Protocols"

config NETLINK_ROUTE
	bool "Netlink Route protocol"
	default n
	---help---
		Support the NETLINK_ROUTE protocol option.

if NETLINK_ROUTE

config NETLINK_DISABLE_GETLINK
	bool "Disable RTM_GETLINK support"
	default n
	---help---
		RTM_GETLINK is used to enumerate network devices.

config NETLINK_DISABLE_GETNEIGH
	bool "Disable RTM_GETNEIGH support"
	default n
	---help---
		RTM_GETNEIGH is used to retrieve Neighbor/ARP tables.

config NETLINK_DISABLE_GETROUTE
	bool "Disable RTM_GETROUTE support"
	default n
	---help---
		RTM_GETROUTE is used to retrieve routing tables.

config NETLINK_DISABLE_NEWADDR
	bool "Disable RTM_NEWADDR support"
	default n
	---help---
		RTM_NEWADDR is used to set netdev address.

config NETLINK_DISABLE_DELADDR
	bool "Disable RTM_DELADDR support"
	default n
	---help---
		RTM_DELADDR is used to delete netdev address.

config NETLINK_DISABLE_GETADDR
	bool "Disable RTM_GETADDR support"
	default n
	---help---
		RTM_GETADDR is used to get netdev address.

config NETLINK_VALIDATE_POLICY
	bool "Enable netlink message policy verification"
	default n
	---help---
		VALIDATE_POLICY is used to make sure the parameters
		you pass in are valid.

config NETLINK_DISABLE_NEWPREFIX
	bool "Disable RTM_NEWPREFIX support"
	default n
	---help---
		RTM_NEWPREFIX is used to set netdev prefix.

endif # NETLINK_ROUTE

config NETLINK_NETFILTER
	bool "Netlink Netfilter protocol"
	default n
	depends on NET_NAT
	---help---
		Support the NETLINK_NETFILTER protocol option, mainly
		for conntrack with NAT.

endmenu # Netlink Protocols
endif # NET_NETLINK
endmenu # Netlink Socket Support
