|
Hauptseite - Welches System? - Hardware - Software - Emulatoren - |
Internet MausNet Programmieren Verweise Über |
Der Port Manager enthält alle Funktionen, die mit den Ports zu tun haben.
Ports können ein- und ausgeschaltet werden, und ihr Zustand kann abgefragt
werden.
(Die PORT-Struktur und die DRIVER-Struktur sowie IP_DGRAM befinden sich noch
einmal einzeln im Ordner "Source".)
int16 cdecl on_port (char *port_name);Schaltet einen Port in den aktiven Modus und löst die Initialisierung aus.
Diese Funktion aktiviert den gewünschten Port, sofern dies nicht schon vorher geschehen ist. Durch die Aktivierung wird das Interface neu gestartet (PPP führt bspw. eine "Renegotiation"(Negotiation ist die Abstimmung mit dem Server zu Beginn der Verbindung) durch) und die Statistik-Zähler werden zurückgesetzt.
'port_name' ist ein Pointer auf eine Zeichenkette, die mit dem String, der durch den Eintrag 'name' in einer der PORT-Strukturen festgelegt ist, übereinstimmt. Wenn eine übereinstimmende Struktur gefunden wurde, so folgt ihrem Eintrag eine Struktur DRIVER, welche einen Pointer auf den 'set_state'-Code beinhaltet, der zur Aktivierung eines Ports aufgerufen werden muß.
Liefert FALSE zurück, wenn der Port nicht existiert oder deaktiviert war und nicht aktiviert werden konnte. Wenn der Port aktiviert wurde, wird TRUE übergeben.
Eine dieser Strukturen wird vom Hardware-Treiber zur Verfügung gestellt, und zwar je eine für jeden Port, für den der Treiber zuständig ist.
typedef struct port_desc { char *name; /* Name des Ports */ int16 type; /* Art des Ports */ int16 active; /* Flag: Port aktiv oder nicht */ uint32 flags; /* Type dependent operational flags */ uint32 ip_addr; /* IP address of this network adapter */ uint32 sub_mask; /* Subnet mask of attached network */ int16 mtu; /* Maximum packet size to go through */ int16 max_mtu; /* Maximum allowed value for mtu */ int32 stat_sd_data; /* Statistics of sent data */ IP_DGRAM *send; /* Link to first entry in send queue */ int32 stat_rcv_data; /* Statistics of received data */ IP_DGRAM *receive; /* Link to first entry in receive queue */ int16 stat_dropped; /* Statistics of dropped datagrams */ struct drv_desc *driver; /* Driver program to handle this port */ struct port_desc *next; /* Next port in port chain */ } PORT;
typedef struct ip_packet { IP_HDR hdr; /* Header des IP-Packets */ void *options; /* Options-Datenblock */ int16 opt_length; /* Länge der Options */ void *pkt_data; /* IP-Packet Datenblock */ int16 pkt_length; /* Länge des IP-Packets */ uint32 timeout; /* Packet Timeout ("Lebensdauer")*/ uint32 ip_gateway; /* Gateway fürs Forwarding */ struct port_desc *recvd; /* Empfangsport */ struct ip_packet *next; /* Nächstes IP-Packet in der Queue */ } IP_DGRAM;
typedef struct drv_desc { int16 cdecl (* set_state) (PORT *, int16); /* Init */ void cdecl (* send) (PORT *); /* senden */ void cdecl (* receive) (PORT *); /* empfangen */ char *name; /* Name des Treibers */ char *version; /* Version in der Form xx.yy */ uint16 date; /* Datum der Compilierung */ char *author; /* Name des Programmierers */ struct drv_desc *next; /* Nächster Treiber in der Kette */ BASPAG *basepage; /* Basepage des Moduls */ } DRIVER;
void cdecl (* send) (PORT *); /* send */Schaltet einen Port in den inaktiven Modus.
Wenn die angegebene Schnittstelle existiert und aktiviert ist, wird sie deaktiviert. Das schließt eine 'down-action' an der Schnittstelle ein, was, abhängig von der Schnittstelle und dem verwendeten Protokoll, zu Auflegen o.a. führen kann.
'port_name' ist ein Pointer auf eine Zeichenkette, die mit dem Eintrag 'name' in einer der PORT-Strukturen, die in STinG installiert sind, übereinstimmen muß. Wenn eine passende Struktur gefunden wurde, folgt der Eintrag 'driver' einer DRIVER-Struktur, die einen Pointer auf den 'set_state'-Code enthält, der zur Deaktivierung des Ports aufgerufen werden muß.
int16 cdecl query_port (char *port_name);Bringt in Erfahrung, ob ein bestimmter Port gerade aktiv ist.
Wenn die angegebene Schnittstelle existiert, wird ermittelt, ob die Schnittstelle aktiviert oder deaktiviert ist. Es wird FALSE zurückgegeben, wenn entweder die Schnittstelle gerade deaktiviert ist oder gar nicht existiert. Wenn sie existiert und aktiv ist, wird TRUE zurückgeliefert.
'port_name' ist ein Pointer auf eine Zeichenkette, die mit dem String, der im 'name'-Eintrag einer der PORT-Strukturen festgelegt ist, übereinstimmen muß. Wenn eine passende Struktur gefunden wurde, wird von query_port ihr 'active'-Eintrag zurückgeliefert.
English version not yet available. |