Atari Logo
Atari Computer

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

Der IP Manager

Der IP Manager enthält diejenigen Funktionen, die von High-Level-Protokoll-Modulen benötigt werden, um den Low-Level-"Netzverkehr" abzuwickeln. Es könnten dringende Daten sein, daher kann ein Callback-Schema nach der Wahl des Programmierers implementiert werden. Es werden Funktionen für das Senden, Empfangen und Vernichten von Funktionen zur Verfügung gestellt.

Die Aufrufe im Einzelnen:


Die Funktion 'IP_send'
    int16  cdecl  IP_send (uint32 src_host, uint32 dest_host, uint8 tos,
                           uint16 dont_frag, uint8 ttl, uint8 protocol,
                           uint16 ident, void *data, uint16 data_length,
                           void *options, uint16 options_length);
Schickt IP-Datagramme ab.

Diese Funktion sendet ein IP-Datagramm vom Host 'src_host' (der Rechner des Users) zum Host 'dest_host'. 'src_host' kann 0 sein, in diesem Fall nimmt die Funktion die entsprechende IP-Adresse. 'tos' ist die Art des IP-Service, 'dont_frag' ein Flag, das bestimmt, ob Fragmentierung erlaubt ist (TRUE: Fragmentierung ist nicht erlaubt). 'ttl' ist die Lebensdauer (TimeToLive) des Datagramms in Sekunden, Protokoll ist entweder P_TCP, P_UDP oder P_ICMP. `ident' ist eine einzigartige Identifikationszahl, 'data' ein Pointer auf die zu transferierenden Daten, 'data_length' die Länge der Daten in Bytes. 'options' ist ein Pointer auf die IP-Options, 'options_length' deren Länge in Bytes. Sowohl 'data' als auch 'options' sind Pointer, die entweder NULL enthalten, oder auf Blöcke zeigen, die vorher mit KRmalloc alloziert worden sein müssen. Der Aufruf fügt all diese Parameter in den IP Header ein und bringt das entstandene Datagramm in die Sende-Queue.

Bei einem erfolgreichen Aufruf (es wurde E_NORMAL zurückgeliefert), ist kein Zugriff auf die Daten oder Options mehr möglich, wie wenn

     KRfree (data);   KRfree (options);
von IP_send ausgeführt worden wäre. Daher sind diese Pointer in diesem Fall ungültig.

Gibt entweder E_NORMAL oder E_NOMEM oder E_UNREACHABLE zurück.


tos - IP "Type of Service"

Die Art des IP-Service ist eine 8 Bit - Zahl, .... (The IP type of service parameter is an 8 bit number, the bits of which have specific meanings referring to precedence and what characteristics are desired for the datagram involved: )



          Bits  7 ... 5    Precedence (Vorrang)
          Bits  4 ... 1    TOS (Type of Service = Art des Service)
          Bit         0    muß 0 sein

     TOS :
          0000             Normal Service (Normaler Service)
          0001             Minimize monetary cost (Kosten minimieren)
          0010             Maximize reliability (Höchste Zuverlässigkeit)
          0100             Maximize throughput (Maximaler Durchgang)
          1000             Minimize delay (Minimale Verzögerung)

     Precedence :
          000              Routine
          001              Priority
          010              Immediate
          011              Flash
          100              Flash override
          101              Critical
          110              Internetwork control
          111              Network control

Die Funktion 'IP_fetch'
    IP_DGRAM *  cdecl  IP_fetch (int16 protocol);
Holt ein IP-Datagramm aus der Empfangs-Queue.

Die Funktion holt ein IP-Datagrammaus der Queue, die zum spezifizierten Protokoll gehört. Wenn keins vorhanden ist, wird NULL zurückgegeben, ansonsten ein Pointer auf das Datagramm. Das Datagramm wird nun komplett vom aufrufenden Code kontrolliert. Es muß nach der Benutzung mit IP_discard gestrichen werden.


Die Funktion 'IP_handler'
    int16  cdecl  IP_handler (int16 protocol,
                              int16 cdecl (* handler) (IP_DGRAM *),
                              int16 install_code);
Installiert und deinstalliert Handler für High-Level-Protokolle.

Eine Handler-Funktion, um hereinkommende Datagramme für ein bestimmtes Protokoll unmittelbar zu verarbeiten, kann mit diesem Aufruf installiert werden. Der Handler wird für jedes hereinkommende Datagramm, das für dieses Protokoll bestimmt ist, aufgerufen. Der Handler sollte TRUE zurückliefern, wenn das Datagramm komplett verarbeitet wurde, daraufhin wird das Datagramm vom Kernel gestrichen. Wenn der Handler FALSE zurückliefert, wird das Datagramm in die Empfangsqueue für dieses Protokoll gelinkt und kann später über IP_fetch geholt werden.

Versuchen Sie nicht, einen Handler für ICMP mittels dieser Funktion zu installieren, benutzen sie dafür stattdessen ICMP_handler.

Die installierte Funktion wird über den Haupt-Interrupt aufgerufen und darf daher nur eine sehr begrenzte CPU-Zeit verbrauchen. Daher ist es nicht erlaubt, auf ein Ereignis zu warten. Der Aufruf wird asynchron im Supervisor Mode getätigt, daher mußman bei Betriebssystemaufrufen vorsichtig sein.

Der 'install_code' kann sein:


Die Funktion 'IP_discard'
    void  cdecl  IP_discard (IP_DGRAM *datagram, int16 all_flag);
Streicht ein IP-Datagramm.

IP-Datagramme müssen bei verschiedenen Gelegenheiten gestrichen werden, hauptsächlich, um den vom Datagramm belegten Speicher freizugeben. Es muß ein Pointer auf das Datagramm übergeben werden. Nach dem Aufruf dieser Funktion ist die Adresse, auf die der Pointer 'datagram' zeigt, nicht mehr gültig.

High-Level-Protokolle wie TCP interessieren sich meist nur noch fuer die im Paket enthaltenen Daten, der IP-Overhead (Header) kann beseitigt werden. Um nicht vor dem Vernichten des Paketes die Daten umkopieren zu muessen, kann 'all_flag' auf FALSE gesetzt werden. Die vom IP-Header und Optionen belegten Speicherbereiche werden dann an die Speicherverwaltung zurueckgegeben, nicht jedoch der Speicherblock mit den Daten.


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