next up previous contents
Next: Abbildung des NOTIFICATION-TYPE Makros Up: Übersetzung von ASN.1-Makros in Previous: MODULE-IDENTITY und OBJECT-IDENTITY

Abbildung der Managementobjekte

  Im folgenden werden SNMP und SNMPv2 -- wenn nicht explizit unterschieden -- synonym verwendet. Die Struktur der Managementinformation bei SNMPv2 ist umfangreicher und schließt (im Sinne der Abwärtskompatibilität) jene der Vorgängerversion SNMP mit ein. SNMP-MIB-Module können in SNMPv2-Module unter Vorlage von [CMRW96a] umgewandelt werden.

Das OBJECT-TYPE-Makro definiert den Typ eines ASN.1-Managementobjektes. Man unterscheidet zwischen einfachen skalaren Variablen und Listen bzw. Tabellen. Letztere Tabellen-Objekte sind genaugenommen wiederum nur einzelne Variablen, die entsprechend angeordnet sind. Variablen und Tabellen werden im MIB-Baum in Gruppen zusammengefaßt. Beispielsweise findet man in der Standard-MIB (MIB-II) 10 (disjunkte) Gruppen. Eine dieser Gruppen, ,,interfaces``, besteht aus einer Variablen und einer Tabelle mit 22 Spalten (Abb. 3.2, vgl. [MR91]). Analog zur Strategie von IIMC bei der Übersetzung von SNMP-Dokumenten in GDMO-Dokumente werden diese SNMP-Gruppen aufgespalten und zwar definiert der Translation Algorithm:

  
Abbildung 3.2: Die ``interfaces''-Gruppe der MIB-II
\begin{figure}
\begin{center}
\leavevmode \epsffile{interfacegr.eps}\end{center}\end{figure}

Jede neue Schnittstellendefinition erbt von einer gemeinsamen Objektklasse SmiEntry (s. Abb. 3.3). Sie dient als Platzhalter für Attribute und Operationen, die einen generellen Zugriff auf SNMP-Managementobjekte implementieren.
  
Abbildung: Vererbungshierarchie der IDL-Schnittstellen für Tabellen/Gruppen
\begin{figure}
\begin{center}
\leavevmode \epsffile{V-Hier.eps}\end{center}\end{figure}

Gruppen- und Zeilenobjekte befinden sich in der Vererbungshierarchie der IDL-Schnittstellen auf gleichem Niveau (Abb. 3.3). Insbesondere sind alle Objekte, das IDL-Gruppenobjekt und jedes Zeilenobjekt, die zu einer SNMP-Gruppe erzeugt werden, gleichberechtigt. Die ursprüngliche Zugehörigkeit von Variablen und Tabellen zu einer bestimmten SNMP-Gruppe ist also nicht mehr direkt sichtbar. Die ,,Enthaltensein``-Relation zwischen SNMP-Gruppen und den ASN.1-Tabellenobjekten bleibt aber durch die mitübernommenen Objektidentifikatoren erhalten, d.h. die Zusammengehörigkeit von IDL-Zeilenobjekten und IDL-Gruppenobjekten ist weiterhin eindeutig.

Anhand der erwähnten SNMP-Gruppe ,,interfaces`` soll nun der Vorgang etwas genauer besprochen werden. Ausgangspunkt ist die Definition dieser SNMP-Gruppe in [MR91]:

...
-- the System group
...

-- 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). Es werden also eine Schnittstellendefinition für ein Gruppenobjekt und eine für ein Tabellen-Zeile-Objekt angelegt. 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. Das Managementobjekt ifNumber wird auf ein Attribut dieser Klasse abgebildet. Dabei werden der Name aus dem Deskriptor der Variablen, Zugriffsrechte aus der ACCESS-Klausel und Typ aus der SYNTAX-Klausel der Variablen übernommen. Da die SNMP-Gruppe keine weiteren non-tabular Objekte besitzt, hat die IDL-Schnittstelle nur dieses eine Attribut; die Tabelle der SNMP-Gruppe wird ignoriert, da ein eigene IDL-Schnittstelle dafür 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''; 
Eine Tabelleninstanz auf einem SNMP-Agenten wird in der CORBA-Umgebung durch Objektinstanzen der Zeilen dieser Tabelle repräsentiert. Deshalb wird eine Klasse für eine Tabellenzeile und nicht für eine ganze Tabelle definiert. Da eine Zeile einer SNMP-Tabelle eine Liste (SEQUENCE) von einzelnen skalaren Variablen ist (s. [CMRW96c]), ergibt sich der Name einer solchen Klasse aus dem Namen dieser Liste (und nicht aus dem Namen der Tabelle) und dem Suffix Object. Im 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, Variablen einfacher skalarer Typen, zu den Attributen dieser neuen Klasse. Analog zu oben werden Namen, Zugriffsrechte und Datentypen von den Variablen übernommen, und 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''; 
Abbildung 3.4 zeigt die SNMP-Gruppe ,,interfaces`` im Internet-Registrierungsbaum und als IDL-Klasse(n) in der IDL-Schnittstellenhierarchie. Ein Managementsystem kann sich für die Variable ifNumber und für jede Zeile der SNMP-Tabelle ifTable ein Objekt dieser Klassen instantiieren, um auf die Informationen der SNMP-Gruppe zuzugreifen.
  
Abbildung: Die SNMP-Gruppe ,,interfaces`` und die entsprechenden Klassen
\begin{figure}
\begin{center}
\leavevmode \epsffile{ifclasses.eps}\end{center}\end{figure}


next up previous contents
Next: Abbildung des NOTIFICATION-TYPE Makros Up: Übersetzung von ASN.1-Makros in Previous: MODULE-IDENTITY und OBJECT-IDENTITY
Copyright Munich Network Management Team