136 lines
6.1 KiB
ReStructuredText
136 lines
6.1 KiB
ReStructuredText
.. _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.
|
|
|
|
* **BSD Sockets API** Experimental support for a subset of a BSD Sockets
|
|
compatible API is implemented. Both blocking and non-blocking DGRAM (UDP)
|
|
and STREAM (TCP) sockets are supported.
|
|
|
|
* **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 :ref:`coap-client-sample` and :ref:`coap-server-sample` sample
|
|
applications are implemented. A :ref:`coaps-client-sample` and
|
|
:ref:`coaps-server-sample` using DTLS (Datagram Transport Layer Security)
|
|
(RFC 6347) are also implemented.
|
|
|
|
* **LWM2M** OMA Lightweight Machine-to-Machine Protocol (V1.0 Feb 2017) is
|
|
supported via the "Register Device" API (Register, De-Register and Update)
|
|
and has template implementations for Security, Server, Device Management and
|
|
Firmware objects. DTLS and Bootstrap support are currently not supported.
|
|
:ref:`lwm2m-client-sample` implements the library as an example.
|
|
|
|
* **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 (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 IP stack source code tree is organized as follows:
|
|
|
|
``subsys/net/ip/``
|
|
This is where the IP stack code is located.
|
|
|
|
``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).
|