next up previous contents
Next: 6.1.2 Der SNMP-TrapController Up: 6.1 Der SNMP-Manager Previous: 6.1 Der SNMP-Manager

Die SNMP-API-Komponente  

Die Komponente SNMP-API hat die Aufgabe, die Kommunikation des Gateways mit den SNMP-Agenten bereitzustellen. Dazu enthält das SNMP-API eine Instanz der C++-Klasse SNMP. Diese Klasse kapselt die verwendete SNMP-Programmierschnittstelle und stellt für die Kommunikation aller anderen Komponenten des Gateways mit der SNMP-API eine Menge an Methodenaufrufen zur Verfügung. Dabei wäre folgende Struktur wünschenswert:

class SNMP
{
        public:
                SNMP();
                ~SNMP();
                get(VarBind vBind,IpAdr ipAdr,Community comStr);
                set(VarBind vBind,IpAdr ipAdr,Community comStr);
                specialWalk(Oid oid,IpAdr ipAdr,ListeA indizes);
};
Die C++-Klasse SNMP ist für die Überwachung und Steuerung einer ,, SNMP-Session`` verantwortlich. Damit ist in diesem Zusammenhang folgendes gemeint[*]:
1.
,,Variable Bindings`` in PDUs einbinden und auspacken.
2.
PDUs abschicken und empfangen.
3.
Timeouts, Paketverluste, Paketduplikate usw. automatisch bearbeiten.
Wobei der Konstruktor eine ,,SNMP-Session`` aufbaut, der Destruktor diese abbaut. Die Methode get dient für das Lesen von SNMP-Variablen. Dazu wird in Parameter vBind eine Datenstruktur (,,Variable Binding``) übergeben, die sowohl die OIDs der gewünschten SNMP-Variablen als auch das (oder die) Ergebnis(se) der Anfrage enthält. Mit ipAdr wird der angesprochene SNMP-Agent identifiziert und mit comStr wird der benötigte Community-String übermittelt. Entsprechend werden mit der Methode set ein oder mehrere SNMP-Variablen auf neue Werte gesetzt. Die Methode specialWalk wurde ausschließlich für die Global Polling-Komponente eingeführt (siehe 6.2). Ihre Aufgabe ist es, die Indizes aller Tabellenzeilen in der mit oid festgelegeten Tabelle in der Datenstruktur indizes zurückzugeben. Dies wird benötigt, um feststellen zu können, ob in einer Tabelle nach einer bestimmten Zeit neue bzw. veraltete Tabelleneinträge aufgetreten sind. Diese Methode basiert auf dem Aufrufen mehrerer SNMP-GetNextRequest-PDUs.
Die Methoden und Konzepte dieser Klasse mußten nun auf eine bestehende SNMP-Programmierschnittstelle abgebildet werden. Da sich die Implementierung des Gateways auf die Programmiersprache C++ abstützt, lag es nahe, eine C++-SNMP-Programmierschnittstelle zu verwenden. Trotz intensiver Bemühungen, auch in Zusammenarbeit mit [Ho96], konnte keine gefunden werden (das Ergebnis beschränkte sich lediglich auf die Klassendefinitionen in [Mell96]).
Daher blieb nur die Verwendung einer C-SNMP-Programmierschnittstelle übrig. Die in IBM NetView for AIX enthaltene Schnittstelle konnte aufgrund von Headerdatei-Konflikten nicht in die IBM TMN WorkBench for AIX integriert werden. So werden in der IBM NetView for AIX SNMP-Schnittstelle in einer Headerdatei verschiedene SNMP-Fehlertypen per #define definiert. Ebenfalls werden bei der IBM TMN WorkBench for AIX in einer Headerdatei die gleichen Bezeichnungen für OSI-Fehlertypen per #define festgelegt.
So basiert schließlich die Komponente SNMP-API auf der SNMP-Programmierschnittstelle ,,ucd-snmp`` in der Version 3.0.1, die an der University of California at Davis von Wes Hardaker entwickelt wurde. Sie stellt eine C-Bibliothek mit sämtlichen Funtkionen für die Kommunikation eines SNMP-Managers mit einem SNMP-Agenten zur Verfügung. Durch die Besonderheit dieser Schnittstelle, daß keine globale ,, SNMP-Session`` existiert, sondern für jeden zu überwachenden SNMP-Agenten die oben erwähnten Verwaltungsaufgaben einzeln ausgeführt werden müssen, macht eine Änderung der wünschenswerten Konzepte in der C++-Klasse SNMP notwendig. In der ucd-API wird die oben definierte ,,SNMP-Session`` folgendermaßen eingeschränkt: Beim Aufbau einer ,,ucd-Session`` muß eine Internet-Adresse und ein Community-String angegeben werden. Eine ,,ucd-Session`` ist damit nicht unabhängig von den zu überwachenden SNMP-Agenten; es muß somit für jeden Agenten eine eigene ,,ucd-Session`` aufgebaut und verwaltet werden. Dazu wird die Klasse SNMP um eine interne Liste (hostList) erweitert, die jeder Internet-Adresse eine ,,ucd-Session`` zuordnet. Bevor das Gateway mit einem SNMP-Agenten kommunizieren kann, muß es diesen mit dessen Internet-Adresse und dessen Community-String an der SNMP-API anmelden[*]. Dadurch wird eine ,,ucd-Session`` zu diesem SNMP-Agenten aufgebaut. Danach kann das Gateway beliebig über die Methoden get, set und specialWalk mit dem SNMP-Agenten kommunizieren. Die SNMP-API kann anhand der in den Methodenaufrufen übergebenen Internet-Adresse diesen Request einer bestehenden ,,ucd-Session`` zuordnen und damit die notwendigen SNMP-PDUs auslösen (siehe Abbildung 6.1).
 
Abbildung:   Die Funktionsweise der SNMP-API-Komponente
41#41

Das Verhalten der Methoden soll sich natürlich nicht verändern:
class SNMP
{
        private:
                ListeB hostList;
        public:
                SNMP();
                ~SNMP();
                anmelden(IpAdr ipAdr,Community comStr);
                abmelden(IpAdr ipAdr);
                get(VarBind vBind,IpAdr ipAdr);
                set(VarBind vBind,IpAdr ipAdr);
                specialWalk(Oid oid,IpAdr ipAdr,ListeA indizes);
};
Falls sich der Community-String während einer ,,ucd-Session`` verändert, muß die bestehende Session abgebaut und eine neue, mit dem neuen Community-String, aufgebaut werden.


next up previous contents
Next: 6.1.2 Der SNMP-TrapController Up: 6.1 Der SNMP-Manager Previous: 6.1 Der SNMP-Manager
Copyright Munich Network Management Team