| <!-- | |
| 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é | |
| </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> |