|  | .. _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. | 
|  | :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 |