.. _ip_stack_overview:

Overview
########

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).
  * 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) is enabled by default.
  * Multicast Listener Discovery v2 support (RFC 3810) is enabled by default.
  * IPv6 header compression (6lo) is available for IPv6 connectivity for
    Bluetooth IPSP (RFC 7668) and IEEE 802.15.4 networks (RFC 4944).

* **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).
  * 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) 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) 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.

* **HTTP** Hypertext Transfer Protocol (RFC 2116) is supported. A simple
  library is provided that applications can use. Sample applications are
  implemented for :ref:`http-client-sample` and :ref:`http-server-sample`.
  Both :ref:`http-client-sample` and :ref:`http-server-sample` can use
  TLS (Transport Layer Security) v1.2 (RFC 5246) or SSL (Secure Sockets
  Layer) v3.0 (RFC 6101) functionality to encrypt the network traffic.
  The secured connections are provided by mbed 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) is supported. Both
  Both :ref:`zoap-client-sample` and :ref:`zoap-server-sample` sample
  applications are implemented. A :ref:`coap-client-sample` and
  :ref:`coap-server-sample` using DTLS (Datagram Transport Layer Security)
  (RFC 6347) are also implemented.

* **RPL** IPv6 Routing Protocol for Low-Power and Lossy Networks (RFC 6550)
  is supported. RPL is an IPv6 based mesh routing protocol.

* **DNS** Domain Name Service (RFC 1035) client functionality is supported.
  Applications can use an API to query domain name information or IP addresses
  from the DNS server. Both IPv4 (A) and IPv6 (AAAA) records can be queried.

* **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. For some technologies it
  is even possible to have zero-copy data path from application to device
  driver.

Additionally these network technologies are supported in Zephyr OS v1.7
or later:

* IEEE 802.15.4
* Bluetooth
* Ethernet

  * SLIP (IP over serial line) is 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 IP stack source code tree is organized as follows:

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

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