Öffentliche Wikis
IPv6 Wiki
Network Engineering
Netzwerksicherheit
Netzwerkprogrammierung
Contiki OS
Linux
FreeBSD
Windows
OSX
Internet of Things
Private Wikis
Öffentliche Wikis
IPv6 Wiki
Network Engineering
Netzwerksicherheit
Netzwerkprogrammierung
Contiki OS
Linux
FreeBSD
Windows
OSX
Internet of Things
Private Wikis
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
netstat -nr6 | grep <prefix>
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
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
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
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:
ifconfig usb0 -arp
ip -6 neigh add 2001:638:812:b88b::200 lladdr 02:12:13:14:15:16 dev usb0
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);