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
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
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);
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