blob: 3c0e5703717110906436982c53fc1184a42e028b [file] [log] [blame]
<!--
This document is provided as a template along with some guidance for creating
your project proposal. This is just a template. Feel free to change it as
you see fit (add sections, remove section). We feel, however, that the
suggestions represented in this document represent the reasonable minimum
amount of information to move forward.
Please keep the formatting in this document simple. Please do not edit
this document in Microsoft Word as it adds huge piles of markup that make
it difficult to restyle.
More information is available here:
http://wiki.eclipse.org/Development_Resources/HOWTO/Pre-Proposal_Phase
Direct any questions about this template to emo@eclipse.org
-->
<html>
<head>
<!--
Include the title here. We will parse it out of here and include it on the
rendered webpage. Do not duplicate the title within the text of your page.
-->
<title>Wakaama</title>
</head>
<!--
We make use of the 'classic' HTML Definition List (dl) tag to specify
committers. I know... you haven't seen this tag in a long while...
-->
<style>
dt {
display: list-item;
list-style-position:outside;
list-style-image:url(/eclipse.org-common/themes/Phoenix/images/arrow.gif);
margin-left:16px;
}
dd {
margin-left:25px;
margin-bottom:5px;
}
</style>
<body>
<p>
The Wakaama project is a proposed open source project under the
<a href="http://projects.eclipse.org/projects/technology">Technology
Top-level Project</a>.
</p>
<p>
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
<a href="http://www.eclipse.org/forums/eclipse.proposals">Eclipse
Proposals</a> Forum.
</p>
<h2>Background</h2>
<p>
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.
</p>
<p>
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).
</p>
<p>
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:
</p>
<ul>
<li>
The target, that is a variety of devices “constrained” at very
different levels
</li>
<li>
Data collection and remote controlling without complex
computing and UI operations
</li>
<li>
The optimization of network resources, as a very large numbers
of devices may be connected to the communication network
simultaneously
</li>
<li>
The fusion of device functionalities management and service
manipulation in a single protocol</li>
</ul>
<p>
LWM2M defines three logical components:</p>
<ul>
<li>
The LWM2M Server which manages LWM2M Clients.
</li>
<li>
The LWM2M Client executing the operations from the LWM2M Server
and reporting results of the operations for the device
management and the service enablement.
</li>
<li>
The LWM2M Bootstrap Server which configures the LWM2M Clients.
</li>
</ul>
<p>And four interfaces between these logical components:</p>
<ul>
<li>
Device Discovery and Registration<br/>
This interface allows a LWM2M Client let the LWM2M Server know
its existence and information (e.g., capability).
</li>
<li>
Bootstrap<br/>
This interface is used by the LWM2M Bootstrap Server to set
initial parameters and configurations on the LWM2M Client.
</li>
<li>
Device Management and Service Enablement<br/>
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.
</li>
<li>
Information Reporting<br/>
This interface allows the LWM2M Client to report resource
information to the LWM2M Server. This Information Reporting can
be triggered periodically or by events.
</li>
</ul>
<p>The LWM2M has the protocol stack defined as below:</p>
<img src="liblwm2m_pic1.png" />
<ul>
<li>
LWM2M Objects: LWM2M Objects are designed for each
functionality the LWM2M Client provides. The LWM2M
specification provides Standard Objects.
</li>
<li>
LWM2M Protocol: defines logical operations and
mechanisms per each interface.
</li>
<li>
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.
</li>
<li>
DTLS: DTLS is used to provide security channel between the
LWM2M Server and the LWM2M Client for all the messages
interchanged.
</li>
<li>
UDP Binding is mandatory and SMS Binding optional.
</li>
</ul>
<p>
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.
</p>
<h2>Scope</h2>
<p>
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.
</p>
<p>
The CoAP and DTLS layers may be provided by external components.
</p>
<p>
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.
</p>
<h2>Description</h2>
<p>
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
compliant systems.<br/>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<h2>Why Eclipse?</h2>
<p>
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.<br/>
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.
</p>
<h2>Initial Contribution</h2>
<p>
Wakaama initial implementation is currently available on
<a href="https://github.com/01org/liblwm2m">GitHub</a>.
</p>
<p>
The code is functional and implements the Device Discovery and
Registration interface, the Device Management and Service Enablement
interface and the Information Reporting interface.<br/>
The missing features are the Bootstrap interface, the DTLS layer and
the Access Control Object.<br/>
Wakaama comes with two test applications: a LWM2M Client and a LWM2M
Server. Both features a basic command line interface.
</p>
<p>
The LWM2M protocol engine copyright is held by Intel Corporation with
some contributions by Sierra Wireless.<br/>
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.
</p>
<h2>Legal Issues</h2>
<p>
Wakaama is currently released under the BSD 3-clause license.<br/>
The proposed licensing for this project will rely on dual license,
Eclipse Distribution License and Eclipse Public License.
</p>
<h2>Committers</h2>
<p>
The following individuals are proposed as initial committers to the
project:
</p>
<dl>
<dt>David Navarro, Intel Corporation</dt>
<dt>Julien Vermillard, Sierra Wireless</dt>
<dt>Manuel Sangoï, Sierra Wireless</dt>
</dl>
<p>
We welcome additional committers and contributions.
</p>
<h2>Mentors</h2>
<!--
New Eclipse projects require a minimum of two mentors from the Architecture
Council. You need to identify two mentors before the project is created. The
proposal can be posted before this section is filled in (it's a little easier
to find a mentor when the proposal itself is public).
-->
<p>
The following Architecture Council members will mentor this project:
</p>
<ul>
<li>
Benjamin Cab&eacute;
</li>
<li>
Martin Oberhuber
</li>
</ul>
<h2>Interested Parties</h2>
<!--
Provide a list of individuals, organisations, companies, and other Eclipse
projects that are interested in this project. This list will provide some
insight into who your project's community will ultimately include. Where
possible, include affiliations. Do not include email addresses.
-->
<p>
The following individuals, organisations, companies and projects have
expressed interest in this project:
</p>
<ul>
<li>
Sierra Wireless
</li>
</ul>
<h2>Project Scheduling</h2>
<!--
Describe, in rough terms, what the basic scheduling of the project will
be. You might, for example, include an indication of when an initial contribution
should be expected, when your first build will be ready, etc. Exact
dates are not required.
-->
<h2>Changes to this Document</h2>
<!--
List any changes that have occurred in the document here.
You only need to document changes that have occurred after the document
has been posted live for the community to view and comment.
-->
<table>
<tr>
<th>Date</th>
<th>Change</th>
</tr>
<tr>
<td>04-December-2013</td>
<td>Document created</td>
</tr>
</table>
</body>
</html>