next up previous contents index
Next: Abbildung asynchroner Ereignismeldungen Up: Der JIDM-Algorithmus Previous: Umsetzung von MIB-Modulen

Abbildung von Gruppen und Tabellen

    Wie oben bereits angedeutet, ist das SNMPv2-Informationsmodell umfangreicher als das von SNMP(v1) und schließt dieses zur Gewährleistung der Abwärtskompatibilität mit ein. MIB-Module von SNMP(v1) können unter Verwendung von [#!RFC1908!#] in SNMPv2-Module umgewandelt werden.

Analog zum IIMC-Algorithmus (vgl. dazu Abschnitt [*]) bildet der JIDM-Algorithmus [#!jidmst97!#] zusammengesetzte Elemente von Internet-SMI folgendermaßen nach OMG IDL ab:

Jede neue Schnittstellendefinition wird von der Objektklasse SmiEntry abgeleitet, die die Wurzel der Vererbungshierarchie darstellt (s. Abb. [*]). Sie dient als Platzhalter für Attribute und Operationen, die einen generischen Zugriff auf Managementobjekte implementieren, welche durch den JIDM-Algorithmus in CORBA-konforme Objektklassen überführt wurden.


  
Abbildung: Vererbungshierarchie für übersetzte Internet-SMI Tabellenzeilen und Gruppen

Gruppen- und Tabellenzeilenobjekte befinden sich in der Vererbungshierarchie der IDL-Schnittstellen auf der gleichen Ebene; somit ist die ursprüngliche Zugehörigkeit von einer Tabelle zu einer bestimmten SNMP-Gruppe (wie es beispielsweise der Fall für die ifTable ist, die Bestandteil der interfaces-Gruppe ist) nicht mehr unmittelbar sichtbar. Die Zugehörigkeit von IDL-Zeilenobjekten und IDL-Gruppenobjekten ist durch die mit übernommenen Objektidentifikatoren allerdings weiterhin eindeutig.

Anhand der erwähnten SNMP-Gruppe interfaces soll nun beispielhaft der Transformationsvorgang detailliert besprochen werden. Ausgangspunkt ist die nachfolgende Definition dieser SNMP-Gruppe in [#!RFC1213!#]:

-- the Interfaces group

ifNumber OBJECT-TYPE    
     SYNTAX INTEGER
     ACCESS read-only
     STATUS mandatory
     DESCRIPTION
          ``The number of network interfaces ... ``
     ::= { interfaces 1 }

ifTable OBJECT-TYPE
     SYNTAX SEQUENCE OF IfEntry
     ACCESS not-accessible
     STATUS mandatory
     DESCRIPTION
          `` A list of interface entries. ...''
     ::= { interfaces 2 }

ifEntry OBJECT-TYPE
     SYNTAX IfEntry
     ACCESS not-accessible
     STATUS mandatory
     DESCRIPTION
          ``An interface entry containing objects ... ``
     INDEX { ifIndex }
     ::= { ifTable 1 }

IfEntry ::=
     SEQUENCE {
          ifIndex INTEGER,
          ifDescr DisplayString,
          ...
          ifSpecific OBJECT IDENTIFIER
     }

ifIndex OBJECT-TYPE
     SYNTAX INTEGER
     ACCESS read-only
     STATUS mandatory
     DESCRIPTION
          ``A unique value for each interface. ...''
     ::= { ifEntry 1 }

ifDescr OBJECT-TYPE
     ...
     ::= { ifEntry 2 }

...

ifSpecific OBJECT-TYPE
     SYNTAX OBJECT IDENTIFIER
     ACCESS read-only
     STATUS mandatory
     DESCRIPTION
          ``A reference to MIB definitions specific ...''
     ::= { ifEntry 22 }

-- the Address Translation group
...

Diese Gruppe besteht aus einer skalaren Variable (ifNumber) und einer Tabelle (ifTable) mit 22 Spalten (ifEntry 1-22). Durch den JIDM-Algorithmus werden somit je eine Schnittstellendefinition für ein Gruppenobjekt und für ein Tabellenzeilenobjekt erzeugt. Beide Klassen werden von der Klasse SmiEntry, die im Modul SNMPMgmt definiert wurde, abgeleitet.

Der Name der Klasse für das Gruppenobjekt ergibt sich aus dem Namen der SNMP-Gruppe und dem Suffix Group. Die skalare MIB-Variable ifNumber wird auf ein Attribut dieser Klasse abgebildet. Dabei werden der Name aus dem Deskriptor der Variablen, die Zugriffsarten aus der ACCESS-Klausel und der Datentyp aus der SYNTAX-Klausel der Variablen bestimmt. Da die SNMP-Gruppe keine weiteren skalaren Objekte besitzt, enthält die IDL-Definition nur dieses eine Attribut; die Tabelle der SNMP-Gruppe wird dabei ignoriert, da hierfür eine eigene IDL-Schnittstellendefinition vorgesehen ist. Die OID der SNMP-Variablen wird als Konstante definiert. Da diese Konstante den gleichen Namen trägt wie die Variable bzw. ihr entsprechendes Attribut, muß dies, um Namenskonflikte zu vermeiden, außerhalb der interface-Deklaration erfolgen:


... 
interface InterfacesGroup:SNMPMgmt::SmiEntry { 
/* DESCRIPTION: 
``The number of network interfaces ...'' */ 
 
readonly attribute ASN1_Integer ifNumber;
 
}; 
const ASN1_ObjectIdentifier ifNumber=''interfaces.1''; 

Da eine Zeile einer SNMP-Tabelle eine Liste (SEQUENCE) von einzelnen skalaren Variablen ist (siehe [#!RFC1902!#]), ergibt sich der Name einer solchen Klasse aus dem Namen dieser Liste (und nicht aus dem Namen der Tabelle) sowie dem Suffix Object. In obigem Beispiel besteht eine Zeile der Tabelle ifTable aus den in der Liste ifEntry angeführten Spaltenelementen. In der zu erzeugenden Schnittstelle IfEntryObject werden die Spalteneinträge, also Variablen einfacher skalarer Typen, zu Attributen dieser neuen Klasse. Analog dazu werden Namen, Zugriffsrechte und Datentypen von den Variablen übernommen, die Objektidentifikatoren von ifTable, ifEntry und von den Spaltenelementen werden auf Strings abgebildet:


... 
interface IfEntryObject:SNMPMgmt::SmiEntry { 
/* INDEX ifEntry */ 
//--------------
		/* DESCRIPTION:
		``A unique value for each interface. ...'' */ 
 
		readonly attribute ASN1_Integer ifIndex; 
//--------------
		/* DESCRIPTION:
		`` A textual string ... `` */
		typedef sequence <DisplayStringType, 255> IfDescrType;
 
		readonly attribute IfDescrType ifDescr;
// --------------
		...
		DESCRIPTION:
		''A reference to MIB definitions specific ...'' */ 
 
readonly attribute ASN1_ObjectIdentifier ifSpecific;
}; 
const ASN1_ObjectIdentifier ifTable=''interfaces.2''; 
const ASN1_ObjectIdentifier ifEntry=''ifTable.1''; 
const ASN1_ObjectIdentifier ifIndex=''ifEntry.1''; 
const ASN1_ObjectIdentifier ifDescr=''ifEntry.2''; 
...
const ASN1_ObjectIdentifier ifSpecific=''ifEntry.22''; 

next up previous contents index
Next: Abbildung asynchroner Ereignismeldungen Up: Der JIDM-Algorithmus Previous: Umsetzung von MIB-Modulen
Copyright Munich Network Management Team