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

menuconfig NETUTILS_NETINIT
	bool "Network initialization"
	default n
	depends on NET
	select NETUTILS_NETLIB
	---help---
		This option enables/disables all support for common network initialization.

if NETUTILS_NETINIT

config NETINIT_NETLOCAL
	bool "Local network initialization"
	default n
	---help---
		If this option is selected, then this logic will only initialize the local
		attributes of the network:  The MAC address if needed and any IP
		addresses as needed.  More importantly, it will not do the following:

		- It will not bring the network up.  That can be done later with the
		  an ifup() call.
		- It will not associate any wireless devices to an access point.
		- It will not attempt to obtain an IP address if DHCPC is selected.
		  This may be done later from the apps/system/dhcpc 'renew' command.
		- It will not start the NTPC daemon.  This may be done later from
		  the with the apps/system/ntpc 'ntpcstart' command.

		This option permits you to divide the network configuration into two
		parts:  The local configuration of the network device and the dynamic
		configuration of the device in the network.  This may be important in
		an environment when, for example, you need to manually scan for
		available access points and associate the wireless driver with an
		access point.

config NETINIT_THREAD
	bool "Network initialization thread"
	default n
	depends on !DISABLE_PTHREAD && !NETINIT_NETLOCAL
	---help---
		NuttX is brought up through a series of sequential initialization
		steps.  This includes networking. If the network is available on
		reset, then there is really no issue.  Negotiating the link will
		take only a second or so and the delay to application startup is
		normally acceptable.

		But if there is no network connected, then the start-up delay can
		be very long depending upon things like the particular PHY, driver
		timeout delay times and number of retries.  A failed negotiation
		can potentially take a very long time, perhaps as much as a
		minute... Long enough that you might think that the board would
		never come up!

		One solution is enabled by this option.  If NETINIT_THREAD
		is selected, the network bring-up will occur in parallel with
		the application on a separate thread.  In this case, the application
		will start immediately with the network becoming available some time
		later (if at all).  This thread will terminate once it successfully
		initializes the network.

		NOTES:  If no network is connected, the network bring-up will fail
		and the network initialization thread will simply exit.  There are
		no retries and no mechanism to know if the network initialization
		was successful.  Furthermore, there is currently no support for
		detecting loss of network connection.  Lots of things to do!

if NETINIT_THREAD

config NETINIT_MONITOR
	bool "Monitor link state"
	default n
	depends on ARCH_PHY_INTERRUPT && NETDEV_PHY_IOCTL && NET_UDP
	---help---
		By default the net initialization thread will bring-up the network
		then exit, freeing all of the resources that it required.  This is a
		good behavior for systems with limited memory.

		If this option is selected, however, then the network initialization
		thread will persist forever; it will monitor the network status.  In
		the event that the network goes down (for example, if a cable is
		removed), then the thread will monitor the link status and
		attempt to bring the network back up.  In this case the resources
		required for network initialization are never released.

if NETINIT_MONITOR

config NETINIT_SIGNO
	int "Notification signal number"
	default 32
	---help---
		The network monitor logic will receive signals when there is any
		change in the link status.  This setting may be used to customize
		that signal number in order to avoid conflicts.

config NETINIT_RETRYMSEC
	int "Network bring-up retry period (msec)"
	default 2000
	---help---
		When the network is down, the initialization thread will periodically
		try to bring the network up.  This can be a time consuming operation
		so is done only periodically with that period specified by this
		selection in milliseconds.

endif # NETINIT_MONITOR

config NETINIT_THREAD_STACKSIZE
	int "Network initialization thread stack size"
	default DEFAULT_TASK_STACKSIZE

config NETINIT_THREAD_PRIORITY
	int "Network initialization thread priority"
	default 80
	---help---
		This should be set to a priority lower than most tasks.  The network
		PHY polling is CPU intensive and can interfere with the usability of
		of threads competing for CPU bandwidth.

endif # NETINIT_THREAD

