Atari Logo
Atari Computer

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

Der Port Manager

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".)


Die Aufrufe im einzelnen:
Die Funktion on_port
    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.


Die PORT-Struktur

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;

IP_DGRAM
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;

Die DRIVER-Struktur
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;

Die Funktion off_port
   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ß.


Die Funktion query_port
    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.


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