Internet DRAFT - draft-hahm-lwig-painless-constrained-programming
draft-hahm-lwig-painless-constrained-programming
Light-Weight Implementation Guidance O. Hahm
(LWIG) E. Baccelli
Internet-Draft INRIA
Intended status: Informational K. Schleiser
Expires: September 10, 2013 SpreeBytes
March 9, 2013
Painless Class 1 Devices Programming
draft-hahm-lwig-painless-constrained-programming-00
Abstract
In order to fit the constraints of Class 0 devices (offering much
less than 10KiB of RAM and 100KiB of ROM) there are no alternatives
to implementing IP protocols in special software environments, which
impose programming paradigms that make implementation of protocol
specifications significantly more complex. However, our experience
implementing RFC 4944 and RFC 6282, TCP and UDP on Class 1 devices
(offering approximately 10KiB of RAM and 100KiB of ROM) shows that
there are alternatives concerning software environments in which to
implement IP protocols, which avoid such complexity by providing a
more developer-friendly environment. This draft shares this
experience.
Status of This Memo
This Internet-Draft is submitted to IETF in full conformance with the
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
This Internet-Draft will expire on September 10, 2013.
Copyright Notice
Copyright (c) 2013 IETF Trust and the persons identified as the
document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal
Hahm, et al. Expires September 10, 2013 [Page 1]
Internet-Draft Painless Class 1 devices Programming March 2013
Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License.
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3
2. Why implementations on Class 0 devices can be painful . . . . . 3
2.1. Learning curve . . . . . . . . . . . . . . . . . . . . . . 3
2.2. Implementing from scratch . . . . . . . . . . . . . . . . . 3
2.3. Increased complexity . . . . . . . . . . . . . . . . . . . 4
3. Why implementations on Class 1 devices can be painless . . . . 4
3.1. Average programmer background is OK . . . . . . . . . . . . 4
3.2. Leveraging more well-known tools . . . . . . . . . . . . . 5
3.3. Safer and quicker coding . . . . . . . . . . . . . . . . . 5
4. Security Considerations . . . . . . . . . . . . . . . . . . . . 5
5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . . 5
6. Informative References . . . . . . . . . . . . . . . . . . . . 5
Hahm, et al. Expires September 10, 2013 [Page 2]
Internet-Draft Painless Class 1 devices Programming March 2013
1. Introduction
In order to implement IP protocols with regard to the constraints of
Class 0 devices [draft-ietf-lwig-terminology-01], tailored software
environments must be used, such as [TinyOS] [Contiki-OS]. However,
such software environments impose programming paradigms that can
prove painful to use. For instance,
[draft-kovatsch-lwig-class1-coap-00] mentions some such issues,
encountered while implementing COAP [draft-ietf-core-coap-13].
However, our experience with implementing RFC 4944, RFC 6282, TCP and
UDP shows that such issues can be avoided on Class 1 devices,
depending on the choice of software environment in which
specifications are implemented, as detailed in Section 3.
2. Why implementations on Class 0 devices can be painful
In order to deal with the very limited RAM and ROM available on Class
0 devices, network protocol implementers generally code on specific
operating systems based on an event loop with a shared stack for all
processes (cooperative multi-threading). The main advantage of a
cooperative multi-threading is that it can optimize memory usage on
very constrained devices. However, the use of an event loop makes
network protocol implementation a peculiar exercise, as it imposes an
unusual programming paradigm.
2.1. Learning curve
The event loop programming paradigm is not straight-forward to master
for programmers who are used to code on more conventional platforms,
such as Linux or Unix for instance. Hence, programmers do not only
have to deal with the constrained resources (RAM, ROM) of the
platform, but must also tussle with a fundamentally different way of
designing the implementation of a protocol specification. This means
extra costs for code development and maintenance.
2.2. Implementing from scratch
The distinct programming paradigm stemming from an event loop
typically imposes a non-standard programming language. Some event
loop operating systems introduce a new language (e.g. [TinyOS]
imposes nesC), while other operating systems "hijack" elements of a
standard programming language to use it in a different way (e.g. the
switch/case structure for Protothreads in [Contiki-OS], using a C
dialect). This results in:
Hahm, et al. Expires September 10, 2013 [Page 3]
Internet-Draft Painless Class 1 devices Programming March 2013
- the necessity for an entirely new code base,
- the inability to easily port pre-existing, mature code for well-
known functions, routines, or protocols,
- the inability to use standard software engineering tools for
debugging and analysing code.
Conversely, it is not easy to port code developed for Class 0 devices
running on an event loop operating system, to less constrained
devices running conventional operating systems.
2.3. Increased complexity
A system based on an event loop in combination with a shared stack
for all processes makes it necessary to use somewhat tricky
programming techniques. For instance, in order to not fully block
the whole system during long-lasting processes, functions must be
designed with split phase execution. However, this technique breaks
up logical contigous code into multiple pieces and thus increases
code complexity. Another example concerns handling multiple stateful
connections at the same time: an event loop in combination with a
shared stack typically forces programmers to implement complex state
machinery to manage simultaneous connections (e.g., TCP connections).
3. Why implementations on Class 1 devices can be painless
When we were tasked with implementing RFC 4944, RFC 6282, TCP and UDP
on Class 1 devices, we wanted to avoid the issues described in
Section 2. We have thus decided to look for alternatives to using an
operating system based on an event loop. Our implementation of the
aforementioned protocol specifications was thus carried out in a
different operating system, [RIOT-OS], which supports multi-threading
similarly to operating systems running on "traditional" Internet
hosts and routers (e.g., Linux or Unix). Our experience with this
choice is that network protocol implementations for Class 1 devices
can be comparatively painless, as described in the following.
3.1. Average programmer background is OK
As the operating system we chose supports fully separated threads and
the ability to react in real-time, there was no need to fundamentally
change the programming paradigm, compared to programming on less
constrained platforms. Hence, we benefited from a drastically
reduced learning curve for programmers with a usual background, i.e.
that had never before programmed for constrained devices. Practiced
network programmers could simply adapt the implementation concepts
and techniques known to be efficient on non-embedded systems.
Hahm, et al. Expires September 10, 2013 [Page 4]
Internet-Draft Painless Class 1 devices Programming March 2013
3.2. Leveraging more well-known tools
As the operating system we chose allows to implement in ANSI C,
existing code could be reused, taken from the IP protocol suite
currently deployed on mature operating systems such as Linux or Unix.
For instance, our 6LoWPAN and TCP implementations reuse constants and
data structures for packet headers and protocol options. The well-
known BSD socket API was ported without significant modifications to
functions like bind(), send() or recvfrom(). Useful helper modules
like inet_pton and inet_ntop were integrated without any changes. In
a nutshell: the usage of standard programming languages in
combination with a common programming paradigm reduces the amount of
code that has to be developed and maintained.
3.3. Safer and quicker coding
Coding can be significantly safer and quicker on Class 1 devices,
depending on the choice of operating system upon which to build.
Network protocols from the IP suite were designed with traditional,
multi-threading based operating systems in mind. Thus, where
possible, it makes sense to avoid unnecessary issues that stem from
using fundamentally different software environments. Our experience
shows that for implementations on Class 1 devices, it is possible to
benefit from a software environment that leverages substantially more
well-known tools than what an operating system based on an event loop
can achieve, thus facilitating both code development on Class 1
devices, and porting of code to/from less constrained hardware.
4. Security Considerations
This document does not have any security considerations.
5. IANA Considerations
This document does not have any IANA actions.
6. Informative References
[RFC4944] Montenegro, G., Kushalnagar,
N., Hui, J., and D. Culler,
"Transmission of IPv6 Packets
over IEEE 802.15.4 Networks",
RFC 4944, September 2007.
[RFC6282] Hui, J. and P. Thubert,
"Compression Format for IPv6
Datagrams over IEEE 802.15.4-
Based Networks", RFC 6282,
Hahm, et al. Expires September 10, 2013 [Page 5]
Internet-Draft Painless Class 1 devices Programming March 2013
September 2011.
[draft-ietf-lwig-terminology-01] Bormann, C. and M. Ersue,
"Terminology for Constrained
Node Networks",
draft-ietf-lwig-terminology ,
Feb 2013.
[draft-kovatsch-lwig-class1-coap-00] Kovatsch, M., "Implementing
CoAP for Class 1 devices", draf
t-kovatsch-lwig-class1-coap ,
Oct 2012.
[draft-ietf-core-coap-13] Shelby, Z., Hartke, K.,
Bormann, C., and B. Frank,
"Constrained Application
Protocol (CoAP)",
draft-ietf-core-coap ,
Dec 2012.
[TinyOS] "TinyOS
http://www.tinyos.net", 2012.
[Contiki-OS] "Contiki Operating System
http://www.contiki-os.org",
2012.
[RIOT-OS] "RIOT Operating System
http://www.riot-os.org", 2012.
Authors' Addresses
Oliver Hahm
INRIA
EMail: Oliver.Hahm@inria.fr
Emmanuel Baccelli
INRIA
EMail: Emmanuel.Baccelli@inria.fr
URI: http://www.emmanuelbaccelli.org/
Hahm, et al. Expires September 10, 2013 [Page 6]
Internet-Draft Painless Class 1 devices Programming March 2013
Kaspar Schleiser
SpreeBytes
EMail: kaspar@schleiser.de
Hahm, et al. Expires September 10, 2013 [Page 7]