====== SNMP auf Contiki 2.5 bzw. 2.6 Installation ====== 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. ===== Download des SNMP-Quellcodes ===== Der Quellcode kann via SVN von der Google Code Seite heruntergeladen werden. ---- Dieses Tutorial setzt die Konfigurationschritte von [[contiki:installation_der_contiki_entwicklungsumgebung|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) {{:contiki:snmp1.png|}} Im folgenden Fenster nun die Angaben aus der nächsten Abbildung einfügen und anschließend mit Ok bestätigen. {{:contiki:snmp2.png|}} Der Quellcode wird nun heruntergeladen und im Ordner Source gespeichert. ===== Download von Contiki 2.5 ===== 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. ===== Anpassung der Ordnerstruktur ===== 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. ===== Änderungen im Contiki Quellcode ===== 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. ===== Änderungen im SNMP Quellcode ===== 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 | ===== Änderungen im Makefile ===== 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. ===== Kompilierung ===== 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. {{:contiki:snmp3.png|}} ===== Upload auf den AVR Raven (ATmega1284P) ===== Hierzu wird äquivalent zu [[contiki:ravenrz_usb_stick_installation|AVR RavenRZ USB-Stick Installation]] vorgegangen. Der korrekte Anschluß des JTAG Kabels ist in folgender Abbildung zu sehen: {{:contiki:snmp4.png|}} (Quelle: sics.se) 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. {{:contiki:snmp5.png|}} {{:contiki:snmp6.png|}} Durch den anschließend Klick auf Program wird der Upload gestartet. ===== Test der Implementierung (MIB-Browser) ===== 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 [[contiki:ravenrz_usb_stick_installation|AVR RavenRZ USB-Stick Installation]] abgeschlossen sein.) MIB Browser starten und die Einstellungen in der folgenden Abbildung durch Klick auf Advanced vornehmen. {{:contiki:snmp7.png|}} ^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. {{:contiki:snmp8.png|}} Es sollten nun nach kurzer Zeit die MIB des Raven Boards angezeigt werden: {{:contiki:snmp9.png|}} 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. {{:contiki:snmp10.png|}} Durch Bestätigung auf Ok und einen erneuten SNMP Walk ist die erfolgreiche Ausführung des SET Befehls zu sehen. {{:contiki:snmp11.png|}} ===== Test der Implementierung (netsnmp) ===== Die kostenlose Version des MIB-Browsers unterstützt nur SNMPv1. Für den Test von SNMPv3 kann auf die [[http://www.net-snmp.org/|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 ===== Konfigurationsmöglichkeiten des SNMP Agents ===== Zur Anpassung der Einstellungen des SNMP Agents, muss der Quellcode geändert werden und neu kompiliert werden. ==== Sicherheitseinstellungen ändern ==== === SNMPv1 === Der Communitystring kann in der der Datei snmpd-conf.h in Zeile 50 konfiguriert werden, er ist standardmäßig auf „public“ eingestellt. === SNMPv3 === == Username: == 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. == Authentification Password: == 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. == Privacy Password: == 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. == Keygenerator: == 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 [[contiki:snmp_keygen_source|]] letzte Quellcodezeile) Danach kann mit make kompiliert werden und anschließend mit dem Befehl ./keygen Der Hash-Wert des Passworts generiert werden.