MP-SS14-02

Aus Verteilte Systeme - Wiki
Wechseln zu: Navigation, Suche

Diese Seite beschäftigt sich mit der Implementierung von RPL[1] innerhalb einer Linux Umgebung. Dazu gehört die Evaluierung existierender Lösungen in einer heterogenen und homogenen Umgebung. Nach der Evaluierung sollen Verbesserungsvorschläge erarbeitet werden. Diese Verbessungen sollen abschließend in einem Funktionstest sichtbar bzw. gezeigt werden.

Organisation

Teilnehmer: Alexander Aring

Betreuer: Prof. Dr. Kröger

Start:

Ende:

Termine

ToDo's

  • Einarbeitung in RPL
  • Anforderungen erarbeiten -> Ziel definieren
  • Wiki

Grundlagen

IEEE 802.15.4

IEEE 802.15.4[2]

6LoWPAN

RPL

Vorhandene Linux Implementierungen

Linux-RPL

SimpleRPL

Unter SimpleRPL versteht man eine Linux RPL Implementierung welche in python implementiert worden ist. Das Projekt unterliegt keiner Lizenz und ist komplett Open Source auf github gehostet: SimpleRPL[3]

Es wurde von Tony Cheneau [4] entwickelt. Jedoch wird es zur Zeit von niemanden weiter entwickelt, auch von Tony Cheneau nicht mehr. (Sand 15.04.2014)

Diese Implementierung hat verschiedene Abhängigkeiten um bestimmte funktionalitäten innerhalb der python Umgebung zur Verfügung zu stellen.

Auszug von der github Projekt Seite: SimpleRPL is written in Python 2.x and requires the following libraries to be installed:

Da diese Implementierung auf einen eingebettetes System verwendet werden soll wird das Cross-Compilen der jeweiligen Abhängigkeiten ohne geeigneter Cross-Compiler Umgebung kompliziert. Da die native bindings cross-compiled über einen Host-Python Interpreter kompiliert werden müssen.

Abhilfe schafft dafür PTXdist welches die benötigte Enviornment einrichtet und somit ein schnelles und einfaches cross-compilen der Abhängigkeiten gefährtleistet. Projektwebseite von PTXdist[5].

Dies wird als Beschreibung in sogenannten "Rules" niedergeschrieben. Die passenden Rules existieren bereits im offiziellen ptxdist Release.

  • libnl3 PTXdist[6]
  • pyzmq PTXdist[7]
  • python-routing PTXdist[8]
  • python-rplicmp PTXdist[9]
  • SimpleRPL PTXdist[10]
Limiterungen

Die SimpleRPL Implementierung hat verschiedene Limiterungen der Benutzung.

Laut Projektwebseite sind diese:

What is implemented? What are the implementations choices?


  • storing mode of operation with no multicast support (MOP value 2)
  • act as a DODAG root or as a RPL router
  • implement Objective function zero (RFC 6552). However, the rank increase isalways a same fixed value. This is because there is no feedback from the layer 2 or the layer 3 (yet), meaning that there can be no indication on the link quality.
  • store unbounded number of DIO parents
  • store one DAO parent at time
  • support multiple interfaces (i.e. node can act as a bridge between two link-layer technology)

What is not implemented?


  • Routing metrics (as defined in RFC 6551) are not implemented, that is because there is currently no way to retrieve link quality information from IEEE 802.15.4 links
  • no support for floating DODAG
  • no support for security (hence, if it is required, it should be implemented at the Link-Layer)
  • no support for leaf function
  • no Path Control support in DAO messages

Known limitations


  • only one DODAG root can exists in the network at once: if two root exists for the same DODAG, they will compete forever
  • only one DODAG can be joined at once

Analyse

Dieser Abschnitt befasst sich mit der Analyse von Hardware, Software sowie den RPL-Protokoll Implementierungen.

Anforderungen

Die Anforderungen für das Projekt ist es eine RPL-Implementierung für Linux zu entwickeln oder vorhandene Implementierungen zu ergänzen damit diese in einen heterogenen Umgebung, beispielsweise Contiki kooperieren kann.

Anschließend soll in einem Test-Szenario in einer heterogenen Umgebung Tests durchgeführt werden und Verbesserungen in der vorhandene Implementierung eingearbeitet werden.

Motivation

Die Linux IEEE 802.15.4 6LoWPAN Implementierung besitzt noch keine Standard RPL-Implementierung. Es existieren zwei prototypische Implementierungen "Linux-RPL" und "SimpleRPL".

Ziel soll es sein eine RFC kompatibel RPL Implementierung zu entwickeln um ein Linux basierten RPL-Border-Router zu betreiben.

