181 lines
7.9 KiB
ReStructuredText
181 lines
7.9 KiB
ReStructuredText
.. _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 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 :zephyr:code-sample:`mqtt-publisher` client application for MQTT v3.1.1 is
|
|
implemented.
|
|
|
|
* **CoAP** Constrained Application Protocol
|
|
(`RFC 7252 <https://tools.ietf.org/html/rfc7252>`_) is supported.
|
|
Both :zephyr:code-sample:`coap-client` and :zephyr:code-sample:`coap-server` 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.
|
|
:zephyr:code-sample:`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.
|
|
|
|
* **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 :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/
|