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.