In Analogie zum CMIP/SNMP Gateway vermittelt ein CORBA/SNMP Gateway
zwischen einem CORBA-konformen Managementsystem und mehreren
SNMP-Agenten (siehe Abbildung ). In der
CORBA-Architekturdomäne ist das Gateway eine Anwendung, die über
einen ORB mittels CORBA-Requests von einem CORBA-Managementsystem
angesprochen werden kann. Aus Sicht der SNMP-Agenten hingegen ist das
Gateway ein SNMP-Manager. Die wesentlichen Aufgaben des Gateways
liegen auch hier in der transparenten Weiterleitung von CORBA-Requests
auf SNMP-PDUs sowie die Übermittlung der Ergebnisse. Eine
Besonderheit der Kopplung von CORBA mit SNMP liegt darin, daß
CORBA-Objekte bereits explizit vom Managementsystem adressiert werden
und das Auslesen bzw. Setzen von MIB-Attributen durch Aufrufe der
diesen Attributen zugeordneten get()- bzw.
set()-Methoden geschieht. Ein anderes Spezifikum von CORBA ist, wie
bereits vorher erwähnt, daß die Struktur von CORBA-Requests im
Gegensatz zu den PDUs eines Managementprotokolls variabel ist. Eine
zentrale Komponente zur Ermittlung der in Frage kommenden MOI sowie
zur Weiterleitung der Anfragen
ist somit nicht erforderlich. Ein weiterer Aspekt von CORBA besteht
darin, daß sich eine Anfrage grundsätzlich nur auf eine
Objektinstanz bezieht; ein leistungsfähiger Scoping und
Filtering-Mechanismus, wie ihn das OSI-Management kennt, fehlt hier.
Somit entfällt auch die Möglichkeit der verteilten Auswertung von
Anfragen bezüglich mehrerer MOIs auf den Agenten bzw. dem Gateway.
Schließlich müssen SNMP-Traps vom Gateway angenommen und einem
CORBA-basierten Managementsystem über die in Abschnitt
diskutierten Event
Channels zugestellt werden.
Architektur des CORBA/SNMP Gateway-Prototyps
Aufgrund der Komplexität des Gesamtsystems liegt es nahe, das Gateway in verschiedene Komponenten zu zerlegen, die jeweils eine bestimmte Aufgabe erfüllen. Im einzelnen können folgende Komponenten identifiziert werden:
Proxy-Objekte sind die Instanzen der in IDL beschriebenen Objektklassen, die die SNMP-MIB des Agenten repräsentieren und durch den JIDM-Algorithmus erzeugt wurden. Diese Proxy-Objekte sind Teil des Gateways. Der Manager greift auf die Proxy-Objekte zu, indem er die Methoden der Proxy-Objekte mittels CORBA-Requests aufruft, worauf diese mit CORBA-Responses antworten. Wie für alle CORBA-Clients üblich, kann der Manager über die statische und/oder die dynamische Aufrufschnittstelle Methoden der Proxy-Objekte aufrufen. Die statische Aufrufschnittstelle ist für Managementzwecke allerdings wenig geeignet, da dazu die Client-Stubs aus der IDL-Beschreibung der Proxy-Objekte zu den Client-Programmen der Managementanwendung zur Übersetzungszeit gebunden werden müssen. Jedesmal, wenn neue Proxy-Objektklassen hinzukommen und verwendet werden sollen, müßte bei Verwendung der statischen Aufrufschnittstelle die Managementanwendung also neu übersetzt werden. Dies ist natürlich nicht praktikabel.
Für die dynamische Aufrufschnittstelle benötigt die Managementanwendung Objektreferenzen auf die Proxy-Objekte, auf die zugegriffen werden soll. Diese Referenzen werden dem Managementsystem wahlweise durch den Naming Service oder durch Events (etwa vom Gateway, wenn dort ein Proxy-Objekt erzeugt wurde) zur Verfügung gestellt. Beim Methodenaufruf gibt der Manager in einem Request die Objektreferenz des adressierten Proxy-Objektes, die aufzurufende Methode sowie die dazugehörigen Parameter an. Anhand der Objektreferenz lokalisiert der ORB das Proxy-Objekt und ruft dort die gewünschte Methode auf.
Der snmpserver ist die Komponente zur Kommunikation mit der SNMP-Umgebung. Hauptaufgabe des snmpserver ist das Aussenden von SNMP-Request-PDUs und das Empfangen der dazugehörigen Response-PDUs. Außerdem muß der snmpserver den Inhalt der Response-PDUs an die richtigen Proxy-Objekte weiterleiten können. Hierzu wird durch den JIDM-Algorithmus zu jeder erzeugten MOC sowie zu jedem Attribut dieser MOC die entsprechende SNMP OID als Konstante in die IDL-Definition des Moduls eingetragen (vgl. dazu auch Anhang ).
Der snmptrapd ist diejenige Gatewaykomponente, die für den Empfang der von den Agenten stammenden SNMP Trap-PDUs sowie deren Abbildung auf CORBA-Events. Zusammen mit dem snmpserver bildet der snmptrapd den Teil des Gateways, der gegenüber den SNMP-Agenten in der Managerrolle agiert.
Der letzte Bestandteil des Gateways ist der Discovery-Dämon discoverd, dessen Aufgabe im Auffinden neuer SNMP-Ressourcen besteht, wobei dies analog zu den üblichen Discovery-Mechanismen kommerzieller SNMP-Managementplattformen geschieht (Auslesen von ARP-Caches und Routing-Tabellen der Ressourcen, Subnetz-Discovery durch Versenden von ICMP-PDUs, Durchlaufen der Ressourcen-MIBs mit SNMP get-next Operationen usw.). Im Falle eines Auffindens neuer Ressourcen ist diese Komponente demzufolge insbesondere für die Erzeugung neuer Proxy-Objekte zuständig.
In den folgenden Abschnitten wird diskutiert, wie diese
Komponenten zur Erreichung eines flexiblen und erweiterbaren
Gesamtsystems zusammenwirken.
Funktionsweise des CORBA/SNMP Gateway-Prototyps
Abbildung zeigt eine Beispielkonfiguration des Gateways zur Laufzeit. In der SNMP-Umgebung läuft ein SNMP-Agent auf dem Rechner sun6. Von der MIB-II des Agenten sind beispielhaft die system-Gruppe und die Routing-Tabelle ( ipRouteTable) der MIB-II IP-Gruppe abgebildet. Der Wert der Variable sysDescr ist ``SunOS 4.0.1``; die Routing-Tabelle besteht aus insgesamt zwei Zeilen. Ein Zeileneintrag (d.h. die SNMP-Instanzen, die zu dieser Zeile gehören) wird mit dem Wert des Spaltenobjektes ipRouteDest eindeutig identifiziert. Der Agent wird über die IP-Adresse 129.188.215.16 und die Portnummer 161 angesprochen.
Im Gateway wurden durch den Discovery-Dämon die in der Abbildung grau unterlegten Proxy-Objekte erzeugt, die der Agenten-MIB entsprechen. Für die system-Gruppe wurde im Gateway eine Instanz der IDL-Schnittstelle systemGroup generiert. In dieser Schnittstelle wurde für jedes Managed Object der SNMP-Gruppe system mit dem JIDM-Algorithmus ein Attribut definiert. Auf die Instanz eines Managed Object kann über das gleichnamige Attribut des Proxy-Objektes zugegriffen werden. Für das Managed Object sysDescr stehen dazu zwei Methoden, get_sysDescr und set_sysDescr, zur Verfügung. Bei einem Aufruf dieser Methoden werden zusätzlich die Werte von zwei Attributen benötigt, um die richtige SNMP-Instanz zu adressieren: Während das Attribut destination des Proxy-Objektes der Klasse systemGroup die IP-Adresse des Agenten beinhaltet, ist das Attribut indexinfo mit dem Zugriffsidentifikator der SNMP-Variablen belegt, die das Proxy-Objekt repräsentiert (hier: .0). Die Objektidentifikatoren der SNMP-Variablen wurden zuvor als Konstante im Interface Repository abgelegt.
In unserem Beispiel wird für jede Zeile der Routing-Tabelle eine
Instanz der IDL-Klasse ipRouteTableEntry erzeugt. Analog zum
oben geschilderten Fall ist bei beiden Proxy-Objekten das Attribut
destination mit der IP-Adresse des SNMP-Agenten belegt. Die
Attribute indexinfo sind hingegen mit dem Wert des
Spaltenobjektes belegt, das einen Zeileneintrag der Routing-Tabelle
eindeutig identifiziert (hier: der Wert des Indextyps
ipRouteDest). Das erste Proxy-Objekt erhält den Index
(.128.129.215.13) der ersten Tabellenzeile, das andere den der
zweiten Zeile (.234.111.116.64). Hierdurch sind die Proxy-Objekte
eindeutig einer Zeile der Routing-Table zuzuordnen. Die Elemente einer
Zeile können mit den Attributzugriffsfunktionen des entsprechenden
Proxy-Objektes ausgelesen bzw. gesetzt werden. Die zentrale
Gateway-Komponente zum Erzeugen von SNMP-PDUs ist das
snmpserver-Objekt. Die Methoden snmp_get() und
snmp_set() erzeugen und versenden SNMP Request-PDUs und empfangen
die dazugehörigen SNMP Response-PDUs. Die CORBA-Laufzeitumgebung
sorgt dafür, daß ein Aufruf einer Methode eines CORBA-MOs auf das
Proxy-Objekt weitergeleitet wird (in der Abbildung durch die
gestrichelte Linie dargestellt). Die Schnittstellen der CORBA-MOs
(bzw. Proxy-Objekte) können durch ORB-Dienste ermittelt werden.
SNMP Get/Set-Anfragen
Zunächst sei angenommen, daß der Manager vom Proxy-Objekt der Klasse systemGroup den Wert des Attributs sysDescr auslesen will.
Anwendung von GetNextRequest- und GetBulk-Anfragen
Für den schreibenden Zugriff auf SNMP-Agenten kann beim Aufruf der Methode snmp_set() jeweils nur eine SetRequest-PDU an den Agenten gesandt werden. Für den lesenden Zugriff hingegen stehen in SNMP neben der GetRequest-PDU zwei weitere Protokolldateneinheiten zur Verfügung, nämlich GetNext und GetBulk. Mit ihnen können, wie wir in Abschnitt erläutert hatten, Tabellen durchlaufen bzw. auf größere Datenmengen von SNMP-Ressourcen effizienter zugegriffen werden. Der Manager kann beispielsweise alle Attributwerte der einem Tabellenzeileneintrag entsprechenden Objekte gleichzeitig abfragen. Um den gesamten Inhalt der Tabelle vom SNMP-Agenten zu holen, wird SNMP-seitig nur eine einzige GetBulk-PDU benötigt. Aufgrund der Tatsache, daß der JIDM-Algorithmus jede Tabellenzeile auf voneinander unabhängige Proxy-Objekte abbildet, kann von der GetBulk-Optimierung kein Gebrauch gemacht werden, da die die Tabellenzeilen darstellenden Objekte voneinander unabhängig die Methoden des snmpserver-Objektes aufrufen, um die SNMP-PDUs zu generieren. Dieses kann aber weder feststellen, daß zwischen angeforderten SNMP-Variablen ein Zusammenhang besteht, noch kann es a priori wissen, wie viele SNMP-Variablen von den Proxy-Objekten noch angefordert werden, die in einer GetBulk-PDU zusammengefaßt werden könnten. Jeder Methodenaufruf wird einzeln abgearbeitet, was bedeutet, daß mit einer GetRequest-PDU immer nur eine einzige SNMP-Variable abgefragt wird. Folgende Maßnahmen müßten getroffen werden, um GetBulk-PDUs zu unterstützen:
Hierfür müßte insbesondere das von uns verfolgte Konzept des zustandslosen Gateways aufgegeben werden, da Anfragen entsprechend des Zielsystems in Warteschlangen eingereiht werden müßten, um gemeinsam in einer GetBulk-PDU angefordert werden zu können. Ferner müßte ein Timeout-Mechanismus implementiert werden, der veranlaßt, daß nach Ablauf einer bestimmten Zeit die Warteschlangeninhalte in SNMP-PDUs verpackt und abgeschickt werden. Da uns der Mehrwert im Vergleich zu den Implementierungskosten nicht gerechtfertigt erschien, haben wir von einer Verwendung der GetBulk-Operation abgesehen.
Aus verwandten Gründen kann auch die GetNext-Operation nur
eingeschränkt verwendet werden: Durch eine GetNextRequest-PDU werden
Informationen vom Agenten zurückgegeben, die nicht dem Proxy-Objekt
zugeordnet werden dürfen, das die Methode snmp_get()
aufgerufen hat. Wenn beispielsweise die Methode
get_ipRouteNextHop() des Proxy-Objektes, das die erste Zeile der
Routing-Tabelle repräsentiert (in Abbildung
das Proxy-Objekt mit
indexinfo=.128.129.215.13), aufgerufen wird und daraufhin eine
GetNextRequest-PDU verschickt wird, so wird der entsprechende
Spalteneintrag der nächsten Tabellenzeile, also 131.156.10.176 vom
Agenten zurückgegeben. Da mit der GetNextRequest-PDU Tabellen
durchlaufen werden können, von denen die Zeilenindizes nicht bekannt
sind, wird diese PDU im Gateway nur vom
Discovery-Dämon eingesetzt.
Weiterleitung asynchroner Ereignismeldungen
Für die Weiterleitung von SNMP-Traps benutzen wir analog zu Abschnitt typisierte Event Channels, von denen jeder einem bestimmten SNMP-Trap zugeordnet ist. Die Event Channels selbst werden in einen Naming Graph eingetragen, wodurch eine CORBA-basierte Managementapplikation die Event Channels auffinden und sich bei diesen zum Empfang von Ereignismeldungen registrieren kann.
Das snmptrapd-Objekt, das an Port 162 SNMP-Trap-PDUs empfängt,
registriert sich bei allen Event Channels als Supplier, da
sämtliche SNMP-Traps hier eingehen und in typisierte Events
umgewandelt werden. Er spielt somit dieselbe Rolle wie der in
Abschnitt beschriebene
EFD_Supplier und die Verfahren zur Zustellung der
Ereignismeldungen an die registrierten CORBA-basierten
Managementapplikationen, die in der Rolle des Consumers
agieren, laufen somit identisch ab. Wir werden daher zur Vermeidung
von Wiederholungen auf eine Diskussion der Mechanismen zur
Ereignisweiterleitung verzichten.
Erweiterung des Gateways um neue Ressourcen
Die von einem Sprachcompiler erzeugten IDL-Klassendefinitionen einer SNMP-MIB (siehe dazu Abschnitt bzw. Anhang ) werden in das Interface Repository des ORB eingetragen (vgl. Abbildung ), also nicht direkt in das Managementsystem, wie es bei SNMP-Managern bzw. SNMP-Plattformen notwendig ist. Für jede neu hinzukommende oder geänderte Agenten-MIB wiederholt sich dieser Vorgang, der im wesentlichen daraus besteht, die aus dem JIDM-Algorithmus erzeugten IDL-Objektbeschreibungen mit dem Code des Gateways neu zu übersetzen und zu binden, um die neuen MO-Beschreibungen dem Gateway bekanntzugeben. Es gibt bisher von der OMG keinen standardisierten Mechanismus, um dies zur Laufzeit zu tun, weshalb wir bei der Implementierung der Discovery-Komponente unseres Gateways einen proprietären Mechanismus der von uns verwendeten SOM/DSOM-Entwicklungsumgebung verwendet haben. Es handelt sich hierbei um das DSOM Metaclass Framework, das es uns gestattet, neue Objektdefinitionen zur Laufzeit in das Interface Repository einzuspielen und deren Implementierung mit dem Gateway zu verknüpfen (siehe Abbildung ). Im Rahmen des OMG Meta-Object Service ist ein solches Verfahren angedacht, jedoch bisher noch nicht standardisiert worden.
In jeder CORBA-Umgebung existiert ein verteiltes Interface Repository, auf das alle CORBA-Anwendungen Zugriff haben. Mit dem einmaligen Laden einer in IDL übersetzten Agenten-MIB ins Interface Repository steht diese MIB (bzw. die entsprechenden Schnittstellendefinitionen) dann automatisch sowohl der Managementanwendung als auch dem Gateway zur Verfügung.