config NETINIT_DEBUG
	bool "Network init debug"
	default n
	depends on DEBUG_FEATURES
	---help---
		Normally debug output is controlled by DEBUG_NET.  However, that
		will generate a LOT of debug output, especially if CONFIG_DEBUG_INFO is
		also selected.  This option is intended to force verbose debug
		output from the network initialization logic even if CONFIG_DEBUG_NET
		or CONFIG_DEBUG_INFO are not selected.  This allows for focused, unit-
		level debug of the network initialization logic.

# No IP address if 6LOWPAN selected; but Ethernet has precedence.

menu "IP Address Configuration"
	depends on NET_ETHERNET || !NET_6LOWPAN

config NETINIT_DHCPC
	bool "Use DHCP to get IP address"
	default n
	depends on NETUTILS_DHCPC
	---help---
		Obtain the IP address via DHCP.

		Per RFC2131 (p. 9), the DHCP client must be prepared to receive DHCP
		messages of up to 576 bytes (excluding Ethernet, IP, or UDP headers and FCS).

if NET_IPv4

comment "IPv4 Addresses"

config NETINIT_IPADDR
	hex "Target IPv4 address"
	default 0x0a000002
	depends on !NETINIT_DHCPC
	---help---
		If NETINIT_DHCPC is NOT set, then the static IP address must be provided.
		This is a 32-bit integer value in host order.  So, as an example,
		0x0a000002 would be 10.0.0.2.

config NETINIT_DRIPADDR
	hex "Router IPv4 address"
	default 0x0a000001
	---help---
		Default router IP address (aka, Gateway).  This is a 32-bit integer
		value in host order.  So, as an example, 0x0a000001 would be 10.0.0.1.

config NETINIT_NETMASK
	hex "IPv4 Network mask"
	default 0xffffff00
	---help---
		Network mask.  This is a 32-bit integer value in host order.  So, as
		an example, 0xffffff00 would be 255.255.255.0.

endif # NET_IPv4

if NET_IPv6 && !NET_ICMPv6_AUTOCONF

comment "Target IPv6 address"

config NETINIT_IPv6ADDR_1
	hex "[0]"
	default 0xfc00
	range 0x0 0xffff
	---help---
		If NET_ICMPv6_AUTOCONF is NOT set, then the static IP address must be
		provided. This is a 16-bit integer value in host order.  Each of the
		eight values forming the full IP address must be specified
		individually.  This is the first of the 8-values.  The default for
		all eight values is fc00::2.

config NETINIT_IPv6ADDR_2
	hex "[1]"
	default 0x0000
	range 0x0 0xffff
	---help---
		If NET_ICMPv6_AUTOCONF is NOT set, then the static IP address must be
		provided. This is a 16-bit integer value in host order.  Each of the
		eight values forming the full IP address must be specified
		individually.  This is the second of the 8-values.  The default for
		all eight values is fc00::2.

config NETINIT_IPv6ADDR_3
	hex "[2]"
	default 0x0000
	range 0x0 0xffff
	---help---
		If NET_ICMPv6_AUTOCONF is NOT set, then the static IP address must be
		provided. This is a 16-bit integer value in host order.  Each of the
		eight values forming the full IP address must be specified
		individually.  This is the third of the 8-values.  The default for
		all eight values is fc00::2.

config NETINIT_IPv6ADDR_4
	hex "[3]"
	default 0x0000
	range 0x0 0xffff
	---help---
		If NET_ICMPv6_AUTOCONF is NOT set, then the static IP address must be
		provided. This is a 16-bit integer value in host order.  Each of the
		eight values forming the full IP address must be specified
		individually.  This is the fourth of the 8-values.  The default for
		all eight values is fc00::2.

config NETINIT_IPv6ADDR_5
	hex "[4]"
	default 0x0000
	range 0x0 0xffff
	---help---
		If NET_ICMPv6_AUTOCONF is NOT set, then the static IP address must be
		provided. This is a 16-bit integer value in host order.  Each of the
		eight values forming the full IP address must be specified
		individually.  This is the fifth of the 8-values.  The default for
		all eight values is fc00::2.