RPL-Broder-Router

Ein RPL-Border-Router ist ein Gateway von einem IPv6 Netzwerk in ein 6LoWPAN Netzwerk. Innerhalb eines 6LoWPAN Netzwerkes werden Local-Link Adressen verwendet die nicht geroutet werden. Ein RPL-Border-Router führt ein Address-Mapping von Global-Link auf Link-Local Adressen durch, um einzelne Nodes mit Link-Local Adressen innerhalb eines IPv6 Netzwerkes zu adressieren.

Signalstärke im Userspace/Kernelspace zur Verfügung stellen

Die jetzigen Linux-RPL Implementierungen haben beide das Gleiche Problem. Momentan wird in der Stack Implementierung des IEEE 802.15.4 MAC-Layers der LQI Wert verworfen. Dieser wird einfach nicht ausgewertet oder in irgend einer Form zur Verfügung gestellt.

RPL braucht diesen Wert um durch eine Heuristik Metriken zu berechnen um bestimmte Routing-Pfade zu bevorzugen. Siehe RFC 6551.

Beide Implementierungen sprechen von diesem Problem und es wird momentan ein statischer Einheitswert für den Signalstärkewert angenommen.

Interoperabilität zwischen Linux und Contiki

Die jetzigen Implementierungen sind teilweise oder gar nicht mit Contiki kompatibel. Eine Anforderung soll es sein die Implementierungen zu ergänzen, sodass diese Contiki kompatibel sind. Gegebenenfalls sollte der RFC 6550 überprüft werden um RFC Inkonsistenzen zu in Contiki auszuschließen.

Todo: "Anforderungen die zur Erfüllung der Contiki Kompatibilität erfüllt werden müssen

Mängelanalyse

Mit Hilfe des 6LoWPAN Diagnose Tools Foren6[11] soll die RPL Implementierung evaluiert werden und Schwachstellen in der Implementierung erkannt werden.

Foren6 bietet dafür ein Feature "Detect routing problem". Auszug aus der Foren6 Project-Webseite:

"The Routing Protocol for 6LoWPAN Networks, RPL, is an emerging IETF standard. Foren6 captures all RPL-related information and identifies abnormal behaviors."

Verbesserungen

Es soll versucht werden die erkannten Mängel anhand der Mängelanalyse zu beheben.

Auslagerung Userspace/Kernelspace

Nach dem Motto "Data plane in the kernel, control plane in user space" sollen bestimmte Funktionen der RPL-Implementierung jeweils im Kernelspace und im Userspace ausgelagert werden. "Pakete" die nur geroutet werden müssen, dass heisst die zum nächsten Hop weitergeleitet werden, müssen nicht im Userspace analysiert werden. Innerhalb des Kernelspace sollte erkannt werden dass das Paket nur weitergeleitet werden muss. Nachdem sollte das Paket innerhalb des Kernelspace an den nächsten Hop weitergeleitet werden.

Test-Szenario

Abschließend soll in einer heterogenen Testumgebung mit Linux und Contiki die RPL Implementierung getestet werden.

Verwendete Hardware:

TODO

Metriken

Der statische Signalstärke soll zur Laufzeit Testweise verändert werden und die dabei erstellten Routing-Pfade beobachtet werden.

Hardware

Boards

Beaglebone

Beaglebone[12]

Duckbill

Duckbill[13]

FeuerWhere

AVRRaven

IEEE 802.15.4 Transceiver

CC2520

FeuerWhere

AT86RF231

AT86RF231 Datasheet[14]

ATDUCK
ATBEN

ATBEN[15]

ATUSB

ATUSB[16]

AVRRaven

Software

Toolchain

PTXdist

Qemu

Linux IEEE 802.15.4/6LoWPAN

RPL Implementierungen

Linux

SimpleRPL

linux-rpl

Contiki

TinyOS

Mängelanalyse

Foren6

http://cetic.github.io/foren6/index.html "Muss gucken ob man das verwenden kann, sieht intressant aus!"

simpleRPL

linux-rpl

Verbesserungsvorschläge

Funktionstest

Quellen

  1. RFC6550 - RPL: IPv6 Routing Protocol for Low-Power and Lossy Networks
  2. IEEE 802.15.4 Standard
  3. SimpleRPL
  4. Tony Cheneau
  5. PTXdist
  6. libnl3 PTXdist
  7. pyzmq PTXdist
  8. python-routing PTXdist
  9. python-rplicmp PTXdist
  10. SimpleRPL PTXdist
  11. Foren6
  12. Beaglebone
  13. Duckbill
  14. AT86RF231 Datasheet
  15. ATBEN
  16. ATUSB