Atari Logo
Atari Computer

Hauptseite -
Welches System? -
Hardware -
Software -
Emulatoren -
Internet
MausNet
Programmieren
Verweise
Über

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.

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 '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 ü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 '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 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.


Die Funktion 'query_chains'
    void  cdecl  query_chains (PORT **port, DRIVER **drv, LAYER **layer);
Ermittelt die Adressen von verketteten Listen von Modulstrukturen.

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.


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.

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ß.


Best viewed with any browser English version not yet available.

Änderungen und Irrtümer vorbehalten. Letzte Änderung:
14 September 2001.
Home - Mail an den Webmaster - Impressum