Next: Registrierung der Teilbäume
Up: Anmeldung beim DPI-Agenten
Previous: Anmeldung beim DPI-Agenten
Bevor ein Subagent DPI-Pakete vom Agenten empfangen bzw. an diesen schicken kann, muß
er sich beim Agenten anmelden und sich als Subagent identifizieren. Beide Schritte
werden durch die Funktion do_connect_and_open() realisiert, die sich im Modul 'dpi_system.c
befindet. Die an diese Stelle aufgerufenen Funktionen, die dem tatsächlichen Verbindungsaufbau
dienen, befinden sich in den Modulen 'snmp_lDPI.c', 'snmp_mDPI.c' sowie 'snmp_qDPI.c'.
Um eine Verbindung zum Agenten zu eröffnen, wird in do_connect_and_open() die Funktion
DPIconnect_to_agent_TCP() aufgerufen. Sie erwartet zwei Argumente:
- einen Hostnamen (Name oder IP-Adresse) der den Rechner spezifiziert, auf dem der
Agent läuft. Laufen Agent und Subagent auf dem gleichen Rechner, so kann hier der
Name 'loopback' oder 'localhost' verwendet werden.
- einen Community Namen, der verwendet wird, um einen DPI TCP-Port vom Agenten zu
erhalten. Wir verwenden den Community Namen 'public'.
Wurde die Verbindung zum Agenten erfolgreich aufgebaut, gibt die Funktion einen Deskriptor
zurück, der die Verbindung zum Agenten repräsentiert. Dieser Deskriptor wird hauptsächlich
beim Senden und Empfangen von DPI-Paketen verwendet. Im Fehlerfall wird ein
negativer Fehlercode zurückgegeben.
Im einem zweiten Schritt identifizieren wir uns beim Agenten. Wir bauen uns hierzu ein
DPI OPEN Paket, schicken es an den Agenten und warten danach auf dessen RESPONSE
Paket. Der Agent kann dabei unseren OPEN Request verweigern oder akzeptieren.
Ein DPI OPEN Paket wird durch den Aufruf von mkDPIopen() aufgebaut. Diese Funktion
erwartet dabei folgende Argumente:
- einen (eindeutigen) Object Identifier, der unseren Subagenten spezifiziert.
- eine optionale Beschreibung des Subagenten.
- einen Timeout (in Sekunden). Der Agent verwendet diesen Wert als Timeout für ein
RESPONSE Paket, wenn er eine Anfrage an den Subagenten stellt. Der Agent seinerseits
verwaltet seinen eigenen Timeout-Wert. Sollte unser Wert größer sein, so wird der
Wert des Agenten verwendet.
- die maximale Anzahl von Variablen, die der SUbagent pro DPI-Paket verarbeiten kann.
- den Zeichensatz, den wir zur String-Repräsentation verwenden.
- die Länge des Paßwortes. (oder Null, falls kein Paßwort verwendet wird)
- einen Zeiger auf das Paßwort (oder NULL, falls kein Paßwort verwendet wird).
Es hängt dabei vom Agenten ab, ob der Subagent ein Paßwort angeben muß, wenn er
sich bei ihm anmeldet.
Als Rückgabewert liefert mkDPIopen() einen Zeiger auf einen statischen Speicherbereich,
in dem das DPI OPEN Paket steht. Im Fehlerfall wird NULL zurückgegeben.
Nachdem das OPEN Paket aufgebaut wurde, wird es an den Agenten geschickt. Dies wir durch
die Funktion DPIsend_to_agent() realisiert. Sie erwartet folgende Argumente:
- den Deskriptor, der die Verbindung zum Agenten repräsentiert
(von DPI_connect_to_agent_TCP())
- einen Zeiger auf das zu verschickende DPI-Paket (von mkDPIopen())
- die Länge des Paketes (die Header-Datei 'snmp_dpi.h' enthält das Makro
DPI_PACKET_LEN, mit der die Länge eines Paketes berechnet wird)
Der Rückgabewert der Funktion ist entweder Null (wird durch DPI_RC_OK repräsentiert)
oder ein entsprechender Fehlercode, der in 'snmp_dpi.h' definiert ist.
Nachdem wir nun das Paket an den Agenten geschickt haben, warten wir auf die Antwort auf
unseren OPEN Request. Das Warten auf ein Paket vom Agenten wird durch die Funktion
DPIawait_packet_from_agent() realisiert, welche folgende Argumente erwartet:
- den Deskriptor, der die Verbindung zum Agenten repräsentiert
(von DPI_connect_to_agent_TCP())
- einen Timeout in Sekunden (die maximale Zeit, die der Subagent auf ein RESPONSE Paket
vom Agenten wartet)
- einen Zeiger auf einen Speicherbereich, in den das ankommende Paket geschrieben wird
(falls ein Fehler während des Empfangs auftritt, wird dort NULL hineingeschrieben)
- einen Zeiger auf einen 'LONG INTEGER'; dort wird die Länge des eintreffenden Paketes
vermerkt bzw. NULL, falls ein Fehler aufgetreten ist.
Der Rückgabewert der Funktion ist entweder Null (DPI_RC_OK) oder ein entsprechender
Fehlercode, der in 'snmp_dpi.h' definiert ist.
Haben wir ein Paket erhalten, müssen wir prüfen ob es sich dabei um ein RESPONSE
Paket auf unseren OPEN Request handelt. Zudem müssen wir sicherstellen, daß uns der
Agent als gültigen Subagenten akzeptiert hat.
Dazu parsen wir das angekommene Paket durch den Aufruf von pDPIpacket(), das einen
Zeiger auf ein Paket erwartet, und nehmen danach die entsprechenden Prüfungen vor.
Damit ist der reine Verbindungsaufbau zum Agenten abgeschlossen.
Next: Registrierung der Teilbäume
Up: Anmeldung beim DPI-Agenten
Previous: Anmeldung beim DPI-Agenten
Copyright Munich Network Management Team