.. _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 "Bootstrap", "Client
  Registration", "Device Management & Service Enablement" and "Information
  Reporting" interfaces.  The required core LwM2M objects are implemented as
  well as several IPSO Smart Objects. (`LwM2M specification 1.1.1`_) is
  supported in similar manner when enabled with a Kconfig option.
  :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 Wi-Fi.

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

.. _LwM2M specification 1.1.1:
   http://openmobilealliance.org/release/LightweightM2M/V1_1_1-20190617-A/
