von Thomas Hütsch (thomas.huetsch@huetsch.de)
Das Mapping-Modell, wird in der Datei SCADE_Provider.conf definiert. Es bildet die Werte, Attribute und Struktur der MIB auf CIM ab. Kommentare werden mit einem '#'-Zeichen eingeleitet und gelten bis zum Ende der Zeile.
Any ::=
[0x20-0x7e]
Alpha ::= ['a'-'z''A'-'Z']
Digit ::= ['0'-'9']
Alnum ::= Alpha | Digit
Identifier ::= (Alpha | '_') (Alnum
| '_')*
Value ::= '"' Any* '"'
NEValue ::= '"' Any+ '"'
OidPart ::= (Alpha+ | Digit+)
Oid ::= OidPart ('.' OidPart)*
Werteabbildungen sind bijektive (umkehrbar eindeutige) Funktionen. Einem Wert des linken Modells (CIM) wird ein Wert des rechten Modells (MIB) zugewiesen. Es sind keine Abbildungen auf ein leeres Element erlaubt.
ValuePair ::= 'value'
NEValue 'is' NEValue ';'
Lookup ::= 'lookup' Identifier '{'
ValuePair* '}'
Definition einer Funktion, die den Wert "3" des linken Modells dem Wert "2" des rechten Modells zuordnet und umgekehrt.
lookup
IfEnabledState {
value "3" is "2";
}
Attributabbildungen können in unäre und binäre Abbildungen eingeteilt werden. Bei einer binären Abbildung ist eine Eigenschaft in beiden Modellen definiert, jedoch mit unterschiedlichem Namen. Bei unären Abbildungen kann einer Eigenschaft des linken Modells keine entsprechende Eigenschaft des rechten Modells zugeordnet werden. Der fehlende Wert wird daher im Mapping-Modell definiert und entnommen.
MetaAttName ::= 'HOSTNAME' | 'ID'
| 'MAPPING_CLASS' | 'CIM_CLASS'
MetaMapping ::= '$' | MetaAttName
ConstMapping ::= Value
SimpleMapping ::= ['const'] ['volatile'] Oid
EnumMapping ::= SimpleMapping 'lookup' Identifier
Mapping ::= SimpleMapping | EnumMapping |
ConstMapping | MetaMapping
MappingDef ::= 'property' Identifier 'is' Mapping
';'
Das SimpleMapping bildet eine Eigenschaft aus dem linken Modell auf eine Eigenschaft des rechten Modells ab. Der Wert der Eigenschaft wird unverändert übernommen. Die Art der Abbildung kann durch die optionalen Attribute const und volatile spezifiziert werden. Das Attribut const legt fest, dass die Eigenschaft des rechten Modells nicht geändert werden kann (read only). Mit dem Attribut volatile kann deklariert werden, dass der Wert der Eigenschaft nicht zwischengespeichert werden darf, da er sich auf Seite des rechten Modells durch andere Einflüsse ändern kann (z.B. system.sysUpTime, Nebenläufigkeit).
Der Wert des MIB Eintrags system.sysUpTime wird in das Property TimeOfLastStateChange übernommen.
property
TimeOfLastStateChange is const volatile system.sysUpTime;
Das EnumMapping basiert auf dem SimpleMapping. Der Wert der Eigenschaft wird über eine, zuvor definierte, Werteabbildung ermittelt.
Der Wert des MIB Eintrags interfaces.ifTable.ifEntry.ifAdminStatus wird über die Werteabbildung IfEnabledState abgebildet und der CIM Eigenschaft EnabledState zugewiesen.
property EnabledState is const volatile interfaces.ifTable.ifEntry.ifAdminStatus
lookup IfEnabledState;
Das Meta-Attribute Mapping macht Eigenschaften des Mapping-Modells für das CIM-Modell verfügbar. Es sind vier Meta-Eigenschaften definiert:
Der Klassenname der Metaklasse wird der CIM Eigenschaft SystemCreationClassName zugewiesen.
property SystemCreationClassName is $MAPPING_CLASS;
Das ConstMapping ist die Abbildung eines Wertes auf eine CIM-Eigenschaft. Werte, die über die MIB nicht zur Verfügung gestellt werden z.B. statische Eigenschaften wie Breite und Höhe eines Geräts, können mit dieser Abbildung erzeugt werden.
Der CIM-Eigenschaft Height wird der Wert 255 zugewiesen.
property Height is "255";
Mehrere Attributabbildungen werden zu einer Metaklasse zusammengefasst. Metaklassen können von einer anderen Metaklasse erben und die geerbten Attributabbildungen können wiederum überschrieben werden. Durch Angabe eines Klassennamens für das linke Modell (CIM) wird die (abstrakte) Metaklasse zu einer Klassenabbildung.
MetaClass ::= 'class'
Identifier [':' Identifier] ['is' Identifier] '{'
MappingDef* '}'
Die Klassenabbildung IF wird abgeleitet von der (abstakten) Metaklasse Key und soll auf die Klasse SCADE_NetworkAdapter des linken Modells (CIM) abgebildet werden. Eine Instanz der Abbildung IF bildet den Klassennamen ("IF") auf die CIM-Eigenschaft SystemName ab. Der konstante Wert "Base" der Eigenschaft OverloadMe mit wird in der abgeleiteten Klasse SCADE_NetworkAdapter durch den Wert "Derived" überschrieben.
class Key {
property SystemName is $MAPPING_CLASS;
property OverloadMe is "Base";
}
class IF : Key is SCADE_NetworkAdapter {
property Name is const interfaces.ifTable.ifEntry.ifDescr;
property OverloadMe is "Derived";
}
Strukturabbildungen bringen die einzelnen Abbildungsklassen in Beziehung zueinander. Die Beziehungen sind immer Aggregationsbeziehungen, da immer ein physisches Gerät, das aus mehreren logischen oder physischen Komponenten besteht, zugrunde liegt. Eine Beziehung kann jedoch auch als CIM-Assoziation abgebildet werden, sofern dies notwendig ist. Eine Aggregation darf nur auf eine von CIM_Component abgeleitete CIM-Klasse abgebildet werden. Eine Assoziation darf nur auf eine von CIM_Dependency abgeleitete CIM-Klasse abgebildet werden. Eine optionale Eigenschaft des rechten Modells (MIB) bestimmt die Kardinalzahl der Beziehung.
Association ::= 'association' Identifier
Identifier ['cardinal' Oid] 'is' Identifier ';'
Aggregation ::= 'aggregation' Identifier
Identifier ['cardinal' Oid] 'is' Identifier ';'
Die Assoziation definiert eine 1:1 Beziehung zwischen der Metaklasse LaserjetPhys (Vater) und der Metaklasse LaserjetLog (Sohn) welche auf die CIM-Klasse CIM_Realizes abgebildet wird. Die Aggregation definiert eine 1:n Beziehung. Die Kardinalzahl wird der MIB-Eigenschaft interfaces.ifNumber entnommen.
association LaserjetPhys LaserjetLog is CIM_Realizes;
aggregation LaserjetLog IF cardinal interfaces.ifNumber is
SCADE_LaserjetInterface;
Ein Gerät ist die Instanz einer Strukturabbildung, die bei einer bestimmten Klassenabbildung (Wurzelelement) beginnt. Bei der Deklaration muss die Art der Sitzung sowie deren Sitzungsparameter angegeben werden.
SNMPSession ::= 'SNMP' Hostname
Value
Device ::= 'device' Identifier SNMPSession
';'
Eine Erweiterung um eine Sitzung über den seriellen Port könnte wie folgt aussehen:
Parity ::= 'N' | 'E'
| 'O'
Stopbits ::= '1' | '2'
COMSession ::= 'COM' Digit+ Parity Stopbits
Device ::= 'device' Identifier (SNMPSession
| COMSession | etc.) ';'
Definition eines Geräts, auf das mit SNMP zugegriffen werden soll. Der Hostname des Geräts ist laserjet und die SMTP Community ist access. Die Strukturabbildung beginnt bei der Metaklasse LaserjetPhys.
device LaserjetPhys SNMP laserjet "access";
$Id: modeldef.html 68 2005-02-24 12:32:40Z thuet $