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 (RFC 8200) is supported. 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 IEEE 802.15.4 networks (RFC 4944).
DHCPv6 (Dynamic Host Configuration Protocol for IPv6) (RFC 8415) client functionality is supported.
The IPv6 privacy extension (RFC 8981) is supported.
IPv4 (RFC 791) is supported. It cannot be used by IEEE 802.15.4 as this network technology supports only IPv6. IPv4 can be used for example in Ethernet, Wi-Fi and Cellular based networks.
DHCP (Dynamic Host Configuration Protocol) client and server 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 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 BSD sockets compatible API is implemented. Both blocking and non-blocking datagram (UDP) and stream (TCP) sockets are supported. Packet sockets (
AF_PACKET) are also 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) versions 3.1.1 and 5.0 are supported. A sample MQTT publisher client application for MQTT v3.1.1 and v5.0 is provided.
MQTT-SN MQTT for Sensor Networks version 1.2 is supported. A sample MQTT-SN publisher client application is provided.
CoAP Constrained Application Protocol (RFC 7252) is supported. Both CoAP client and CoAP service sample applications are provided.
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. LwM2M client sample implements the library as an example.
HTTP Hypertext Transfer Protocol client and server are supported. HTTP Client library supports HTTP/1.1 (RFC 2616). HTTP Server library supports HTTP/1.1 (RFC 2616) and HTTP/2 (RFC 9113). HTTP Client and HTTP Server samples are provided.
Websocket (RFC 6455) client is supported. WebSocket Client sample is provided.
DNS Domain Name Service (RFC 1035) 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) and link-local multicast name resolution (LLMNR, RFC 4795) are supported. The DNS Service Discovery (RFC 6763) is also supported.
Network Management API. Applications can use network management API to listen management events generated by core network stack when for example IP address is added to the device, or network interface is coming up etc.
Wi-Fi Management API. Applications can use Wi-Fi management API to manage the interface, in example to connect to Wi-Fi network and to scan available Wi-Fi networks.
Wi-Fi Network Manager API. Wi-Fi Network Managers can now register themselves to the Wi-Fi stack. The Network Managers can then implement the Wi-Fi Management API and manage the Wi-Fi interface.
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, Wi-Fi 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 VLAN support for more details.
Network traffic classification. The sent and received network packets can be prioritized depending on application needs. See traffic classification for more details.
Time Sensitive Networking. Both the gPTP (generalized Precision Time Protocol) and PTP (Precision Time Protocol, IEEE 1588) are supported. See gPTP support and PTP support for more details.
SNTP Simple Network Time Protocol (RFC 5905) client is supported. SNTP client sample is provided.
SOCKS5 proxy version 5 (RFC 1928) is supported.
TFTP Trivial File Transfer Protocol (RFC 1350) client is supported. TFTP client sample is provided.
MIDI2 MIDI 2.0 network UDP transport is supported. MIDI2 network transport sample is provided.
OCPP Open Charge Point Protocol is supported. OCPP charge point sample is provided.
Prometheus Metric Server functionality is supported. Prometheus Sample is provided.
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 network shell for more details.
zperf is an iPerf v2 network performance and bandwidth measurement tool. Both client and server functionality is supported. zperf: Network Traffic Generator sample is provided.
Additionally these network technologies (link layers) are supported in Zephyr OS:
IEEE 802.15.4
Bluetooth
Ethernet, IEEE 802.3
Wi-Fi, IEEE 802.11
Cellular / PPP (RFC 1661)
Thread (OpenThread samples are provided)
CAN bus for SocketCAN
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/
Various optional network stack components like connection manager, packet filter code and hostname handling are located here.
- subsys/net/ip/
This is where the core network stack code is located.
- subsys/net/l2
This is where the IP stack layer 2 code is located. This includes generic support for 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/zephyr/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).