Boot Linux faster!

Check our new training course

Boot Linux faster!

Check our new training course
and Creative Commons CC-BY-SA
lecture and lab materials

Bootlin logo

Elixir Cross Referencer

.. _ip_stack_migrate:

Migrating from Zephyr v1.6 IP Stack to v1.7

Zephyr v1.6 and earlier is using network IP stack that has its origin in uIP.
The uIP stack was modified heavily to use it in Zephyr. The uIP stack had
limitations described below that required new and native IP stack to be

This document is a high level description of the changes between these two
major Zephyr releases. For individual changes, the application developer can
find more details in the network header file documentation in include/net/.

Because of this new native IP stack, the following changes are required to
migrate applications using the older v1.6 IP stack to the new v1.7 IP stack:

Dual IPv6 and IPv4 stack support.
  In Zephyr v1.6, applications could not
  use both IPv6 and IPv4 simultaneously. This is changed in Zephyr v1.7 and the
  IP stack supports both IPv6 and IPv4 at the same time. In practice this means
  that applications should be prepared to support both IPv6 and IPv4 in the

Multiple simultaneous network technologies support.
  In Zephyr v1.7 it is possible to have multiple network technologies enabled
  at the same time. This means that applications can utilize concurrently e.g.,
  IEEE 802.15.4 and Bluetooth IP networking. The different network technologies
  are abstracted to network interfaces and there can be multiple network
  interfaces in the system depending on configuration.

Network Kconfig options are changed.
  Most of the networking configuration
  options are renamed. Please check the :ref:`networking` documentation for the
  new names.

All uIP based APIs are gone.
  Those APIs were not public in v1.6 but
  applications could call them anyway. These uIP APIs were mainly used to set
  IP address etc. management style operations. The new management APIs can be
  found in net_if.h and net_mgmt.h in Zephyr v1.7.

Network buffer management is changed.
  In earlier Zephyr versions, there
  were big 1280 byte long buffers that applications could utilize. In Zephyr
  v1.7 this is changed so that device memory is utilized more efficiently.
  Now small buffer fragments are allocated to store the data, and these
  fragments can then be chained together to store larger amount of data. For
  applications this means that the memory received from network or sent to
  network is not contiguous and application should use the helper functions
  found in nbuf.h when reading and writing the network data.

Network context/socket API is changed.
  The new API found in net_context.h
  is more BSD-socket-like than the earlier API. The new context API is not
  fully BSD socket compatible as it needs to support both synchronous and
  asynchronous operations. Porting BSD socket application to use the
  net_context_* API is easier than in Zephyr v1.6.

CoAP library API is changed.
  The Zephyr v1.6 CoAP API is removed.
  The new Zephyr v1.7 API is called ZoAP and it can be found in zoap.h header

The TinyDTLS library is removed.
  The tinydtls crypto library was used
  only by CoAP in Zephyr v1.6 and it is removed in Zephyr v1.7. It is replaced
  by mbedtls library.