config NETINIT_IPv6ADDR_6
	hex "[5]"
	default 0x0000
	range 0x0 0xffff
	---help---
		If NET_ICMPv6_AUTOCONF is NOT set, then the static IP address must be
		provided. This is a 16-bit integer value in host order.  Each of the
		eight values forming the full IP address must be specified
		individually.  This is the sixth of the 8-values.  The default for
		all eight values is fc00::2.

config NETINIT_IPv6ADDR_7
	hex "[6]"
	default 0x0000
	range 0x0 0xffff
	---help---
		If NET_ICMPv6_AUTOCONF is NOT set, then the static IP address must be
		provided. This is a 16-bit integer value in host order.  Each of the
		eight values forming the full IP address must be specified
		individually.  This is the seventh of the 8-values.  The default for
		all eight values is fc00::2.

config NETINIT_IPv6ADDR_8
	hex "[7]"
	default 0x0002
	range 0x0 0xffff
	---help---
		If NET_ICMPv6_AUTOCONF is NOT set, then the static IP address must be
		provided. This is a 16-bit integer value in host order.  Each of the
		eight values forming the full IP address must be specified
		individually.  This is the last of the 8-values.  The default for
		all eight values is fc00::2.

comment "Router IPv6 address"

config NETINIT_DRIPv6ADDR_1
	hex "[0]"
	default 0xfc00
	range 0x0 0xffff
	---help---
		Default router IP address (aka, Gateway).  This is a 16-bit integer
		value in host order.  Each of the eight values forming the full IP
		address must be specified individually.  This is the first of the
		8-values.  The default for all eight values is fc00::1.

config NETINIT_DRIPv6ADDR_2
	hex "[1]"
	default 0x0000
	range 0x0 0xffff
	---help---
		Default router IP address (aka, Gateway).  This is a 16-bit integer
		value in host order.  Each of the eight values forming the full IP
		address must be specified individually.  This is the second of the
		8-values.  The default for all eight values is fc00::1.

config NETINIT_DRIPv6ADDR_3
	hex "[2]"
	default 0x0000
	range 0x0 0xffff
	---help---
		Default router IP address (aka, Gateway).  This is a 16-bit integer
		value in host order.  Each of the eight values forming the full IP
		address must be specified individually.  This is the third of the
		8-values.  The default for all eight values is fc00::1.

config NETINIT_DRIPv6ADDR_4
	hex "[3]"
	default 0x0000
	range 0x0 0xffff
	---help---
		Default router IP address (aka, Gateway).  This is a 16-bit integer
		value in host order.  Each of the eight values forming the full IP
		address must be specified individually.  This is the fourth of the
		8-values.  The default for all eight values is fc00::1.

config NETINIT_DRIPv6ADDR_5
	hex "[4]"
	default 0x0000
	range 0x0 0xffff
	---help---
		Default router IP address (aka, Gateway).  This is a 16-bit integer
		value in host order.  Each of the eight values forming the full IP
		address must be specified individually.  This is the fifth of the
		8-values.  The default for all eight values is fc00::1.

config NETINIT_DRIPv6ADDR_6
	hex "[5]"
	default 0x0000
	range 0x0 0xffff
	---help---
		Default router IP address (aka, Gateway).  This is a 16-bit integer
		value in host order.  Each of the eight values forming the full IP
		address must be specified individually.  This is the sixth of the
		8-values.  The default for all eight values is fc00::1.

config NETINIT_DRIPv6ADDR_7
	hex "[6]"
	default 0x0000
	range 0x0 0xffff
	---help---
		Default router IP address (aka, Gateway).  This is a 16-bit integer
		value in host order.  Each of the eight values forming the full IP
		address must be specified individually.  This is the seventh of the
		8-values.  The default for all eight values is fc00::1.

config NETINIT_DRIPv6ADDR_8
	hex "[7]"
	default 0x0001
	range 0x0 0xffff
	---help---
		Default router IP address (aka, Gateway).  This is a 16-bit integer
		value in host order.  Each of the eight values forming the full IP
		address must be specified individually.  This is the last of the
		8-values.  The default for all eight values is fc00::1.

comment "IPv6 Network mask"

