.. _net_app_api:

Network Application API
#######################

The Network Application (net-app) API allows applications to:

**Initialize**
  The application for networking use. This means, for example,
  that if the application needs to have an IPv4 address, and if DHCPv4 is
  enabled, then the net-app API will make sure that the device will get an
  IPv4 address before the application is started.

**Set**
  Various options for the networking subsystem. This means that if the
  user has set options like IP addresses, IEEE 802.15.4 channel etc. in the
  project configuration file, then those settings are applied to the system
  before the application starts.

**Create**
  A simple TCP/UDP server or client application. The net-app API
  has functions that make it easy to create a simple TCP or UDP based network
  application. The net-app API also provides transparent TLS and DTLS support
  for the application.

The net-app API functionality is enabled by :option:`CONFIG_NET_APP` option.
The current net-app API implementation is still experimental and may change and
improve in future releases.

Initialization
##############

The net-app API provides a :cpp:func:`net_app_init()` function that can
configure the networking subsystem for the application. The following
configuration options control this configuration:

:option:`CONFIG_NET_APP_AUTO_INIT`
  automatically configures the system according to other configuration options.
  The user does not need to call :cpp:func:`net_app_init()` in this case as that
  function will be automatically called when the system boots. This option is
  enabled by default.

:option:`CONFIG_NET_APP_INIT_TIMEOUT`
  specifies how long to wait for the network configuration during the system
  boot. For example, if DHCPv4 is enabled, and if the IPv4 address discovery
  takes too long or the DHCPv4 server is not found, the system will resume
  booting after this number of seconds.

:option:`CONFIG_NET_APP_NEED_IPV6`
  specifies that the application needs IPv6 connectivity. The
  :cpp:func:`net_app_init()` function will wait until it is able to setup an
  IPv6 address for the system before continuing. This means that the IPv6
  duplicate address detection (DAD) has finished and the system has properly
  setup the IPv6 address.

:option:`CONFIG_NET_APP_NEED_IPV6_ROUTER`
  specifies that the application needs IPv6 router connectivity; i.e., it needs
  access to external networks (such as the Internet). The
  :cpp:func:`net_app_init()` function will wait until it receives a router
  advertisement (RA) message from the IPv6 router before continuing.

:option:`CONFIG_NET_APP_NEED_IPV4`
  specifies that the application needs IPv4 connectivity. The
  :cpp:func:`net_app_init()` function will wait, unless a static IP address is
  configured, until it is able to setup an IPv4 address for the network
  subsystem.

Setup
#####

Various system level network configuration options can be added to the project
configuration file. These settings are enabled by the
:option:`CONFIG_NET_APP_SETTINGS` configuration option. This option is disabled
by default, and other net-app options may also be disabled by default if
generic support for the networking feature is disabled. For example, the IPv6
net-app options are only available if generic IPv6 support is enabled.

:option:`CONFIG_NET_APP_MY_IPV6_ADDR`
  This option sets a static IPv6 address for the system. This is typically only
  useful in device testing as normally the system should use SLAAC (IPv6
  Stateless Address Auto Configuration), which is enabled by default in the
  system. The system can be configured to use multiple IPv6 addresses; this is
  controlled by the :option:`CONFIG_NET_IF_UNICAST_IPV6_ADDR_COUNT`
  configuration option.

:option:`CONFIG_NET_APP_PEER_IPV6_ADDR`
  This option specifies what is the peer device IPv6 address. This is only
  useful when testing client/server type applications. This peer address is
  typically used as a parameter when calling :cpp:func:`net_app_connect()`.

:option:`CONFIG_NET_APP_MY_IPV4_ADDR`
  This option sets a static IPv4 address for the system. This is typically
  useful only in device testing as normally the system should use DHCPv4 to
  discover the IPv4 address.

:option:`CONFIG_NET_APP_PEER_IPV4_ADDR`
  This option specifies what is the peer device IPv4 address. This is only
  useful when testing client/server type applications. This peer address is
  typically used as a parameter when connecting to other device.

The following options are only available if IEEE 802.15.4 wireless network
technology support is enabled.

:option:`CONFIG_NET_APP_IEEE802154_DEV_NAME`
  This option specifies the name of the IEEE 802.15.4 device.

:option:`CONFIG_NET_APP_IEEE802154_PAN_ID`
  This option specifies the used PAN identifier.
  Note that the PAN id can be changed at runtime if needed.

