|
Hauptseite - Welches System? - Hardware - Software - Emulatoren - |
Internet MausNet Programmieren Verweise Über |
Dieser Aufruf liest das ttl-Feld des IP-Headers und setzt entsprechend
eine interne Timeout-Variable. Die Funktion muß von einem Port-Treibermodul
jedesmal aufgerufen werden, wenn es ein komplettes IP-Datagramm empfängt,
um die Überprüfung der Lebensdauer des spezifizierten Datagramms durch
den Kernel anzuschalten.
Die Funktion überprüft die für das spezifizierte Datagramm noch
verbleibende Zeit. Sie sollte von Porttreibern unmittelbar vor dem Absenden
aufgerufen werden, um zu vermeiden, daß Datagramme abgeschickt werden,
die auf der anderen Seite eh gestrichen werden. Wenn die time-to-live in Ordnung
ist, wird die Funktion zurückkehren, ohne eine Änderung vorzunehmen.
Wenn die time-to-live abgelaufen ist, wird das Datagramm gestrichen und eine
'ICMP-ttl-exceeded'-Antwort wird verschickt, falls das Datagramm nicht selbst
ein ICMP-Packet war. In letzterem Fall muß der 'datagram'-Pointer
als ungültig erachtet werden.
Gibt E_NORMAL oder E_TTL_EXCEED zurück.
Die Funktion setzt 'new_active' als neuen Active-Flag für STinG, wenn er
nicht -1 ist, und setzt 'new_fraction' als neues Delay, wenn nicht -1.
STinG ist aktiv, wenn der active-Flag auf TRUE gesetzt wurde. Dann wird
mit der festgelegten Häufigkeit der STinG-Kern aufgerufen, und IP-Datagramme
können versendet, empfangen und verteilt werden. Die Zeit zwischen
den Aufrufen des Kerns wird über den 'new_fraction' Parameter in
5 ms-Einheiten eingestellt. Der Anfangswert ist 10, was bedeutet, daß
der Kern alle 50 ms aufgerufen wird. Die benutzung dieser Funktion ist auf
Konfigurationstools wie ConfSTinG und STING.CPX beschränkt.
Die Funktion liefert die Einstellungen zurück, die vor dem Aufruf aktuell
waren. Das obere Word des Rückgabewertes enthält das bisherige
Active-Flag, das untere die vorherige Häufigkeit des Kern-Aufrufs.
Gibt Pointer an die ersten Elemente der verketteten Listen der
PORT-, DRIVER-
und LAYER-Strukturen zurück.
Jede dieser Strukturen enthält einen Link, das auf das nächste Element
zeigt. Pointer auf Variablen werden mit diesem Aufruf übergeben. Die
Funktion fügt die entsprechenden Adressen ein. Für nicht benötigte Adressen
kann ein NULL-Pointer übergeben werden.
Oft darf ein bestimmter Code nicht unterbrochen werden, noch nicht einmal
von Interrupts. Dies ist der Fall bei im Timing kritischen Code, oder Code,
der Datenstrukturen manipuliert, auf die aus einem Interrupt zugegriffen
wird. Mit dieser Funktion wird der entsprechende Code vor Unterbrechungen
"geschützt". Der Code muß eine durch RTS beendete Subroutine sein, die
einen Pointer-Parameter auf dem Stack erwartet und einen Wert in das CPU-
Register D0 zurückgibt (Standard C-Binding). Ein Pointer auf die Subroutine
wird in 'code' übergeben, während der Pointer-Parameter in 'para'
zur Verfügung stehen muß.
Der System Manager
Der System Manager enthält die Funktionen, die zu unterschiedlichen Zwecken
von Modulen aufgerufen werden und den IP-Kern nutzen. Zwei Funktionen sind
verantwortlich für die "Lebenszeit"(time-to-live) eines Datagramms,
eine andere ruft einen Code auf, wobei der Sicherheit wegen alle Interrupts
abgeschaltet sind, und es werden Funktionen zur Verfügung gestellt, die
dem Einstellen und Überprüfen interner Variablen dienen.
Die Funktion 'set_dgram_ttl'
void cdecl set_dgram_ttl (IP_DGRAM *datagram);
Schaltet die Überprüfung der "Lebensdauer" eines Datagramms ein.
Die Funktion 'check_dgram_ttl'
int16 cdecl check_dgram_ttl (IP_DGRAM *datagram);
Überprüft ein Datagramm auf die verstrichene time-to-live, und
vernichtet es, falls nötig.
Die Funktion 'set_sysvars'
int32 cdecl set_sysvars (int16 new_active, int16 new_fraction);
Ermittelt und setzt den STinG-'Active-Flag' und die Aufruf-Häufigkeit.
Die Funktion 'query_chains'
void cdecl query_chains (PORT **port, DRIVER **drv, LAYER **layer);
Ermittelt die Adressen von verketteten Listen von Modulstrukturen.
Die Funktion 'protect_exec'
int32 cdecl protect_exec (void *para, int32 cdecl (* code) (void *));
Ruft im geschützten Modus eine Subroutine mit Parameterübergabe auf.
English version not yet available. |