config NETINIT_IPv6NETMASK_1
	hex "[0]"
	default 0xffff
	range 0x0 0xffff
	---help---
		Network mask.  This is a 16-bit integer value in host order.  Each
		of the eight values forming the full IP address must be specified
		individually.  This is the first of the 8-values.  The default for
		all eight values is fe00::0.

config NETINIT_IPv6NETMASK_2
	hex "[1]"
	default 0xffff
	range 0x0 0xffff
	---help---
		Network mask.  This is a 16-bit integer value in host order.  Each
		of the eight values forming the full IP address must be specified
		individually.  This is the second of the 8-values.  The default for
		all eight values is fe00::0.

config NETINIT_IPv6NETMASK_3
	hex "[2]"
	default 0xffff
	range 0x0 0xffff
	---help---
		Network mask.  This is a 16-bit integer value in host order.  Each
		of the eight values forming the full IP address must be specified
		individually.  This is the third of the 8-values.  The default for
		all eight values is fe00::0.

config NETINIT_IPv6NETMASK_4
	hex "[3]"
	default 0xffff
	range 0x0 0xffff
	---help---
		Network mask.  This is a 16-bit integer value in host order.  Each
		of the eight values forming the full IP address must be specified
		individually.  This is the fourth of the 8-values.  The default for
		all eight values is fe00::0.

config NETINIT_IPv6NETMASK_5
	hex "[4]"
	default 0xffff
	range 0x0 0xffff
	---help---
		Network mask.  This is a 16-bit integer value in host order.  Each
		of the eight values forming the full IP address must be specified
		individually.  This is the fifth of the 8-values.  The default for
		all eight values is fe00::0.

config NETINIT_IPv6NETMASK_6
	hex "[5]"
	default 0xffff
	range 0x0 0xffff
	---help---
		Network mask.  This is a 16-bit integer value in host order.  Each
		of the eight values forming the full IP address must be specified
		individually.  This is the sixth of the 8-values.  The default for
		all eight values is fe00::0.

config NETINIT_IPv6NETMASK_7
	hex "[6]"
	default 0xffff
	range 0x0 0xffff
	---help---
		Network mask.  This is a 16-bit integer value in host order.  Each
		of the eight values forming the full IP address must be specified
		individually.  This is the seventh of the 8-values.  The default for
		all eight values is fe00::0.

config NETINIT_IPv6NETMASK_8
	hex "[7]"
	default 0x0000
	range 0x0 0xffff
	---help---
		Network mask.  This is a 16-bit integer value in host order.  Each
		of the eight values forming the full IP address must be specified
		individually.  This is the eighth of the 8-values.  The default for
		all eight values is fe00::0.

endif # NET_IPv6 && !NET_ICMPv6_AUTOCONF
endmenu # IP Address Configuration

config NETINIT_DNS
	bool "Use DNS"
	default n
	depends on NETDB_DNSCLIENT
	---help---
		Configure to use a DNS.

config NETINIT_DNSIPADDR
	hex "DNS IP address"
	default 0xa0000001
	depends on NETINIT_DNS
	---help---
		Configure the DNS address.  This is a 32-bit integer value in host
		order.  So, as an example, 0xa0000001 would be 10.0.0.1.

config NETINIT_NOMAC
	bool "Hardware has no MAC address"
	default n
	---help---
		Set if your Ethernet hardware has no built-in MAC address.
		If set, a bogus MAC will be assigned.

if NETINIT_NOMAC

choice
	prompt "MAC address selection"
	default NETINIT_SWMAC
	---help---
		If the hardware as no MAC address, then this logic must assign an
		address to the hardware before it brings the network up.  This
		choice allows you select the source of that MAC address.

config NETINIT_SWMAC
	bool "Fixed address"
	---help---
		With this choice, you can assign a fixed MAC address determined by
		a NuttX configuration option.

endchoice # MAC address selection

