Atari Logo
Atari Computer

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

Der Protokoll Manager

Der Protokollmanager enthält die Funktionen, die von Modulen genutzt werden, welche High-Level-Protokolle implementieren. Es gibt Funktionen, um das "Vorhandensein bekannt zu machen", spezielle Parameter zu erfragen und Verbindungshandles zu managen.

Die Aufrufe:


Die Funktion 'PRTCL_announce'
    int16  cdecl  PRTCL_announce (int16 protocol);
Macht bekannt, daß ein High-Level-Protokoll aktiv ist.

Module, die High-Level-Protokolle wie TCP oder UDP implementieren, müssen diese Funktion aufrufen, damit sie Datagramme empfangen können. Wenn die Funktion nicht aufgerufen wird, sendet der IP-Kern für jedes für dieses Protokoll bestimmte Datagramm eine 'ICMP Destination unreachable'-Nachricht zurück und meldet das Datagramm ab.

Gibt ein Flag zurück, welches anzeigt, ob PRTCL_announce bereits vorher mit dieser Protokollnummer aufgerufen wurde (TRUE) oder ob dies das erste Mal ist (FALSE). Wenn TRUE zurückgeliefert wird, sollte das Modul sich nicht installieren.


Die Funktion 'PRTCL_get_parameters'
    int16  cdecl  PRTCL_get_parameters (uint32 rem_IP, uint32 *lcl_IP,
                                        int16 *ttl, uint16 *mtu);
Holt High-Level-Protokoll-Parameter aus dem STinG-Kern.

High-Level-Protokolle benutzen normalerweise die Quell-(=lokale) IP-Adresse in ihren Packets. Es muß auch eine Lebensdauer (ttl=time to live) angegeben werden, wenn das Packet über den Aufruf IP_send verschickt wird. Manchmal ist es nützlich, die Größe des Packets der Maximalgröße anzupassen, um unnötige Fragmentierung zu vermeiden. Dieser Aufruf wurde implementiert, um die Möglichkeit zur Verfügung zu stellen, etwas über diese Parameter zu erfahren. Die Parameter 'lcl_IP', 'ttl' und 'mtu' sind Pointer auf entsprechende Variablen, die von dieser Funktion eingesetzt werden. Für Pointer auf unbenutzte Variablen kann NULL benutzt werden.

Gibt entweder E_NORMAL oder E_UNREACHABLE zurück.


Die Funktion PRTCL_request'
    int16  cdecl  PRTCL_request (void *connect, CN_FUNCS *functions);
Holt ein neues Verbindungshandle aus dem Handle-Pool.

High-Level-Protokolle teilen sich ein gemeinsames Set von Funktionen zum Datenempfang. Daher müssen ihre Verbindungshandles eindeutig bleiben. Dies wird vom entsprechenden Modul erreicht, indem PRTCL_request, PRTCL_release und PRTCL_lookup benutzt werden, um den Handle-Pool zu verwalten.

PRTCL_request wird benutzt, um ein neues Handle aus einem Pool von 32765 zu bekommen. Durch die Übergabe des Parameters 'connect' wird ein Pointer auf eine Struktur mit verbindungsbezogenen Daten mit dem Handle verknüpft, damit das Modul sich nicht mehr um das Handle und die assoziierten Daten kümmern muß. Die Datenstruktur ist vollkommen auf das Modul begrenzt, es kann beliebige Daten enthalten. Der Parameter 'function' ist ein Pointer auf eine Struktur CN_FUNCS, die ein Set von Pointern auf Empfangsfunktionen enthält, die aufgerufen werden, wenn irgendein Client eine API-Funktion aus dem Connection Manager aufruft mit einem Handle, das zu dem vom Modul unterstützten Protokoll gehört.

Ein Wert von NULL ist für 'connect' möglich, 'functions' jedoch muß belegt sein. Es sollte eine CN_FUNCS-Struktur mit den entsprechenden Funktionspointern im Code sein und die Adresse dieser Struktur übergeben werden, wenn PRTCL_request benutzt wird.

Jede Funktion des Moduls, der ein Verbindungshandle übergeben wird, kann PRTCL_lookup nutzen, um den Pointer auf die zugehörigen Daten wiederzubekommen.
Jede Funktion aus der CN_FUNCS-Struktur wird direkt mit diesem Pointer als erstem Argument aufgerufen. Nach der Benutzung, wenn die Verbindung getrennt wird, muß wieder das Handle mit dem PRTCL_release-Aufruf zurückgegeben werden.

PRTCL_request übergibt ein neues Handle, oder -1, wenn ein Fehler aufgetreten ist.


Die Funktion 'PRTCL_release'
    void  cdecl  PRTCL_release (int16 handle);
Gibt ein benutztes Verbindungshandle an den Handlepool zurück.

High-Level-Protokolle teilen sich ein gemeinsames Set von Datenempfangsfunktionen. Daher müssen ihre Verbindungshandles eindeutig gehalten werden. Dies wird vom entsprechenden Modul erreicht, indem es die Funktionen PRTCL_request, PRTCL_release und PRTCL_lookup zur Verwaltung des Pools benutzt.

Jedes Handle, das über PRTCL_request geholt wurde, muß eventuell zurückgegeben werden, um eine Erschöpfung des Handlepools zu vermeiden. Daher muß jedes Modul, das ein Protokoll implementiert, welches den Connection Manager benutzt, aus seiner Schließfunktion heraus PRTCL_release aufrufen und das Handle übergeben, das es vom Aufruf der Funktion PRTCL_request bekommen hat.


Die Funktion 'PRTCL_lookup'
    void *  cdecl  PRTCL_lookup (int16 handle, CN_FUNCS *functions);
Sucht die Daten zu einem gegebenen Verbindungshandle.

High-Level-Protokolle teilen sich ein gemeinsames Set von Datenempfangs- funktionen. Daher müssen ihre Verbindungshandles eindeutig gehalten werden. Dies wird vom entsprechenden Modul erreicht, indem die Funktionen PRTCL_request, PRTCL_release und PRTCL_lookup zur Verwaltung des Pools benutzt werden.

Jede in der CN_FUNCS-Struktur deklarierte Funktion bekommt die Adresse der verbindungsbezogenen Daten direkt als erstes Argument übergeben. Ein Modul, das andere API-Aufrufe tätigen will (z.B. die 'send'-Funktion), die vom Connection Manager unabhängig sind, müssen, um diese Adresse zu erfahren, extra danach suchen. In diesen Fällen kann diese Funktion dazu benutzt werden, um den Aufwand für das Modul gering zu halten. Als erster Parameter wird das Handle übergeben; die Adresse der CN_FUNCS-Struktur für die Verbindung muß auch übergeben werden, um sicherzustellen, daß nur das richtige Modul auf die Daten zugreift.

Aus Geschwindigkeitsgründen wird von PRTCL_lookup eine schnelle Hash-Suche benutzt.

PRTCL_lookup gibt die Adresse der verbindungsbezogenen Daten, oder NULL, wenn das Handle nicht existiert oder einem anderen Modul gehört, zurück.


Zurück zur Startseite
Zum Anfang der Seite


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