# 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
	default y if NET_LOG_GLOBAL
	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_SERVER_NUM_CONN
	int "Number of simultaneous incoming connections"
	default 1
	depends on NET_APP_SERVER
	help
	  Tells how many simultaneous incoming connections the server instance can
	  support. The value of CONFIG_NET_TCP_BACKLOG_SIZE must be greater than
	  or equal to CONFIG_NET_APP_SERVER_NUM_CONN.

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
	depends on NET_TCP
	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
	select MBEDTLS
	default n
	help
	  Enables net app library to use DTLS 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_APP_TLS_STACK_SIZE
	int "TLS handler thread stack size"
	default 8192
	depends on NET_APP_TLS || NET_APP_DTLS
	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 overridden 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 overridden 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 || IEEE802154_RAW_MODE || NET_L2_OPENTHREAD

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.

endif # NET_L2_IEEE802154 || IEEE802154_RAW_MODE || NET_L2_OPENTHREAD

if NET_L2_IEEE802154 || IEEE802154_RAW_MODE

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 || IEEE802154_RAW_MODE

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