config NETINIT_MACADDR_1
	hex "Fixed MAC address (bytes 0-3)"
	default 0xdeadbeef
	depends on NETINIT_SWMAC && (NET_ETHERNET || NET_6LOWPAN)
	---help---
		If the hardware has no built-in MAC address and if the NETINIT_SWMAC
		option is selected, then the fixed, software-assigned MAC address
		MAC address must provided with this selection.  This setting provides
		the least significant 4 bytes of the 6-8 byte MAC address.

config NETINIT_MACADDR_2
	hex "Fixed MAC address (bytes 4-5/7)"
	default 0x00e0 if NET_ETHERNET
	default 0x00fade00 if !NET_ETHERNET && NET_6LOWPAN
	depends on NETINIT_SWMAC && (NET_ETHERNET || NET_6LOWPAN)
	---help---
		If the hardware has no built-in MAC address and if the NETINIT_SWMAC
		option is selected, then the fixed, software-assigned MAC address
		MAC address must provided with this selection.  This setting provides
		the least significant 2-4 bytes of the 6-8 byte MAC address.

endif # NETINIT_NOMAC

menu "WAPI Configuration"
	depends on NET && WIRELESS_WAPI

config NETINIT_WAPI_STAMODE
	int
	default 0 if NETINIT_WAPI_STAMODE_AUTO
	default 1 if NETINIT_WAPI_STAMODE_ADHOC
	default 2 if NETINIT_WAPI_STAMODE_INFRA
	default 3 if NETINIT_WAPI_STAMODE_MASTER
	default 4 if NETINIT_WAPI_STAMODE_REPEAT
	default 5 if NETINIT_WAPI_STAMODE_MONITOR
	default 6 if NETINIT_WAPI_STAMODE_MESH

choice
	prompt "Select the WiFi Operation Mode"
	default NETINIT_WAPI_STAMODE_INFRA
	---help---
		Mode of operation.  See the IW_MODE_* definitions in
		include/nuttx/wireless/wireless.  The default value corresponds to
		IW_MODE_INFRA


config NETINIT_WAPI_STAMODE_AUTO
	bool "Auto"

config NETINIT_WAPI_STAMODE_ADHOC
	bool "Adhoc"

config NETINIT_WAPI_STAMODE_INFRA
	bool "Infra"

config NETINIT_WAPI_STAMODE_MASTER
	bool "Master"

config NETINIT_WAPI_STAMODE_REPEAT
	bool "Repeater"

config NETINIT_WAPI_STAMODE_MONITOR
	bool "Monitor"

config NETINIT_WAPI_STAMODE_MESH
	bool "Mesh"

endchoice # WiFi Configuration Mode

config NETINIT_WAPI_AUTHWPA
	hex
	default 0x00000001 if NETINIT_WAPI_AUTHWPA_DISABLED
	default 0x00000002 if NETINIT_WAPI_AUTHWPA_WPA
	default 0x00000004 if NETINIT_WAPI_AUTHWPA_WPA2
	default 0x00000006 if NETINIT_WAPI_AUTHWPA_WPA_WPA2

choice
	prompt "Select the WPA Version"
	default NETINIT_WAPI_AUTHWPA_WPA2
	---help---
		IW_AUTH_WPA_VERSION values.  See the IW_AUTH_WPA_VERSION_* definitions
		in include/nuttx/wireless/wireless.  The default value corresponds to
		IW_AUTH_WPA_VERSION_WPA2.  NOTE that this is a bit-encoded field.  The
		only valid values are 0x00000001, 0x00000002, and 0x00000004

config NETINIT_WAPI_AUTHWPA_DISABLED
	bool "Disabled"

config NETINIT_WAPI_AUTHWPA_WPA
	bool "WPA Only"

config NETINIT_WAPI_AUTHWPA_WPA2
	bool "WPA2 Only"

config NETINIT_WAPI_AUTHWPA_WPA_WPA2
	bool "WPA or WPA2"

endchoice # WPA Version

config NETINIT_WAPI_CIPHERMODE
	hex
	default 0x00000001 if NETINIT_WAPI_CIPHERMODE_NONE
	default 0x00000002 if NETINIT_WAPI_CIPHERMODE_WEP40
	default 0x00000004 if NETINIT_WAPI_CIPHERMODE_TKIP
	default 0x00000008 if NETINIT_WAPI_CIPHERMODE_CCMP
	default 0x00000010 if NETINIT_WAPI_CIPHERMODE_WEP104
	default 0x00000020 if NETINIT_WAPI_CIPHERMODE_AES_CMAC

