Benutzer-Werkzeuge

Webseiten-Werkzeuge


contiki:raven_usb_rpl_border_router

Der Jackdaw Raven USB Stick als RPL Border Router

> Contiki 3.1

Der RPL-Code für den Ravenusb-Stick benutzt immer noch den alten sicslowmac_driver. Wärend die cc2538dk Boards ContikiMAC benutzen.

Der alte Treiber kann in contiki/platform/avr-ravenusb/contiki-conf.h mit #if 0 abgeschaltet werden.
In Zeile 300 steckt aber noch ein Schreibfehler: framer802154 statt framer_802154

263  /* Network setup */
264 #if 0              /* No radio cycling */
265 #define NETSTACK_CONF_MAC         nullmac_driver
266 #define NETSTACK_CONF_RDC         sicslowmac_driver
267 #define NETSTACK_CONF_FRAMER      framer_802154
 
299 #if NETSTACK_CONF_WITH_IPV6
300 #define NETSTACK_CONF_FRAMER      framer_802154

In contiki/platform/avr-ravenusb/Makefile.avr-ravenusb muss noch Zeile 70 angepasst werden:

MODULES+=core/net/mac core/net/mac/contikimac \

Aktiviere IPv6 und entferne fakeuip.c aus dem Makefile:

all: ravenusbstick
 
#Define CONTIKI_NO_NET=1 for a passthrough ipv6/6lowpan interface using fakeuip.c
#Define CONTIKI_WITH_IPV6 = 1 to include the uip6 stack (for rpl, internal webserver)
#Do make clean when switching to remove the duplicate library modules
#CONTIKI_NO_NET=1
CONTIKI_WITH_IPV6=1
 
CONTIKI = ../..
 
MODULES+=core/net/mac/sicslowmac core/net core/net/mac core/net/llsec
 
#PROJECT_SOURCEFILES += fakeuip.c
 
include $(CONTIKI)/Makefile.include

Contiki 3.1

Die Fehlermeldungen aus Contiki 3.0 sollten behoben sein. Der Fehler wurde im Mai 2016 im aktuellen Git-Repository gefixed.

Standardmäßig ist die Anzahl der Neighbors sowie der Routen jeweils auf 2 begrenzt, diese können jedoch problemlos auf 8-10 erhöht werden. Dazu müssen lediglich innerhalb der Datei platform/avr-ravenusb/contiki-conf.h die folgenden Änderungen vorgenommen werden:

/* See uip-ds6.h */
// #define NBR_TABLE_CONF_MAX_NEIGHBORS     2
#define NBR_TABLE_CONF_MAX_NEIGHBORS     4
#define UIP_CONF_DS6_DEFRT_NBU   2
#define UIP_CONF_DS6_PREFIX_NBU  3
//#define UIP_CONF_MAX_ROUTES      2
#define UIP_CONF_MAX_ROUTES      8
#define UIP_CONF_DS6_ADDR_NBU    3
#define UIP_CONF_DS6_MADDR_NBU   0
#define UIP_CONF_DS6_AADDR_NBU   0

Contiki 3.0

Wenn man die Einstellungen im Makefile wie für 2.x vorgenommen hat gibt es einige Fehlermeldungen

Compiler-Fehler:

../../platform/avr-ravenusb/./cdc_task.c:608:38: error: 'r' undeclared

In Zeile 608 steckt ein Fehler. Die Variable r muss eigentlich route heißen:

