next up previous contents
Next: 6.5 Erfahrungen mit der Up: Die Implementierung des CMIP/SNMP Previous: Callbacks der OSI-Klassen, die

 Automatische Code-Generierung 
Automatische Code-Generierung für die OSI-Klassen und OSI-Attribute

Wie im vorherigen Abschnitt beschrieben wurde, implementiert der Agentenentwickler ausschließlich Callbacks. Der MIBcomposer generiert daraus C++-Klassen und damit die Implementierung aller Managementobjekt-Klassen, die in der MIB des Agenten durch GDMO-Templates definiert werden.
Jeder einzelne Callback wird dabei in einer eigenen Datei im Verzeichnis ,, workspace`` gespeichert, zum Beispiel die beiden Dateien der in 6.3.1 vorgestellten Callbacks des Attributs sysContact:

MIB2.sysContact.real_access.cpp.txt.cbk
MIB2.sysContact.real_update.cpp.txt.cbk
Der mit dem MIBcomposer daraus generierte C++-Code der Managementobjekt-Klassen befindet sich im Verzeichnis ,,build``.
Die Funktionsweise eines Attribut-Lese-Zugriffs läuft für alle OSI-Attribute, die SNMP-Variablen repräsentieren, gleich ab: Es wird die Internet-Adresse, der Community-String und die OID der gewünschten SNMP-Variable benötigt. Ebenso verhält es sich bei einem Schreib-Zugriff.
Der C++-Programmcode für die beiden benötigten Callbacks (Real Value Access und Real Value Update) konnten nun so implementiert werden, daß die erforderlichen Parameter zur Laufzeit bestimmt werden. Daraus resultiert, daß für alle OSI-Attribute, die SNMP-Variablen repräsentieren, die gleichen Callback-Codes verwendet werden können. Diese Callbacks werden nun in gesonderten Dateien
muster.real_access.cpp.txt.cbk
muster.real_update.cpp.txt.cbk
gespeichert. Die ursprünglichen Callback-Dateien der Attribute werden nun zu Links auf diese gesonderten Dateien:
MIB2.sysContact.real_access.cpp.txt.cbk -> 
                muster.real_access.cpp.txt.cbk
MIB2.sysContact.real_update.cpp.txt.cbk ->
                muster.real_update.cpp.txt.cbk
Dies hat entscheidende Vorteile:
Für eine große Anzahl an Attributen muß nur eine kleine Menge an Callbacks in den gesonderten Dateien gehalten werden. Ist irgendeine Änderung im Code notwendig, muß diese nur an einer zentralen Stelle vorgenommen werden und nicht für jedes Attribut einzeln erfolgen. Außerdem können so für neue MIBs und damit für neue Attribute lediglich durch Erstellen von weiteren Links diese Attribute codiert werden.
Die gleiche Situation tritt für den Callback ein, der die Aktion ,, aktualisiereTabelle`` implementiert. Er wurde so programmiert, daß er für alle OSI-Klassen identisch ist. Somit kann er ebenso in einer gesonderte Datei gespeichert und mit Links den jeweiligen OSI-Klassen zugeordnet werden.
Der MIBcomposer greift nun über diese Links auf den Callback-Code zu und generiert daraus schließlich den C++-Code der Managementobjekt-Klassen.
Für die automatische Erstellung der Links im Verzeichnis ,,workspace`` wurde ein Werkzeug entwickelt: erstelleLinks. Es enthält in einer Liste alle gesonderten Dateien mit den für alle Klassen bzw. Attribute, die SNMP-Ressourcen repräsentieren, notwendigen Callbacks.
Anhand der in der Metadata Database eingetragenen OSI-Klassen und OSI-Attributen kann dieses Werkzeug erkennen, welche SNMP-Ressourcen repräsentieren und erstellt für jedes dieser Klassen und Attribute, auf der Grundlage dieser Liste, die entsprechenden Links auf den Callback-Code in den gesonderten Dateien.


next up previous contents
Next: 6.5 Erfahrungen mit der Up: Die Implementierung des CMIP/SNMP Previous: Callbacks der OSI-Klassen, die
Copyright Munich Network Management Team