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:
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.