====== 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. * https://github.com/contiki-os/contiki/wiki/Radio-duty-cycling#The_ContikiMAC_Radio_Duty_Cycling_Mechanism * https://github.com/contiki-os/contiki/wiki/Contikimac * https://github.com/contiki-os/contiki/wiki/Change-mac-or-radio-duty-cycling-protocols 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 [[contiki:ravenrz_usb_stick_installation|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:ravenusb_rpl_border_router.jpg?1000|}}