|
Hauptseite - Welches System? - Hardware - Software - Emulatoren - |
Internet MausNet Programmieren Verweise Über |
Die Aufrufe im Einzelnen:
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
Gibt entweder E_NORMAL oder E_NOMEM oder E_UNREACHABLE zurück.
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: )
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.
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:
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.
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 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.
KRfree (data); KRfree (options);
von IP_send ausgeführt worden wäre. Daher sind diese Pointer in diesem
Fall ungültig.
tos - IP "Type of Service"
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 '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.
Die Funktion 'IP_discard'
void cdecl IP_discard (IP_DGRAM *datagram, int16 all_flag);
Streicht ein IP-Datagramm.
Zurück zur Startseite
Zum Anfang der Seite
English version not yet available. |