Next: Zusammenfassung und offene Probleme
Up: Entwicklung eines eigenen Subagenten
Previous: Low Level DPI Funktionen
Nachdem die eingehenden DPI Requests dekodiert wurden, werden die entsprechenden High Level Funktionen
ausgeführt. Diese sind ausschließlich in den Moduln mib_gets.pl, mib_sets.pl sowie
sub_gets.pl, sub_sets.pl, sub_coms.pl und sub_undos.pl enthalten.
Die ersten beiden Moduln enthalten kaskadierte if-then-else Schleifen, in denen die InstanzID, also die
MIB-Variable ermittelt wird:
...
elsif ($InstID =~ /^1\.1\.1\.1/) # trapSourceID
{
&do_get ($InstID);
}
elsif ($InstID =~ /^1\.1\.1\.2/) # trapSourceTableStatus
{
&do_get ($InstID);
}
...
Dieses Vorgehen erlaubt es, für jede MIB Variable eine separate GET Prozedur zu definieren.
Das Modul mib_sets.pl ist identisch aufgebaut, es wird allerdings noch zusätzlich nach der Art des
Requests (SET/COMMIT/UNDO) unterschieden:
elsif ($InstID =~ /^1\.1\.1\.2/)
{
if ($Art eq "03") # Set - Request
{
$Fehler = &set_Tabelle($InstID,$Set_Typ,$Set_Laenge,2,5,@Set_Wert);
}
elsif ( $Art eq "0a") # Commit - Request
{
$Fehler = &com($InstID,2,5) # Commit-Request
}
elsif ( $Art eq "0b") # Undo - Request
{
$Fehler = &undo($InstID);
}
if(!$Fehler)
{
&ResponseSuccess($dpi_get_packet_id,$GID,$InstID,$Wert{$InstID},$Set_Typ);
}
else
{
&ResponseError($dpi_get_packet_id,$Fehler) # nicht Schreibbar
}
}
Die Auskodierung der jeweiligen Funktionen befinden sich in den entsprechenden sub_*.pl Moduln. Dabei
stehen folgende Funktionen zur Verfügung:
-
get()
Generische GET Funktion für Skalarvariablen und Tabelleneinträge. Die Funktion erwartet als Parameter
die Instanz-ID der Variablen und gibt den Wert der Variablen zurück. Existiert die angeforderte
Variable nicht, so wird undef zurückgegeben.
-
get_inc()
GET Funktion für das Anfordern von Indexvariablen. Parameter und Ergebnisse wie oben, aber die Funktion
erhöht den Wert der angefragten Variablen um 1.
-
set()
Generische SET Funktion für Skalarvariablen. Die Funktion erwartet als Parameter die Instanz-ID der zu
setzenden Variablen, den Typ der Variablen, die Länge des Setwertes in Bytes (wird automatisch beim
Empfang des DPI Pakets ermittelt und wird nur durchgereicht) und natürlich die Variable selbst. Bei
Erfolg gibt diese Funktion den Wert undef zurück, andernfalls den SNMP Error Code.
-
set_Tabelle()
Generische SET Funktion zum Setzen von Variablen in Tabellenzeilen. Die Funktion erledigt auch das
Handling der Tabellenstatusspalte, wie im Simple Book [1] beschrieben. Als Parameter werden
die Instanz-ID, der Variablentyp, die Variablenlänge in Byte, die Nummer der Spalte, die als Status-
spalte dient, die Anzahl der Tabellenspalten insgesamt und wiederum die Variable selbst erwartet.
Die Funktion gibt bei fehlerfreier Ausführung den Wert undef zurück. Bei Auftreten eines Fehlers
wird ein SNMP Error Code entsprechend [1] zurückgegeben.
-
undo()
Generische UNDO Funktion. Erwartet als Parameter die Instanz-ID der Variablen und setzt sie auf ihren
vorherigen Wert zurück. Gibt als Wert immer undef zurück.
-
com()
Generische COMMIT Funktion für Skalarvariablen und Tabellen. Die Funktion erwartet als Parameter die
Instanz-ID der zu setzenden Variablen und, falls es sich um eine Variable einer Tabellenzeile handelt,
zusätzlich noch die Nummer der Statusspalte und die Anzahl der Spalten. Bei erfolgreicher Ausführung
gibt die Funktion undef zurück, ansonsten einen SNMP Fehlercode.
Next: Zusammenfassung und offene Probleme
Up: Entwicklung eines eigenen Subagenten
Previous: Low Level DPI Funktionen
Copyright Munich Network Management Team