The Wakaama project is a proposed open source project under the Technology Top-level Project.
This proposal is in the Project Proposal Phase (as defined in the Eclipse Development Process) and is written to declare its intent and scope. We solicit additional participation and input from the Eclipse community. Please send all feedback to the Eclipse Proposals Forum.
The Open Mobile Alliance (OMA) is a standards body which develops open standards for the mobile phone industry like Multimedia Messaging Service (MMS), OMA Data Synchronization (OMA-DS) and OMA Device Management (OMA-DM). In February 2012, OMA-DM reached 1.4 Billion deployment in commercial devices.
Analysis Mason forecasts that the number of M2M connected devices will grow to 2.1 billion devices in 2020. Machina Research projects that the number of M2M connections will grow to 20 billion in 2020. There will be more M2M devices shipped each year than PCs, tablets, cell phones, set-top-boxes and gaming platforms put together. This is why the OMA is now looking at M2M and the Internet of Things. At the end of 2013, OMA released the specifications for Lightweight M2M (LWM2M).
OMA Lightweight M2M is a protocol for device and service management. The main purpose of this technology is to address service and management needs for constrained M2M devices, over a number of transports and bearers. The crucial aspects in this work are:
- The target, that is a variety of devices “constrained” at very different levels
- Data collection and remote controlling without complex computing and UI operations
- The optimization of network resources, as a very large numbers of devices may be connected to the communication network simultaneously
- The fusion of device functionalities management and service manipulation in a single protocol
LWM2M defines three logical components:
- The LWM2M Server which manages LWM2M Clients.
- The LWM2M Client executing the operations from the LWM2M Server and reporting results of the operations for the device management and the service enablement.
- The LWM2M Bootstrap Server which configures the LWM2M Clients.
And four interfaces between these logical components:
Device Discovery and Registration
This interface allows a LWM2M Client let the LWM2M Server know its existence and information (e.g., capability).
This interface is used by the LWM2M Bootstrap Server to set initial parameters and configurations on the LWM2M Client.
Device Management and Service Enablement
This interface allows the LWM2M Server to perform the device management and M2M service enablement. Over this interface, the LWM2M Server can send operations to the Client and gets response of the operations from the LWM2M Client.
This interface allows the LWM2M Client to report resource information to the LWM2M Server. This Information Reporting can be triggered periodically or by events.
The LWM2M has the protocol stack defined as below:
- LWM2M Objects: LWM2M Objects are designed for each functionality the LWM2M Client provides. The LWM2M specification provides Standard Objects.
- LWM2M Protocol: defines logical operations and mechanisms per each interface.
- CoAP: LWM2M utilizes the IETF Constrained Application Protocol as an underlying transfer protocol across UDP and SMS bearers. This protocol defines the message header, request/response codes, message options, and retransmission mechanisms. LWM2M only uses the subset of features defined CoAP.
- DTLS: DTLS is used to provide security channel between the LWM2M Server and the LWM2M Client for all the messages interchanged.
- UDP Binding is mandatory and SMS Binding optional.
Like in OMA-DM, in LWM2M the LWM2M Server manipulates resources on LWM2M Clients using commands like Read, Write, Execute, Create or Delete. The LWM2M Client may have any number of Resources, each of which belongs to an Object. An Object defines a grouping of Resources, for example the Firmware Object contains all the Resources used for firmware update purposes. The LWM2M enabler defines standard Objects and Resources and other Objects may be added to enable a certain M2M Services.
The Wakaama project covers the LWM2M Protocol, CoAP, and DTLS layers of the LWM2M protocol stack for all three logical components: LWM2M Client, LWM2M Server and LWM2M Bootstrap Server. An application using Wakaama can fill any LWM2M roles or all of them at once.
The CoAP and DTLS layers may be provided by external components.
Regarding LWM2M Objects, Wakaama only covers the objects required to have a functional LWM2M stack: LWM2M Security Object, LWM2M Server Object and optionally Access Control Object. Other LWM2M Objects are added as plugins to Wakaama by the application.
Wakaama is not a library but files to be built with
an application. It is written in C and designed to be portable on POSIX
Two compilation switches are used: LWM2M_CLIENT_MODE and LWM2M_SERVER_MODE. Defining LWM2M_CLIENT_MODE enables the LWM2M Client interfaces. Defining LWM2M_SERVER_MODE enables the LWM2M Server interfaces. Both can be defined at the same time.
Wakaama is mono-threaded. An application can call a HandlePacket API to feed Wakaama with received LWM2M packets and a Step API to perform any pending LWM2M operations.
Wakaama provides APIs for a server application to send commands to registered LWM2M Clients. On client applications, Wakaama checks received commands for syntax and access rights and then dispatches them to the relevant objects.
Providing an OMA Lightweight M2M protocol implementation to the Eclipse
community will help developers to write interoperable M2M services
without having to deal with the complexity of the standard or having a
deep knowledge of it.
Being hosted by Eclipse, this project will welcome further contributions more easily, help the interoperability and thus reduce the fragmentation, to the best benefit of the technology and the industry.
Wakaama initial implementation is currently available on GitHub.
The code is functional and implements the Device Discovery and
Registration interface, the Device Management and Service Enablement
interface and the Information Reporting interface.
The missing features are the Bootstrap interface, the DTLS layer and the Access Control Object.
Wakaama comes with two test applications: a LWM2M Client and a LWM2M Server. Both features a basic command line interface.
The LWM2M protocol engine copyright is held by Intel Corporation with
some contributions by Sierra Wireless.
Wakaama includes files from the Erbium CoAP Engine for Contiki which is copyrighted by the Institute for Pervasive Computing, ETH Zurich and released under a BSD 3-clause license.
Wakaama is currently released under the BSD 3-clause license.
The proposed licensing for this project will rely on dual license, Eclipse Distribution License and Eclipse Public License.
The following individuals are proposed as initial committers to the project:
- David Navarro, Intel Corporation
- Julien Vermillard, Sierra Wireless
- Manuel Sangoï, Sierra Wireless
We welcome additional committers and contributions.
The following Architecture Council members will mentor this project:
- Benjamin Cabé
- Martin Oberhuber
The following individuals, organisations, companies and projects have expressed interest in this project:
- Sierra Wireless
Changes to this Document