====== FAQ Netzwerke und -programmierung ======
===== Keine Verbindung zum Sensorknoten =====
==== Link Lokale IPv6-Adressen ====
Um mit Link-lokalen IPv6 Adressen zu arbeiten muss immer zwingend die Netzwerkschnittstelle
mit angegeben werden über die Nachrichten versendet werden sollen.
Bei Linux geschieht dies durch ein nachgestelltes %-Zeichen und den Namen der Netzwerkschnittstelle
nach der IP-Adresse:
ping6 fe80::206:98ff:fe00:232%tap0
==== Fehlerhafte / fehlende Einträge in der Routingtabelle ====
netstat -nr6 | grep
Fehlende Einträge können nachgetragen werden mit:
sudo ip -6 route add aaaa::/64 dev eth0
Falsche Einträge können gelöscht werden:
sudo ip -6 route del aaaa::/64 dev eth0
=== Mögliche Ursachen: ===
== 1. Ein fehlerhaft konfigurierter RouterAdvertisment Daemon (''radvd''): ==
ps -ax | grep radvd
# oder
service radvd status
Mit diesen Kommandos lässt sich ermitteln, ob der Daemon auf dem System läuft. Die Konfigurationsdatei für den ''radvd'' findet sich in ''/etc/radvd.conf''
''radvd'' kann mit ''sudo service radvd start'' gestartet und mit ''sudo service radvd stop'' gestoppt werden.
Anschließend das Netzwerkinterface neu starten:
sudo ifconfig eth0 down && sudo ifconfig eth0 up
== 2. Ein dynamisch konfiguriertes Interface (z.B. tap0) hat noch keine IP-Adresse ==
Wird Contiki mit dem Target ''minimal-net'' übersetzt und ausgeführt wird ein ''tap''-Interface erzeugt. Dieses hat
nur eine link-lokale IPv6-Adresse und damit existiert auch kein Eintrag in der lokalen Routingtabelle.
sudo ip -6 addr add aaaa::1/64 dev tap0
==== Fehlende Einträge in der Neighbor Tabelle ====
Dieser Fehler betrifft vor allem Systeme bei denen Contiki als Borderrouter auf einem USB-Stick läuft:\\
https://github.com/contiki-os/contiki/wiki/Jackdaw-RNDIS-RPL-border-router
Hierbei werden Neighbor Solications und Neighbor Advertisements nicht in das 6LoWPAN weitergeleitet. Es muss also
dafür gesorgt werden, dass das System keine NS/NA Nachrichten erzeugt.
Dafür existieren zwei Ansätze:
=== 1. NS/NA komplett abschalten ===
ifconfig usb0 -arp
=== 2. Die Neighbor Tabelle mit bekannten Systemen füllen ===
ip -6 neigh add 2001:638:812:b88b::200 lladdr 02:12:13:14:15:16 dev usb0
===== Umgang mit IP-Adressen =====
IP Adressen werden in Variablen vom Typ ''uip_ipaddr_t'' gespeichert.
IPv6 Adressen können je nach verwendeter Funktion entweder aus 16-bit Integer-Werten
aufgebaut, oder als Text-String angegeben werden
uip_ipaddr_t ip_addr;
//uiplib_ip6addrconv(const char *addrstr, uip_ip6addr_t *addr);
uiplib_ip6addrconv("2001:db8::1", &ip_addr);
//uip_ip6addr(addr, addr0, addr1, addr2, addr3, addr4, addr5, addr6, addr7)
//Construct an IPv6 address from eight 16-bit words.
uip_ip6addr(&ip_addr, 0x2001, 0xdb8, 0, 0, 0, 0, 0, 0x1);