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()
get_inc()
set()
set_Tabelle()
undo()
com()