emb6 is a scalable C-based 6LoWPAN stack for embedded devices
Clone or download
Pull request Compare This branch is 2166 commits ahead of hso-esk:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.



emb::6 is a scalable C-based 6LoWPAN stack for embedded devices developed by the Laboratory of Embedded Systems and Communication Electronics (ESK) at Offenburg University of Applied Sciences (HSO) under supervision of Prof. Dr. Axel Sikora (axel.sikora@hs-offenburg.de).

Originally derived from Contiki several adaptations have been made such as the removal of proto-threads. It follows a strict layer based architecture with a modular software design allowing it to be used even on very restricted devices.


In the last decade, IPv6 over Low power Wireless Personal Area Networks, also known as 6LoWPAN, has well evolved as a primary contender for short range wireless communication and holds the promise of an Internet of Things, which is completely based on the Internet Protocol. The IEEE 802.15.4 standard specifies a maximum frame size of 127 bytes where the IPv6 specification requires a minimum MTU of 1280 byte. With the 6LoWPAN adaptation layer it is possible to make use of IPv6 in small and constrained wireless networks which follows the IEEE 802.15.4 standard. In the meantime, various 6LoWPAN implementations are available, be it open source or commercial. One of the open source implementations is the C-based emb::6 stack.

The emb::6 stack is optimized to be used in constrained devices without an operation system. The stack operates event driven with a scalable buffer handling for optimization on different platforms. The typical field of application is in wireless sensor networks, e.g. for home automation or industrial environments.

Getting started

For the best introduction to get started with emb::6, please read the documentation included, our Wiki page. For the code comments you will also find a doxygen project file within the doc folder.

If you want to launch an LCM based lightweight virtualisation with various routing topologies you are invited to visit a dedicated Wiki page

Building emb::6

The emb::6 build system is based on scons. Therefore several options are available to configure the build accordingly. For detailed instructions please visit the according Wiki-Page. For an initial build with a simple demo you can run the following comands to build to executables for the native Linux target (keep in mind that the LCM libraries have to be installed in advance.)

scons --demos=UDPSrv --bsp=native --net=rpl-dagroot --os=none --mac=0x00AA --logger=3 --ccflags=MODULATION=MODULATION_2FSK50,LOGGER_DEMO_UDP_SOCKET=TRUE
scons --demos=UDPCli --bsp=native --net=rpl-router --os=none --mac=0x00BB --logger=3 --ccflags=MODULATION=MODULATION_2FSK50,LOGGER_DEMO_UDP_SOCKET=TRUE

Afterwards you can run the both executables using the following commands in two separate terminals. Then you should be able to see the according debug output.




There are several IOT capable stacks available may it be on open source or on commercial basis. The emb::6 networking stack provides several salient features making it a unique offering. The main features and concepts of the stack are the following:

  • Event Driven Operation - Very small RAM overhead, one memory stack for the whole system.
  • Scalable Buffer Handling - A common buffer module is used across layer and module boundaries. This decreases memory usage and furthermore provides scalability for usage on different hardware configurations and limitations.
  • Static memory management - For additional stability during runtime.
  • Compile Time Options - Usage of different compile-time settings help to make an optimum selection regarding to the anticipated use cases as well as to the hardware limitations such as memory size or computing performance.
  • Run Time Options - Many stack parameters are accessible and changeable during runtime via remote management.
  • Full IPv6 support - The integrated IPv6 protocol is based on the uIP-Stack. This provides full IPv6 support and guarantees further support and maintenance.
  • BSP and HAL Abstraction - Hardware dependencies are abstracted with a BSP which offers an API between the target and the applications and with a hardware abstraction layer HAL, which allows independence from the used microcontroller IC.
  • Optimized for use in constrained devices- The scalability of the stack enables a manifold use in highly diverse embedded systems.
  • Routing functionality - The routing functionality is provided by the RPL protocol.
  • Layered Architecture - The design of the software stack follows a strict layered architecture.
  • Simple Setup and Configuration - The setup and configuration can be easily executed with the help of centralized configuration files.
  • Socket Interface- A BSD like socket API allows easy integration of customized applications.
  • Set of included Application Layer Protocols - e.g. COAP (further will follow)

Build System

The buildsystem of emb::6 is completely based on SCons as a replacement for make with improved features. SCons is based on Python, makeing the tool very powerful for the build process. It allows to easily create new configurations e.g. regarding MCU/Transceiver or application selection. Furhermore the build-time is decreased significantly.

Supported Targets

emb::6 is very platform independent since it has no requirements to an OS and hardware access is abstracted in a simple "single-file-based" hardware abstraction layer. That makes it quite easy to port emb::6 to other platforms. However emb::6 comes with support of several platforms e.g. based on ATMega, Cortex-M0/M3, or MSP430. Furthermore a native build i supported to run emb::6 on Linux based machines.


For questions or recommendations don't hesitate to contact emb6@hs-offenburg.de