Next: 6.1.2 Der SNMP-TrapController
Up: 6.1 Der SNMP-Manager
Previous: 6.1 Der SNMP-Manager
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: 6.1.2 Der SNMP-TrapController
Up: 6.1 Der SNMP-Manager
Previous: 6.1 Der SNMP-Manager
Copyright Munich Network Management Team