#ifndef __PKTDRVR_H #define __PKTDRVR_H #define PUBLIC #define LOCAL static #define RX_BUF_SIZE ETH_MTU /* buffer size variables. NB !! */ #define TX_BUF_SIZE ETH_MTU /* must be same as in pkt_rx*.* */ #ifdef __HIGHC__ #pragma Off(Align_members) #else #pragma pack(1) #endif typedef enum { /* Packet-driver classes */ PD_ETHER = 1, PD_PRONET10 = 2, PD_IEEE8025 = 3, PD_OMNINET = 4, PD_APPLETALK = 5, PD_SLIP = 6, PD_STARTLAN = 7, PD_ARCNET = 8, PD_AX25 = 9, PD_KISS = 10, PD_IEEE8023_2 = 11, PD_FDDI8022 = 12, PD_X25 = 13, PD_LANstar = 14, PD_PPP = 18 } PKT_CLASS; typedef enum { /* Packet-driver receive modes */ PDRX_OFF = 1, /* turn off receiver */ PDRX_DIRECT, /* receive only to this interface */ PDRX_BROADCAST, /* DIRECT + broadcast packets */ PDRX_MULTICAST1, /* BROADCAST + limited multicast */ PDRX_MULTICAST2, /* BROADCAST + all multicast */ PDRX_ALL_PACKETS, /* receive all packets on network */ } PKT_RX_MODE; typedef struct { char type[8]; char len; } PKT_FRAME; typedef struct { BYTE class; /* = 1 for DEC/Interl/Xerox Ethernet */ BYTE number; /* = 0 for single LAN adapter */ WORD type; /* = 13 for 3C523 */ BYTE funcs; /* Basic/Extended/HiPerf functions */ WORD intr; /* user interrupt vector number */ WORD handle; /* Handle associated with session */ BYTE name [15]; /* Name of adapter interface,ie.3C523*/ BOOL quiet; /* (don't) print errors to stdout */ const char *error; /* address of error string */ BYTE majVer; /* Major driver implementation ver. */ BYTE minVer; /* Minor driver implementation ver. */ BYTE dummyLen; /* length of following data */ WORD MAClength; /* HiPerformance data, N/A */ WORD MTU; /* HiPerformance data, N/A */ WORD multicast; /* HiPerformance data, N/A */ WORD rcvrBuffers; /* valid for */ WORD UMTbufs; /* High Performance drivers only */ WORD postEOIintr; /* Usage ?? */ } PKT_INFO; #define PKT_PARAM_SIZE 14 /* members majVer - postEOIintr */ typedef struct { DWORD inPackets; /* # of packets received */ DWORD outPackets; /* # of packets transmitted */ DWORD inBytes; /* # of bytes received */ DWORD outBytes; /* # of bytes transmitted */ DWORD inErrors; /* # of reception errors */ DWORD outErrors; /* # of transmission errors */ DWORD lost; /* # of packets lost (RX) */ } PKT_STAT; typedef struct { ETHER destin; ETHER source; WORD proto; BYTE data [TX_BUF_SIZE]; } TX_ELEMENT; typedef struct { WORD firstCount; /* # of bytes on 1st */ WORD secondCount; /* and 2nd upcall */ WORD handle; /* instance that upcalled */ ETHER destin; /* E-net destination address */ ETHER source; /* E-net source address */ WORD proto; /* protocol number */ BYTE data [RX_BUF_SIZE]; } RX_ELEMENT; #ifdef __HIGHC__ #pragma pop(Align_members) #else #pragma pack() #endif /* * Prototypes for publics */ #ifdef __cplusplus extern "C" { #endif extern PKT_STAT pktStat; /* statistics for packets */ extern PKT_INFO pktInfo; /* packet-driver information */ extern PKT_RX_MODE receiveMode; extern ETHER myAddress, ethBroadcast; extern BOOL PktInitDriver (PKT_RX_MODE mode); extern BOOL PktExitDriver (void); extern const char *PktGetErrorStr (int errNum); extern const char *PktGetClassName (WORD class); extern const char *PktRXmodeStr (PKT_RX_MODE mode); extern BOOL PktSearchDriver (void); extern int PktReceive (BYTE *buf, int max); extern BOOL PktTransmit (const void *eth, int len); extern DWORD PktRxDropped (void); extern BOOL PktReleaseHandle (WORD handle); extern BOOL PktTerminHandle (WORD handle); extern BOOL PktResetInterface (WORD handle); extern BOOL PktSetReceiverMode(PKT_RX_MODE mode); extern BOOL PktGetReceiverMode(PKT_RX_MODE *mode); extern BOOL PktGetStatistics (WORD handle); extern BOOL PktSessStatistics (WORD handle); extern BOOL PktResetStatistics(WORD handle); extern BOOL PktGetAddress (ETHER *addr); extern BOOL PktSetAddress (const ETHER *addr); extern BOOL PktGetDriverInfo (void); extern BOOL PktGetDriverParam (void); extern void PktQueueBusy (BOOL busy); extern WORD PktBuffersUsed (void); #ifdef __cplusplus } #endif #endif /* __PKTDRVR_H */