:option:`CONFIG_NET_APP_IEEE802154_CHANNEL`
  This option specifies the used radio channel.
  Note that the used channel can be changed at runtime if needed.

:option:`CONFIG_NET_APP_IEEE802154_RADIO_TX_POWER`
  This option specifies the initial radio TX power level. The TX power level can
  be changed at runtime if needed.

:option:`CONFIG_NET_APP_IEEE802154_SECURITY_KEY`
  This option specifies the initially used security key. The security key can be
  changed at runtime if needed.

:option:`CONFIG_NET_APP_IEEE802154_SECURITY_KEY_MODE`
  This option specifies the initially used security key mode. The security key
  mode can be changed at runtime if needed.

:option:`CONFIG_NET_APP_IEEE802154_SECURITY_LEVEL`
  This option specifies the initially used security level. The used security
  level can be changed at runtime if needed.

Client / Server Applications
############################

The net-app API provides functions that enable the application to create
client / server applications easily. If needed, the applications can
have the communication secured by TLS (for TCP connections) or DTLS (for
UDP connections) automatically.

A simple **TCP server** application would make the following net-app API
function calls:

* :cpp:func:`net_app_init_tcp_server()` to configure a local address and TCP
  port.

* :cpp:func:`net_app_set_cb()` to configure callback functions to invoke in
  response to events, such as data reception.

* :cpp:func:`net_app_server_tls()` will optionally setup the system for secured
  connections. To enable the TLS server, also call the
  :cpp:func:`net_app_server_tls_enable()` function.

* :cpp:func:`net_app_listen()` will start listening for new client connections.

Creating a **UDP server** is also very easy:

* :cpp:func:`net_app_init_udp_server()` to configure a local address and UDP
  port.

* :cpp:func:`net_app_set_cb()` to configure callback functions to invoke in
  response to events, such as data reception.

* :cpp:func:`net_app_server_tls()` will optionally setup the system for secured
  connections. To enable the DTLS server, also call the
  :cpp:func:`net_app_server_tls_enable()` function.

* :cpp:func:`net_app_listen()` will start listening for new client connections.

If the server wants to stop listening for connections, it can call
:cpp:func:`net_app_release()`. After this, if the application wants to start
listening for incoming connections again, it must call the server
initialization functions.

For TLS/DTLS connections, the server can be disabled by a call to
:cpp:func:`net_app_server_tls_disable()`. There are separate enable/disable
functions for TLS support because we need a separate crypto thread for calling
mbedtls crypto API functions. The enable/disable TLS functions will
either create the TLS thread or kill it.

A simple **TCP client** application would make the following net-app API
function calls:

* :cpp:func:`net_app_init_tcp_client()` to configure a local address, peer
  address and TCP port. If the DNS resolver support is enabled in the
  project configuration file, then the peer address can be given as a hostname,
  and the API tries to resolve it to IP address before connecting.

* :cpp:func:`net_app_set_cb()` to configure callback functions to invoke in
  response to events, such as data reception.

* :cpp:func:`net_app_client_tls()` will optionally setup the system for secured
  connections. The TLS crypto thread will be automatically created when the
  application calls :cpp:func:`net_app_connect()` function.

* :cpp:func:`net_app_connect()` will initiate a new connection to the peer host.

Creating a **UDP client** is also very easy:

* :cpp:func:`net_app_init_udp_client()` to configure a local address, peer
  address and UDP port. If peer name is a hostname, then it will be
  automatically resolved to IP address if DNS resolver is enabled.

* :cpp:func:`net_app_set_cb()` to configure callback functions to invoke in
  response to events, such as data reception.

* :cpp:func:`net_app_client_tls()` will optionally setup the system for secured
  connections. The DTLS crypto thread will be automatically created when the
  application calls :cpp:func:`net_app_connect()` function.

* :cpp:func:`net_app_connect()` will initiate a new connection to the peer host.
  As the UDP is connectionless protocol, this function is very simple and it
  will just call the connected callback if that is defined.

As both the ``echo_server`` and ``echo_client`` applications use net-app API
functions, please see those applications for more detailed usage examples.

The `net-tools`_ project has information how to test the system if TLS and
DTLS support is enabled. See the **README** file in that project for more
information.

.. _`net-tools`: https://github.com/zephyrproject-rtos/net-tools
