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

menu "Routing Table Configuration"

config NET_ROUTE
	bool "Routing table support"
	default n
	depends on NET_IPv4 || NET_IPv6
	---help---
		Build in support for a routing table.  See include/net/route.h

if NET_ROUTE

choice
	prompt "IPv4 routing table"
	default ROUTE_IPv4_RAMROUTE
	depends on NET_IPv4

config ROUTE_IPv4_RAMROUTE
	bool "In-memory"
	---help---
		Select to used a IPv4 routing table RAM.

config ROUTE_IPv4_ROMROUTE
	bool "Read-only"
	---help---
		Select to used a fixed read-only IPv4 routing table in FLASH or ROM.
		In this case, the board-specific logic must provide a routing table
		of the form of a simple array:

			FAR const struct net_route_ipv4_s g_ipv4_routes[];
			const unsigned int g_ipv4_nroutes;

		NOTE:  The read-only variable g_ipv4_nroutes must be set to the
		actual number of valid entries in the array.

config ROUTE_IPv4_FILEROUTE
	bool "File"
	---help---
		Select to used a IPv4 routing table in a file in a mounted file system.

endchoice # IPv4 routing table

config ROUTE_MAX_IPv4_RAMROUTES
	int "Preallocated IPv4 routing table entries"
	default 4
	depends on ROUTE_IPv4_RAMROUTE
	---help---
		The number of preallocated of the IPv4 routing table entries.  This
		eliminates dynamica memory allocations, but limits the maximum size
		of the in-memory routing table to this number.

config ROUTE_IPv4_CACHEROUTE
	bool "In-memory IPv4 cache"
	default n
	depends on ROUTE_IPv4_FILEROUTE
	---help---
		Accessing a routing table on a file system before each packet is sent
		can harm performance.  This option will cache a few of the most
		frequently used routing table entries in memory to reduce performance
		issues.

config ROUTE_MAX_IPv4_CACHEROUTES
	int "IPv4 cache size"
	default 4
	depends on ROUTE_IPv4_CACHEROUTE
	---help---
		This determines the maximum number of routes that can be cached in
		memory.

choice
	prompt "IPv6 routing table"
	default ROUTE_IPv6_RAMROUTE
	depends on NET_IPv6

config ROUTE_IPv6_RAMROUTE
	bool "In-memory"
	---help---
		Select to use a IPv6 routing table RAM.

config ROUTE_IPv6_ROMROUTE
	bool "Read-only"
	---help---
		Select to use a fixed read-only IPv6 routing table in FLASH or ROM.
		In this case, the board-specific logic must provide a routing table
		of the form of simply array:

			FAR const struct net_route_ipv6_s g_ipv6_routes[];
			const unsigned int g_ipv6_nroutes;

		NOTE:  The read-only variable g_ipv6_nroutes must be set to the
		actual number of valid entries in the array.

config ROUTE_IPv6_FILEROUTE
	bool "File"
	---help---
		Select to use a IPv6 routing table in a file in a mounted file system.

endchoice # IPv6 routing table

config ROUTE_MAX_IPv6_RAMROUTES
	int "Preallocated IPv6 routing table entries"
	default 4
	depends on ROUTE_IPv6_RAMROUTE
	---help---
		The number of preallocated of the IPv6 routing table entries.  This
		eliminates dynamica memory allocations, but limits the maximum size
		of the in-memory routing table to this number.

config ROUTE_FILEDIR
	string "Routing table directory"
	default LIBC_TMPDIR
	depends on ROUTE_IPv4_FILEROUTE || ROUTE_IPv6_FILEROUTE
	---help---
		Provides the full path to location in the file system where routing
		table will be accessed.  This is a string and should not include
		any trailing '/'.

config ROUTE_IPv6_CACHEROUTE
	bool "In-memory IPv6 cache"
	default n
	depends on ROUTE_IPv6_FILEROUTE
	---help---
		Accessing a routing table on a file system before each packet is sent
		can harm performance.  This option will cache a few of the most
		frequently used routing table entries in memory to reduce performance
		issues.

config ROUTE_MAX_IPv6_CACHEROUTES
	int "IPv6 cache size"
	default 4
	depends on ROUTE_IPv6_CACHEROUTE
	---help---
		This determines the maximum number of routes that can be cached in
		memory.

config ROUTE_LONGEST_MATCH
	bool "Enable longest prefix match support"
	default y
	---help---
		Enable support for longest prefix match routing.
		("Longest Match" in RFC 1812, Section 5.2.4.3, Page 75)

endif # NET_ROUTE
endmenu # Routing Table Configuration