choice
	prompt "Select the Cipher Mode"
	default NETINIT_WAPI_CIPHERMODE_CCMP
	---help---
		IW_AUTH_PAIRWISE_CIPHER and IW_AUTH_GROUP_CIPHER values. See the
		IW_AUTH_CIPHER_* definitions in include/nuttx/wireless/wireless.
		The default value corresponds to IW_AUTH_CIPHER_CCMP.  NOTE that
		this is a bit-encoded field.  The only valid values are 0x00000001,
		0x00000002,0x00000004, ... 0x00000010

config NETINIT_WAPI_CIPHERMODE_NONE
	bool "None"

config NETINIT_WAPI_CIPHERMODE_WEP40
	bool "WEP40"

config NETINIT_WAPI_CIPHERMODE_TKIP
	bool "TKIP"

config NETINIT_WAPI_CIPHERMODE_CCMP
	bool "CCMP"

config NETINIT_WAPI_CIPHERMODE_WEP104
	bool "WEP104"

config NETINIT_WAPI_CIPHERMODE_AES_CMAC
	bool "AES-CMAC"

endchoice # WiFi Cipher

config NETINIT_WAPI_ALG
	int
	default 0 if NETINIT_WAPI_ALG_NONE
	default 1 if NETINIT_WAPI_ALG_WEP
	default 2 if NETINIT_WAPI_ALG_TKIP
	default 3 if NETINIT_WAPI_ALG_CCMP
	default 4 if NETINIT_WAPI_ALG_IGTK
	default 5 if NETINIT_WAPI_ALG_PMK
	default 6 if NETINIT_WAPI_ALG_GCMP
	default 7 if NETINIT_WAPI_ALG_SMS4
	default 8 if NETINIT_WAPI_ALG_KRK
	default 9 if NETINIT_WAPI_ALG_GCMP_256
	default 10 if NETINIT_WAPI_ALG_CCMP_256
	default 11 if NETINIT_WAPI_ALG_GMAC_128
	default 12 if NETINIT_WAPI_ALG_GMAC_256
	default 13 if NETINIT_WAPI_ALG_CMAC_256

choice
	prompt "Select the Crypto Algorithm"
	default NETINIT_WAPI_ALG_CCMP
	---help---
		Algorithm.  See enum wpa_alg_e in apps/include/wireless/wapi.h.  The
		default corresponds to WPA_ALG_CCMP.

config NETINIT_WAPI_ALG_NONE
	bool "None"

config NETINIT_WAPI_ALG_WEP
	bool "WEP"

config NETINIT_WAPI_ALG_TKIP
	bool "TKIP"

config NETINIT_WAPI_ALG_CCMP
	bool "CCMP"

config NETINIT_WAPI_ALG_IGTK
	bool "IGTK"

config NETINIT_WAPI_ALG_PMK
	bool "PMK"

config NETINIT_WAPI_ALG_GCMP
	bool "GCMP"

config NETINIT_WAPI_ALG_SMS4
	bool "SMS4"

config NETINIT_WAPI_ALG_KRK
	bool "KRK"

config NETINIT_WAPI_ALG_GCMP_256
	bool "GCMP-256"

config NETINIT_WAPI_ALG_CCMP_256
	bool "CCMP-256"

config NETINIT_WAPI_ALG_GMAC_128
	bool "GMAC-128"

config NETINIT_WAPI_ALG_GMAC_256
	bool "GMAC-256"

config NETINIT_WAPI_ALG_CMAC_256
	bool "CMAC-256"

endchoice # WiFi Algorithm

config NETINIT_WAPI_SSID
	string "SSID"
	default ""

config NETINIT_WAPI_PASSPHRASE
	string "Passprhase"
	default ""

endmenu # WAPI Configuration
endif # NETUTILS_NETINIT
