.. _ip_stack_overview:

Overview
########

.. contents::
    :local:
    :depth: 2

Supported Features
******************

The networking IP stack is modular and highly configurable via build-time
configuration options. You can minimize system memory consumption by enabling
only those network features required by your application. Almost all features
can be disabled if not needed.

* **IPv6** The support for IPv6 is enabled by default. Various IPv6 sub-options
  can be enabled or disabled depending on networking needs.

  * Developer can set the number of unicast and multicast IPv6 addresses that
    are active at the same time.
  * The IPv6 address for the device can be set either statically or
    dynamically using SLAAC (Stateless Address Auto Configuration)
    (`RFC 4862 <https://tools.ietf.org/html/rfc4862>`_).
  * The system also supports multiple IPv6 prefixes and the maximum
    IPv6 prefix count can be configured at build time.
  * The IPv6 neighbor cache can be disabled if not needed, and its size can be
    configured at build time.
  * The IPv6 neighbor discovery support
    (`RFC 4861 <https://tools.ietf.org/html/rfc4861>`_) is enabled by default.
  * Multicast Listener Discovery v2 support
    (`RFC 3810 <https://tools.ietf.org/html/rfc3810>`_) is enabled by default.
  * IPv6 header compression (6lo) is available for IPv6 connectivity for
    Bluetooth IPSP (`RFC 7668 <https://tools.ietf.org/html/rfc7668>`_) and
    IEEE 802.15.4 networks (`RFC 4944 <https://tools.ietf.org/html/rfc4944>`_).

* **IPv4** The legacy IPv4 is supported by the networking stack. It cannot be
  used by IEEE 802.15.4 or Bluetooth IPSP as those network technologies support
  only IPv6. IPv4 can be used in Ethernet based networks. By default IPv4
  support is disabled.

  * DHCP (Dynamic Host Configuration Protocol) client is supported
    (`RFC 2131 <https://tools.ietf.org/html/rfc2131>`_).
  * The IPv4 address can also be configured manually. Static IPv4 addresses
    are supported by default.

* **Dual stack support.** The networking stack allows a developer to configure
  the system to use both IPv6 and IPv4 at the same time.

* **UDP** User Datagram Protocol
  (`RFC 768 <https://tools.ietf.org/html/rfc768>`_) is supported.
  The developer can send UDP datagrams (client side support) or create a
  listener to receive UDP packets destined to certain port (server side
  support).

* **TCP** Transmission Control Protocol
  (`RFC 793 <https://tools.ietf.org/html/rfc793>`_) is supported. Both server
  and client roles can be used the the application. The amount of TCP sockets
  that are available to applications can be configured at build time.

* **BSD Sockets API** Support for a subset of a
  :ref:`BSD sockets compatible API <bsd_sockets_interface>` is
  implemented. Both blocking and non-blocking datagram (UDP) and stream (TCP)
  sockets are supported.

* **Secure Sockets API** Experimental support for TLS/DTLS secure protocols and
  configuration options for sockets API. Secure functions for the implementation
  are provided by mbedTLS library.

* **MQTT** Message Queue Telemetry Transport (ISO/IEC PRF 20922) is supported.
  A sample :ref:`mqtt-publisher-sample` client application for MQTT v3.1.1 is
  implemented.

* **CoAP** Constrained Application Protocol
  (`RFC 7252 <https://tools.ietf.org/html/rfc7252>`_) is supported.
  Both :ref:`coap-client-sample` and :ref:`coap-server-sample` sample
  applications are implemented.

* **LWM2M** OMA Lightweight Machine-to-Machine Protocol
  (`LwM2M specification 1.0.2`_) is
  supported via the "Register Device" API (Register, De-Register and Update)
  and has template implementations for Security, Server, Device Management and
  Firmware objects. Bootstrap support is currently not supported.
  :ref:`lwm2m-client-sample` implements the library as an example.

* **DNS** Domain Name Service
  (`RFC 1035 <https://tools.ietf.org/html/rfc1035>`_) client functionality
  is supported.
  Applications can use the DNS API to query domain name information or IP
  addresses from the DNS server. Both IPv4 (A) and IPv6 (AAAA) records can
  be queried.
  Both multicast DNS (mDNS) (`RFC 6762 <https://tools.ietf.org/html/rfc6762>`_)
  and link-local multicast name resolution
  (LLMNR) (`RFC 4795 <https://tools.ietf.org/html/rfc4795>`_) are supported.

* **Network Management API.** Applications can use network management API to
  listen management events generated by core stack when for example IP address
  is added to the device, or network interface is coming up etc.

* **Multiple Network Technologies.** The Zephyr OS can be configured to
  support multiple network technologies at the same time simply by enabling
  them in Kconfig: for example, Ethernet and 802.15.4 support. Note that no
  automatic IP routing functionality is provided between these technologies.
  Applications can send data according to their needs to desired network
  interface.

* **Minimal Copy Network Buffer Management.** It is possible to have minimal
  copy network data path. This means that the system tries to avoid copying
  application data when it is sent to the network.

* **Virtual LAN support.** Virtual LANs (VLANs) allow partitioning of physical
  ethernet networks into logical networks.
  See :ref:`VLAN support <vlan_interface>` for more details.

* **Network traffic classification.** The sent and received network packets can
  be prioritized depending on application needs.
  See :ref:`traffic classification <traffic-class-support>` for more details.

* **Time Sensitive Networking.** The gPTP (generalized Precision Time Protocol)
  is supported. See :ref:`gPTP support <gptp_interface>` for more details.

* **Network shell.** The network shell provides helpers for figuring out
  network status, enabling/disabling features, and issuing commands like ping
  or DNS resolving. The net-shell is useful when developing network software.
  See :ref:`network shell <net_shell>` for more details.

Additionally these network technologies (link layers) are supported in
Zephyr OS v1.7 and later:

* IEEE 802.15.4
* Bluetooth
* Ethernet
* SLIP (IP over serial line). Used for testing with QEMU. It provides
  ethernet interface to host system (like Linux) and test applications
  can be run in Linux host and send network data to Zephyr OS device.

Source Tree Layout
******************

The networking stack source code tree is organized as follows:

``subsys/net/ip/``
  This is where the IP stack code is located.

``subsys/net/l2/``
  This is where the IP stack layer 2 code is located. This includes generic
  support for Bluetooth IPSP adaptation, Ethernet, IEEE 802.15.4 and WiFI.

``subsys/net/lib/``
  Application-level protocols (DNS, MQTT, etc.) and additional stack
  components (BSD Sockets, etc.).

``include/net/``
  Public API header files. These are the header files applications need
  to include to use IP networking functionality.

``samples/net/``
  Sample networking code. This is a good reference to get started with
  network application development.

``tests/net/``
  Test applications. These applications are used to verify the
  functionality of the IP stack, but are not the best
  source for sample code (see ``samples/net`` instead).

.. _LwM2M specification 1.0.2:
   http://openmobilealliance.org/release/LightweightM2M/V1_0_2-20180209-A/OMA-TS-LightweightM2M-V1_0_2-20180209-A.pdf