route = uip_ds6_route_next(route)) { 

Fehler beim Linken: undefined references

Es muss noch core/net zu den Modulen in Makefile.ravenusbstick hinzugefügt werden

MODULES+=core/net/mac/sicslowmac core/net core/net/mac core/net/llsec

Der IPv6-Prefix ist im Quelltext fest kodiert. Um ihn zu ändern muss der Code in platform/avr-ravenusb/contiki-raven-main.c angepasst werden:

uip_ip6addr_t ipaddr;
uip_ip6addr(&ipaddr, 0x2001, 0xdb8, 0, 0, 0, 0, 0, 0x200);  //!! Aenderung hier!!
uip_ds6_addr_add(&ipaddr, 0, ADDR_MANUAL);
rpl_set_prefix(dag, &ipaddr, 64);

Contiki 2.x

Vor einiger Zeit sind innerhalb des Contiki Quellcodes einige Änderungen bezüglich RPL und dem Raven USB Stick durchgeführt worden (https://github.com/contiki-os/contiki/wiki/Jackdaw-RNDIS-RPL-border-router), wodurch es nun möglich ist den Raven USB Stick als RPL Border Router zu verwenden.

Es sind hierzu nur einige kleine Anpassungen nötig.

Zunächst muss innerhalb der Datei examples/ravenusbstick/Makefile.ravenusbstick die Option CONTIKI_NO_NET=1 auskommentiert und dafür der uIP Stack mit UIP_CONF_IPV6=1 mitkompiliert werden.

all: ravenusbstick
 
#Define CONTIKI_NO_NET=1 for a passthrough ipv6/6lowpan interface using fakeuip.c
#Define UIP_CONF_IPV6=1 to include the uip6 stack (for rpl, internal webserver)
#Do make clean when switching to remove the duplicate library modules
#CONTIKI_NO_NET=1
UIP_CONF_IPV6=1
 
CONTIKI = ../..
 
include $(CONTIKI)/Makefile.include 

Im zweiten Schritt müssen innerhalb der Datei core/net/rpl/rpl-icmp6.c Anpassungen des Buffers vorgenommen werden. Da die Datei auch von anderen Programmen genutzt wird, ist es sinnvoll an dieser Stelle Präprozessoranweisungen zu verwenden, welche nur im Fall RavenUSBStick + uIPv6 Stack aktiv werden. Dazu einfach jede Zeile innerhalb der Datei welche

buffer_length = uip_len - uip_l3_icmp_hdr_len;

enthält durch

//buffer_length = uip_len - uip_l3_icmp_hdr_len;
/*sz*/
#if CONTIKI_TARGET_AVR_RAVENUSB && UIP_CONF_IPV6
  buffer_length = uip_len - uip_l3_icmp_hdr_len+UIP_CONF_LLH_LEN;
#else
  buffer_length = uip_len - uip_l3_icmp_hdr_len;
#endif  
/*sz*/

zu ersetzen.

Standardmäßig ist die Anzahl der Neighbors sowie der Routen jeweils auf 2 begrenzt, diese können jedoch problemlos auf jeweils 10 erhöht werden. Dazu müssen lediglich innerhalb der Datei platform/avr-ravenusb/contiki-conf.h die folgenden Änderungen vorgenommen werden:

 /* See uip-ds6.h */
//#define UIP_CONF_DS6_NBR_NBU     2
#define UIP_CONF_DS6_NBR_NBU     10
 #define UIP_CONF_DS6_DEFRT_NBU   2
 #define UIP_CONF_DS6_PREFIX_NBU  3
//#define UIP_CONF_DS6_ROUTE_NBU   2
#define UIP_CONF_DS6_ROUTE_NBU   10

Damit sind alle notwendigen Vorbereitungen getroffen und die .elf Datei kann mit make im Verzeichnis examples/ravenusbstick/ kompiliert werden. Der anschließende Upload mithilfe des AVR Studios erfolgt wie in AVR RavenRZ USB-Stick Installation beschrieben.

Unter Ubuntu wird der USB Stick danach automatisch erkannt, wie mit einem kurzen dmesg herausgefunden werden kann. Um nun den USB Stick als normales Netzwerkinterface nutzen zu können sind nur noch die beiden Befehle

sudo ifconfig usb0 -arp
sudo ip -6 address add bbbb::0/64 dev usb0

notwendig, anschließend kann der RPL-Border-Router mit ping6 bbbb::200 erreicht werden. Der Neighbor Cache sowie die aktuellen Routen können auch eingesehen werden. Dazu ist jedoch ein Zugriff über die serielle Schnittstelle ttyACM0 mit einem Terminal Programm wie z.B. Putty notwendig. Das Menü kann dort mit h abgefragt werden, den Neighbor Cache und die Routen erhält man durch den Tastendruck N.

Wer sich all diese Schritte sparen will, kann hier die fertig kompilierte .elf Datei downloaden:

https://wiki.ipv6lab.beuth-hochschule.de/_media/contiki/rpl/ravenusbstick.zip

contiki/raven_usb_rpl_border_router.txt · Zuletzt geändert: 2018/12/13 03:36 von admin