|
Hauptseite - Welches System? - Hardware - Software - Emulatoren - |
Internet MausNet Programmieren Verweise Über |
Die Aufrufe:
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.
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.
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.
PRTCL_request übergibt ein neues Handle, oder -1, wenn ein Fehler
aufgetreten ist.
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.
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.
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 Funktion 'PRTCL_announce'
int16 cdecl PRTCL_announce (int16 protocol);
Macht bekannt, daß ein High-Level-Protokoll aktiv ist.
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.
Die Funktion PRTCL_request'
int16 cdecl PRTCL_request (void *connect, CN_FUNCS *functions);
Holt ein neues Verbindungshandle aus dem Handle-Pool.
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.
Die Funktion 'PRTCL_release'
void cdecl PRTCL_release (int16 handle);
Gibt ein benutztes Verbindungshandle an den Handlepool zurück.
Die Funktion 'PRTCL_lookup'
void * cdecl PRTCL_lookup (int16 handle, CN_FUNCS *functions);
Sucht die Daten zu einem gegebenen Verbindungshandle.
Zurück zur Startseite
Zum Anfang der Seite
![]() |
English version not yet available. |