1#ifndef __PKTDRVR_H
2#define __PKTDRVR_H
3
4#define PUBLIC
5#define LOCAL        static
6
7#define RX_BUF_SIZE  ETH_MTU   /* buffer size variables. NB !! */
8#define TX_BUF_SIZE  ETH_MTU   /* must be same as in pkt_rx*.* */
9
10#ifdef __HIGHC__
11#pragma Off(Align_members)
12#else
13#pragma pack(1)
14#endif
15
16typedef enum  {                /* Packet-driver classes */
17        PD_ETHER      = 1,
18        PD_PRONET10   = 2,
19        PD_IEEE8025   = 3,
20        PD_OMNINET    = 4,
21        PD_APPLETALK  = 5,
22        PD_SLIP       = 6,
23        PD_STARTLAN   = 7,
24        PD_ARCNET     = 8,
25        PD_AX25       = 9,
26        PD_KISS       = 10,
27        PD_IEEE8023_2 = 11,
28        PD_FDDI8022   = 12,
29        PD_X25        = 13,
30        PD_LANstar    = 14,
31        PD_PPP        = 18
32      } PKT_CLASS;
33
34typedef enum  {             /* Packet-driver receive modes    */
35        PDRX_OFF    = 1,    /* turn off receiver              */
36        PDRX_DIRECT,        /* receive only to this interface */
37        PDRX_BROADCAST,     /* DIRECT + broadcast packets     */
38        PDRX_MULTICAST1,    /* BROADCAST + limited multicast  */
39        PDRX_MULTICAST2,    /* BROADCAST + all multicast      */
40        PDRX_ALL_PACKETS,   /* receive all packets on network */
41      } PKT_RX_MODE;
42
43typedef struct {
44        char type[8];
45        char len;
46      } PKT_FRAME;
47
48
49typedef struct {
50        BYTE  class;        /* = 1 for DEC/Interl/Xerox Ethernet */
51        BYTE  number;       /* = 0 for single LAN adapter        */
52        WORD  type;         /* = 13 for 3C523                    */
53        BYTE  funcs;        /* Basic/Extended/HiPerf functions   */
54        WORD  intr;         /* user interrupt vector number      */
55        WORD  handle;       /* Handle associated with session    */
56        BYTE  name [15];    /* Name of adapter interface,ie.3C523*/
57        BOOL  quiet;        /* (don't) print errors to stdout    */
58        const char *error;  /* address of error string           */
59        BYTE  majVer;       /* Major driver implementation ver.  */
60        BYTE  minVer;       /* Minor driver implementation ver.  */
61        BYTE  dummyLen;     /* length of following data          */
62        WORD  MAClength;    /* HiPerformance data, N/A           */
63        WORD  MTU;          /* HiPerformance data, N/A           */
64        WORD  multicast;    /* HiPerformance data, N/A           */
65        WORD  rcvrBuffers;  /* valid for                         */
66        WORD  UMTbufs;      /*   High Performance drivers only   */
67        WORD  postEOIintr;  /*                  Usage ??         */
68      } PKT_INFO;
69
70#define PKT_PARAM_SIZE  14    /* members majVer - postEOIintr */
71
72
73typedef struct {
74        DWORD inPackets;          /* # of packets received    */
75        DWORD outPackets;         /* # of packets transmitted */
76        DWORD inBytes;            /* # of bytes received      */
77        DWORD outBytes;           /* # of bytes transmitted   */
78        DWORD inErrors;           /* # of reception errors    */
79        DWORD outErrors;          /* # of transmission errors */
80        DWORD lost;               /* # of packets lost (RX)   */
81      } PKT_STAT;
82
83
84typedef struct {
85        ETHER destin;
86        ETHER source;
87        WORD  proto;
88        BYTE  data [TX_BUF_SIZE];
89      } TX_ELEMENT;
90
91typedef struct {
92        WORD  firstCount;         /* # of bytes on 1st         */
93        WORD  secondCount;        /* and 2nd upcall            */
94        WORD  handle;             /* instance that upcalled    */
95        ETHER destin;             /* E-net destination address */
96        ETHER source;             /* E-net source address      */
97        WORD  proto;              /* protocol number           */
98        BYTE  data [RX_BUF_SIZE];
99      } RX_ELEMENT;
100
101
102#ifdef __HIGHC__
103#pragma pop(Align_members)
104#else
105#pragma pack()
106#endif
107
108
109/*
110 * Prototypes for publics
111 */
112
113#ifdef __cplusplus
114extern "C" {
115#endif
116
117extern PKT_STAT    pktStat;     /* statistics for packets */
118extern PKT_INFO    pktInfo;     /* packet-driver information */
119
120extern PKT_RX_MODE receiveMode;
121extern ETHER       myAddress, ethBroadcast;
122
123extern BOOL  PktInitDriver (PKT_RX_MODE mode);
124extern BOOL  PktExitDriver (void);
125
126extern const char *PktGetErrorStr    (int errNum);
127extern const char *PktGetClassName   (WORD class);
128extern const char *PktRXmodeStr      (PKT_RX_MODE mode);
129extern BOOL        PktSearchDriver   (void);
130extern int         PktReceive        (BYTE *buf, int max);
131extern BOOL        PktTransmit       (const void *eth, int len);
132extern DWORD       PktRxDropped      (void);
133extern BOOL        PktReleaseHandle  (WORD handle);
134extern BOOL        PktTerminHandle   (WORD handle);
135extern BOOL        PktResetInterface (WORD handle);
136extern BOOL        PktSetReceiverMode(PKT_RX_MODE  mode);
137extern BOOL        PktGetReceiverMode(PKT_RX_MODE *mode);
138extern BOOL        PktGetStatistics  (WORD handle);
139extern BOOL        PktSessStatistics (WORD handle);
140extern BOOL        PktResetStatistics(WORD handle);
141extern BOOL        PktGetAddress     (ETHER *addr);
142extern BOOL        PktSetAddress     (const ETHER *addr);
143extern BOOL        PktGetDriverInfo  (void);
144extern BOOL        PktGetDriverParam (void);
145extern void        PktQueueBusy      (BOOL busy);
146extern WORD        PktBuffersUsed    (void);
147
148#ifdef __cplusplus
149}
150#endif
151
152#endif /* __PKTDRVR_H */
153
154