# Kconfig.app - Options for networking applications

#
# Copyright (c) 2017 Intel Corporation.
#
# SPDX-License-Identifier: Apache-2.0
#

menuconfig NET_APP
	bool "Network application API support [EXPERIMENTAL]"
	default y
	select NET_MGMT
	select NET_MGMT_EVENT
	help
	Enable API that helps to create client/server network applications.
	This API is experimental and subject to change.

if NET_APP

config NET_APP_AUTO_INIT
	bool "Init networking support automatically during device startup"
	default y
	help
	If this option is set, then the net_app API is automatically
	initialized when the device is started. If you do not wish to do
	this, then disable this and call net_app_init() in your application.

config NET_APP_INIT_PRIO
	int "Startup priority for the network application init"
	default 95
	depends on NET_APP_AUTO_INIT

config NET_APP_INIT_TIMEOUT
	int "How long to wait for networking to be ready and available"
	default 30
	depends on NET_APP_AUTO_INIT
	help
	The value is in seconds. If for example IPv4 address from DHCPv4 is not
	received within this limit, then the net_app_init() call will fail
	during the device startup.

config NET_APP_NEED_IPV6
	bool "This application wants IPv6 support"
	depends on NET_APP_AUTO_INIT
	select NET_IPV6
	help
	The network application needs IPv6 support to function properly.
	This option makes sure the network application is initialized properly
	in order to use IPv6.

config NET_APP_NEED_IPV6_ROUTER
	bool "This application wants IPv6 router to exists"
	depends on NET_APP_AUTO_INIT
	depends on NET_IPV6
	help
	The network application needs IPv6 router to exists before continuing.
	What this means that the application wants to wait until it receives
	IPv6 router advertisement message before continuing.

config NET_APP_NEED_IPV4
	bool "This application wants IPv4 support"
	depends on NET_APP_AUTO_INIT
	select NET_IPV4
	help
	The network application needs IPv4 support to function properly.
	This option makes sure the network application is initialized properly
	in order to use IPv4.

config NET_DEBUG_APP
	bool "Debug net app library"
	default n
	help
	Enables net app library to output debug messages

config NET_APP_SERVER
	bool "Enable server support"
	default n
	help
	Enables net app library server APIs.

config NET_APP_CLIENT
	bool "Enable client support"
	default n
	help
	Enables net app library client APIs.

config NET_APP_TLS
	bool "Enable TLS support for TCP applications"
	default n
	select MBEDTLS
	help
	Enables net app library to use TLS for encrypted communication.

config NET_APP_DTLS
	bool "Enable DTLS support for UDP applications"
	depends on NET_UDP
	depends on NET_APP_TLS
	default n
	help
	Enables net app library to use TLS for encrypted UDP communication.

config NET_APP_DTLS_TIMEOUT
	int "DTLS session timeout"
	depends on NET_APP_DTLS
	default 15
	help
	If a DTLS session does not have any activity, then disconnect
	the session. The value is in seconds.

config NET_DEBUG_APP_TLS_LEVEL
	int "Debug level for mbedtls in net app library"
	depends on NET_APP_TLS && NET_DEBUG_APP
	default 0
	range 0 4
	help
	Sets log level for the mbedtls when debugging net_app library.
	Levels are (from ext/lib/crypto/mbedtls/include/mbedtls/debug.h):
	0 No debug
	1 Error
	2 State change
	3 Information
	4 Verbose

config NET_APP_TLS_STACK_SIZE
	int "TLS handler thread stack size"
	default 8192
	depends on NET_APP_TLS
	help
	TLS handler thread stack size. The mbedtls routines will use this stack
	thus it is by default very large.

endif # NET_APP

menuconfig NET_APP_SETTINGS
	bool "Set network settings for applications"
	default n
	depends on NET_APP
	help
	Allow IP addresses to be set in config file for
	networking client/server sample applications, or
	some link-layer dedicated settings like the channel.
	Beware this is not meant to be used for proper
	provisioning but quick sampling/testing.

if NET_APP_SETTINGS

if NET_IPV6

config NET_APP_MY_IPV6_ADDR
	string "My IPv6 address"
	help
	  Use 2001:db8::1 here if uncertain.

config NET_APP_PEER_IPV6_ADDR
	string "Peer IPv6 address"
	help
	  This is only applicable in client side applications that try
	  to establish a connection to peer host.
	  Use 2001:db8::2 here if uncertain.

endif # NET_IPV6

if NET_IPV4

config NET_APP_MY_IPV4_ADDR
	string "My IPv4 address"
	help
	  Use 192.0.2.1 here if uncertain.

config NET_APP_MY_IPV4_NETMASK
	string "My IPv4 netmask"
	default "255.255.255.0"
	help
	  Static netmask to use if not overriden by DHCP. Use empty value to
	  skip setting static value.

config NET_APP_MY_IPV4_GW
	string "My IPv4 gateway"
	help
	  Static gateway to use if not overriden by DHCP. Use empty value to
	  skip setting static value.

config NET_APP_PEER_IPV4_ADDR
	string "Peer IPv4 address"
	help
	  This is only applicable in client side applications that try
	  to establish a connection to peer host.
	  Use 192.0.2.2 here if uncertain.

endif # NET_IPV4

if NET_L2_IEEE802154 || NET_L2_RAW_CHANNEL

config NET_APP_IEEE802154_DEV_NAME
	string "IEEE 802.15.4 device name"
	help
	  The device name to get bindings from in the sample application.

config NET_APP_IEEE802154_PAN_ID
	hex "IEEE 802.15.4 PAN ID"
	default 0xabcd
	help
	  The PAN ID to use by default in the sample.

config NET_APP_IEEE802154_CHANNEL
	int "IEEE 802.15.4 channel"
	default 26
	help
	  The channel to use by default in the sample application.

config NET_APP_IEEE802154_RADIO_TX_POWER
	int "IEEE 802.15.4 TX power in dbm"
	default 0
	help
	  The TX power to use by default in the sample application.
	  See NET_L2_IEEE802154_RADIO_DFLT_TX_POWER for more info.

config NET_APP_IEEE802154_SECURITY_KEY
	string "IEEE 802.15.4 security key"
	default "moooh!"
	depends on NET_L2_IEEE802154_SECURITY
	help
	  The key string to use for the link-layer security part.

config NET_APP_IEEE802154_SECURITY_KEY_MODE
	int "IEEE 802.15.4 security key mode"
	default 0
	range 0 0
	depends on NET_L2_IEEE802154_SECURITY
	help
	  The key mode to use for the link-layer security part.
	  Only implicit mode is supported, thus 0.

config NET_APP_IEEE802154_SECURITY_LEVEL
	int "IEEE 802.15.4 security level (0-7)"
	default 0
	range 0 7
	depends on NET_L2_IEEE802154_SECURITY
	help
	  The security level to use for the link-layer security part.
	  0 means no security
	  1 authentication only with a 4 bytes length tag
	  2 authentication only with a 8 bytes length tag
	  3 authentication only with a 16 bytes length tag
	  4 encryption only
	  5 encryption/authentication with a 4 bytes length tag
	  6 encryption/authentication with a 8 bytes length tag
	  7 encryption/authentication with a 16 bytes length tag

endif # NET_L2_IEEE802154 || NET_L2_RAW_CHANNEL

if NET_L2_BT

config NET_APP_BT_NODE
	bool "Enable Bluetooth node support"
	default n
	select NET_L2_BT_MGMT
	help
	Enables application to operate in node mode which requires GATT
	service to be registered and start advertising as peripheral.

endif # NET_L2_BT

endif # NET_APP_SETTINGS
