Eine Implementierung von SNMP auf Contiki ist bereits vorhanden, sie wurde im Rahmen einer Masterarbeit an der Jacobs University in Bremen entwickelt. Jedoch wurde diese Version für Contiki 2.4 entwickelt und ist mit dem derzeitigen Quellcode, welcher unter http://code.google.com/p/contiki-snmp/ veröffentlicht wurde, auf Contiki 2.5 nicht lauffähig. Es sind deshalb einige kleine Änderungen zur Anpassung auf Contiki 2.5 im Programcode nötig.
→ Hinweis zu Contiki 2.6: Um Contiki SNMP auf Contiki 2.6 zu installieren, sind die gleichen Schritte wie für Contiki 2.5 notwendig.
Der einzige Unterschied besteht darin, dass innerhalb der Datei snmpd.c
in Zeile 100 der Dateityp von u8_t
zu u8t
abgeändert werden muss. Contiki SNMP ist dann auch auf Contiki 2.6 lauffähig. Diese Anleitung wurde ursprünglich für Contiki 2.5 geschrieben, ist aber bei Beachtung der vorher genannten Zusatzänderung auch für Contiki 2.6 anwendbar.
Der Quellcode kann via SVN von der Google Code Seite heruntergeladen werden.
Dieses Tutorial setzt die Konfigurationschritte von Installation der Contiki Entwicklungsumgebung voraus.
Dazu in das Windows XP Gastsystem wechseln und Tortoise SVN downloaden (http://tortoisesvn.net/) und installieren. Anschließend in das Cygwin Verzeichnis wechseln und unter /home/Administrator/ einen neuen Ordner erstellen (Bsp. C25-SNMP). Dann mit der rechten Maustaste in eine freie Fläche klicken und SVN Checkout… auswählen. (siehe Abbildung)
Im folgenden Fenster nun die Angaben aus der nächsten Abbildung einfügen und anschließend mit Ok bestätigen.
Der Quellcode wird nun heruntergeladen und im Ordner Source gespeichert.
Als nächstes wird der Contiki 2.5 Quellcode benötigt, dieser kann von http://sourceforge.net/projects/contiki/files/Contiki/Contiki 2.5/contiki-2.5.zip/download heruntergeladen werden. Anschließend sollte er im C25-SNMP Verzeichnis unter Contiki-2.5 entpackt werden.
Um Anwendungen auf Contiki zu installieren sind einige Regeln sowie Festlegungen zu beachten. Der Quellcode der zu installierenden Software wird in das Contiki apps Verzeichnis kopiert. Da der Sourcecode des Contiki SNMPs im Ordner cygwin\home\Administrator\C25-SNMP\Source\src befindet muss dieser gesamte Ordner in den Contiki 2.5 apps Ordner (\cygwin\home\Administrator\C25-SNMP\contiki-2.5\apps) kopiert werden. Anschließend wird dieser Ordner von src in snmpd umbenannt. Da die Kompilierung von Contiki auf Makefiles basiert, wird dieses noch benötigt. Es befindet sich unter \cygwin\home\Administrator\C25-SNMP\Source\app. Zusätzlich befindet sich in diesem Ordner die Datei snmp-server.c, diese Datei enthält den Autostarteintrag für den SNMP Daemon. Nun wird dieser gesamte Ordner app in das Contikiverzeichnis \cygwin\home\Administrator\C25-SNMP\contiki-2.5\examples\ kopiert und anschließend in snmp umbenannt.
Da auch im Contiki 2.5 Quellcode einige Änderungen durchzuführen sind, müssen die Dateien im Verzeichnis \cygwin\home\Administrator\C25-SNMP\contiki-2.5\cpu\avr\radio\rf230 durch die Dateien im SVN Verzeichnis \cygwin\home\Administrator\C25-SNMP\Source\contiki ersetzt werden.
Bei Contiki 2.5 hat sich im Vergleich zu Contiki 2.4 die Funktion HTONS() geändert, diese heisst unter Contiki 2.5 UIP_HTONS(). Es muss also in allen Dateien die Funktion von HTONS() nach UIP_HTONS() umbenannt werden. Änderungen sind im Verzeichnis \cygwin\home\Administrator\C25-SNMP\contiki-2.5\apps\snmpd in folgenden Dateien nötig:
Dateiname | Zeile |
---|---|
logging.c | Zeile 46 und Zeile 48 |
snmpd.c | Zeile 159 und Zeile 16 |
Anschließend muss noch das Makefile angepasst werden, dazu in den Ordner \cygwin\home\Administrator\C25-SNMP\contiki-2.5\examples\snmp wechseln und dort die Datei Makefile editieren. In Zeile 7 ist CONTIKI=/data/masters/dev/contiki-2.x durch CONTIKI = ../.. zu ersetzten.
Damit sind alle benötigten Änderungen abgeschlossen und der SNMP Daemon kann kompiliert werden. Dazu muss Cygwin gestartet werden und in das Verzeichnis /C25-SNMP/contiki-2.5/examples/snmp gewechselt werden. Nun wird die Kompilierung mit make raven gestartet.
cd /C25-SNMP/contiki-2.5/examples/snmp make raven
Erscheint nach der Kompilierung folgender Text so war die Kompilierung erfolgreich und es kann mit dem Upload auf den ATmega1284P begonnen werden.
Hierzu wird äquivalent zu AVR RavenRZ USB-Stick Installation vorgegangen. Der korrekte Anschluß des JTAG Kabels ist in folgender Abbildung zu sehen:
In AVR Studio muss diesmal unter „Device and Signature Bytes“ als Microcontroller der ATmega1284P gewählt werden. Als .elf-File wird die Datei snmp-server.elf im Verzeichnis \cygwin\home\Administrator\C25-SNMP\contiki-2.5\examples\snmp\ gewählt. (siehe untenstehende Abbildungen.
Durch den anschließend Klick auf Program wird der Upload gestartet.
Um das Contiki 2.5 SNMP zu testen bietet sich das Programm MIB Browser (http://ireasoning.com/mibbrowser.html) an. Dazu in das Instant Contiki Gastsystem wechseln. (Die Schritte aus AVR RavenRZ USB-Stick Installation abgeschlossen sein.) MIB Browser starten und die Einstellungen in der folgenden Abbildung durch Klick auf Advanced vornehmen.
Einstellung | Wert |
---|---|
IP Adresse | aaaa::11:22ff:fe33:4455 |
Port | 161 |
Read CS | public |
Write CS | public |
USM User | sk |
Auth Password | password1 |
Privacy Password | password2 |
Des Weiteren bei Operations auf Walk einstellen und anschließend mit Go den Verbindungsaufbau starten.
Es sollten nun nach kurzer Zeit die MIB des Raven Boards angezeigt werden:
Zu Testzwecken kann nun versucht werden einen SET Befehl zu senden, beispielsweise vom MIB Object .1.3.6.1.2.1.1.11.0. Dort steht momentan noch „Pointer to a String“. Durch einen Klick mit der rechten Maustaste und der Auswahl SET gelangt man zu Möglichkeit einen SET Befehl zu senden.
Durch Bestätigung auf Ok und einen erneuten SNMP Walk ist die erfolgreiche Ausführung des SET Befehls zu sehen.
Die kostenlose Version des MIB-Browsers unterstützt nur SNMPv1. Für den Test von SNMPv3 kann auf die Net-SNMP Kommandozeilen-Tools von zurückgegriffen werden:
Abfrage der Systembeschreibung:
# snmpget -v3 -c public -u sk -l authPriv -a md5 -A password1 -x aes -X password2 udp6:[aaaa::11:22ff:fe33:4455] iso.3.6.1.2.1.1.1.0
Abfrage der Zeit seit dem Systemstart (uptime)
# snmpget -v3 -c public -u sk -l authPriv -a md5 -A password1 -x aes -X password2 udp6:[aaaa::11:22ff:fe33:4455] iso.3.6.1.2.1.1.3.0
Abfrage des Schaltzustands der Funksteckdose
# snmpget -v3 -c public -u sk -l authPriv -a md5 -A password1 -x aes -X password2 udp6:[aaaa::11:22ff:fe33:4455] iso.3.6.1.4.1.22109.100.600.1.0
Abfrage des Schaltzustands der Funksteckdose
# snmpset -v3 -c public -u sk -l authPriv -a md5 -A password1 -x aes -X password2 udp6:[aaaa::11:22ff:fe33:4455] iso.3.6.1.4.1.22109.100.600.1.0 i 1
Abfrage der Funkempfangsstärke in dBm
# snmpget -v3 -c public -u sk -l authPriv -a md5 -A password1 -x aes -X password2 udp6:[aaaa::11:22ff:fe33:4455] iso.3.6.1.4.1.22109.100.600.2.0
Abfrage der Gerätetemperatur in Grad Celsius
# snmpget -v3 -c public -u sk -l authPriv -a md5 -A password1 -x aes -X password2 udp6:[aaaa::11:22ff:fe33:4455] iso.3.6.1.4.1.22109.100.600.3.0
Zur Anpassung der Einstellungen des SNMP Agents, muss der Quellcode geändert werden und neu kompiliert werden.
Der Communitystring kann in der der Datei snmpd-conf.h in Zeile 50 konfiguriert werden, er ist standardmäßig auf „public“ eingestellt.
Der USM Username kann in der Datei snmpd-conf.c in Zeile 30 konfiguriert werden, er ist standardmäßig auf den Namen „sk“ (Siarhei Kuryla, Programmierer des SNMP Agents) eingestellt.
Das Authentification Password kann in der Datei keytools.c in Zeile 28 angepasst werden, es ist jedoch notwendig das gewünschte Passwort mit dem Keygenerator zu generieren.
Das Privacy Password kann in der Datei keytools.c in Zeile 30 angepasst werden, es ist jedoch notwendig das gewünschte Passwort mit dem Keygenerator zu generieren.
Um den Keygenerator welcher im SVN Verzeichnis unter keygen zu finden ist, zu kompilieren, sind einige kleine Quellcodeänderungen notwendig. Damit überhaupt kompiliert werden kann, müssen die Variablen ENABLE_SNMPv3 und ENABLE_AUTH in der Datei md5.c gesetzt werden. (Oder die #if und #endif Abfrage wird im Code entfernt) Um eine Ausgabe zu Erzeugen welche es ermöglicht den generierten Hash-Wert direkt in die Datei keytools.c zu kopieren, kann eine printf()-Ausgabe hinzugefügt werden. (siehe snmp_keygen_source letzte Quellcodezeile)
Danach kann mit
make
kompiliert werden und anschließend mit dem Befehl
./keygen <password>
Der Hash-Wert des Passworts generiert werden.