pcap-dos.h revision 146768
198524Sfenner/* 298524Sfenner * Internal details for libpcap on DOS. 398524Sfenner * 32-bit targets: djgpp, Pharlap or DOS4GW. 498524Sfenner * 598524Sfenner * @(#) $Header: /tcpdump/master/libpcap/pcap-dos.h,v 1.1 2004/12/18 08:52:10 guy Exp $ (LBL) 698524Sfenner */ 798524Sfenner 856893Sfenner#ifndef __PCAP_DOS_H 956893Sfenner#define __PCAP_DOS_H 1056893Sfenner 1156893Sfenner#ifdef __DJGPP__ 1256893Sfenner#include <pc.h> /* simple non-conio kbhit */ 1356893Sfenner#else 14127668Sbms#include <conio.h> 15214478Srpaulo#endif 1656893Sfenner 1756893Sfennertypedef int BOOL; 18127668Sbmstypedef unsigned char BYTE; 19127668Sbmstypedef unsigned short WORD; 2056893Sfennertypedef unsigned long DWORD; 2156893Sfennertypedef BYTE ETHER[6]; 2256893Sfenner 2356893Sfenner#define ETH_ALEN sizeof(ETHER) /* Ether address length */ 2498524Sfenner#define ETH_HLEN (2*ETH_ALEN+2) /* Ether header length */ 2556893Sfenner#define ETH_MTU 1500 2656893Sfenner#define ETH_MIN 60 2798524Sfenner#define ETH_MAX (ETH_MTU+ETH_HLEN) 28146773Ssam 2956893Sfenner#ifndef TRUE 3098524Sfenner #define TRUE 1 3156893Sfenner #define FALSE 0 3298524Sfenner#endif 3398524Sfenner 3498524Sfenner#define PHARLAP 1 3598524Sfenner#define DJGPP 2 3698524Sfenner#define DOS4GW 4 3798524Sfenner 3856893Sfenner#ifdef __DJGPP__ 3956893Sfenner #undef DOSX 4098524Sfenner #define DOSX DJGPP 4198524Sfenner#endif 4298524Sfenner 4398524Sfenner#ifdef __WATCOMC__ 4498524Sfenner #undef DOSX 4598524Sfenner #define DOSX DOS4GW 4698524Sfenner#endif 4798524Sfenner 4856893Sfenner#ifdef __HIGHC__ 4956893Sfenner #include <pharlap.h> 5098524Sfenner #undef DOSX 5198524Sfenner #define DOSX PHARLAP 5298524Sfenner #define inline 5398524Sfenner#else 5456893Sfenner typedef unsigned int UINT; 5556893Sfenner#endif 5698524Sfenner 5798524Sfenner 5898524Sfenner#if defined(__GNUC__) || defined(__HIGHC__) 5998524Sfenner typedef unsigned long long uint64; 6098524Sfenner typedef unsigned long long QWORD; 6198524Sfenner#endif 6298524Sfenner 6356893Sfenner#if defined(__WATCOMC__) 6498524Sfenner typedef unsigned __int64 uint64; 6556893Sfenner typedef unsigned __int64 QWORD; 6698524Sfenner#endif 6798524Sfenner 6898524Sfenner#define ARGSUSED(x) (void) x 6998524Sfenner 7056893Sfenner#if defined (__SMALL__) || defined(__LARGE__) 7198524Sfenner #define DOSX 0 7256893Sfenner 7398524Sfenner#elif !defined(DOSX) 7498524Sfenner #error DOSX not defined; 1 = PharLap, 2 = djgpp, 4 = DOS4GW 7598524Sfenner#endif 7656893Sfenner 7798524Sfenner#ifdef __HIGHC__ 7856893Sfenner#define min(a,b) _min(a,b) 7956893Sfenner#define max(a,b) _max(a,b) 8098524Sfenner#endif 8198524Sfenner 8256893Sfenner#ifndef min 8398524Sfenner#define min(a,b) ((a) < (b) ? (a) : (b)) 8456893Sfenner#endif 8598524Sfenner 8698524Sfenner#ifndef max 8798524Sfenner#define max(a,b) ((a) < (b) ? (b) : (a)) 8856893Sfenner#endif 8998524Sfenner 9056893Sfenner#if !defined(_U_) && defined(__GNUC__) 9156893Sfenner#define _U_ __attribute__((unused)) 9298524Sfenner#endif 9398524Sfenner 9456893Sfenner#ifndef _U_ 9598524Sfenner#define _U_ 9656893Sfenner#endif 9798524Sfenner 98146773Ssam#if defined(USE_32BIT_DRIVERS) 9998524Sfenner #include "msdos/pm_drvr/lock.h" 10098524Sfenner 10198524Sfenner #ifndef RECEIVE_QUEUE_SIZE 102146773Ssam #define RECEIVE_QUEUE_SIZE 60 10398524Sfenner #endif 10498524Sfenner 10598524Sfenner #ifndef RECEIVE_BUF_SIZE 10656893Sfenner #define RECEIVE_BUF_SIZE (ETH_MAX+20) 10756893Sfenner #endif 10856893Sfenner 10998524Sfenner extern struct device el2_dev LOCKED_VAR; /* 3Com EtherLink II */ 11098524Sfenner extern struct device el3_dev LOCKED_VAR; /* EtherLink III */ 11198524Sfenner extern struct device tc59_dev LOCKED_VAR; /* 3Com Vortex Card (?) */ 11298524Sfenner extern struct device tc515_dev LOCKED_VAR; 11398524Sfenner extern struct device tc90x_dev LOCKED_VAR; 11456893Sfenner extern struct device tc90bcx_dev LOCKED_VAR; 11598524Sfenner extern struct device wd_dev LOCKED_VAR; 11698524Sfenner extern struct device ne_dev LOCKED_VAR; 11798524Sfenner extern struct device acct_dev LOCKED_VAR; 11898524Sfenner extern struct device cs89_dev LOCKED_VAR; 119146773Ssam extern struct device rtl8139_dev LOCKED_VAR; 12098524Sfenner 12198524Sfenner struct rx_ringbuf { 12298524Sfenner volatile int in_index; /* queue index head */ 12398524Sfenner int out_index; /* queue index tail */ 12498524Sfenner int elem_size; /* size of each element */ 12598524Sfenner int num_elem; /* number of elements */ 126146773Ssam char *buf_start; /* start of buffer pool */ 12798524Sfenner }; 12898524Sfenner 129146773Ssam struct rx_elem { 13098524Sfenner DWORD size; /* size copied to this element */ 13198524Sfenner BYTE data[ETH_MAX+10]; /* add some margin. data[0] should be */ 13298524Sfenner }; /* dword aligned */ 13398524Sfenner 13498524Sfenner extern BYTE *get_rxbuf (int len) LOCKED_FUNC; 135146773Ssam extern int peek_rxbuf (BYTE **buf); 13698524Sfenner extern int release_rxbuf (BYTE *buf); 13798524Sfenner 13898524Sfenner#else 13998524Sfenner #define LOCKED_VAR 14098524Sfenner #define LOCKED_FUNC 14198524Sfenner 14298524Sfenner struct device { 14398524Sfenner const char *name; 14498524Sfenner const char *long_name; 14598524Sfenner DWORD base_addr; /* device I/O address */ 14656893Sfenner int irq; /* device IRQ number */ 14798524Sfenner int dma; /* DMA channel */ 14898524Sfenner DWORD mem_start; /* shared mem start */ 14998524Sfenner DWORD mem_end; /* shared mem end */ 15098524Sfenner DWORD rmem_start; /* shmem "recv" start */ 15198524Sfenner DWORD rmem_end; /* shared "recv" end */ 15298524Sfenner 15398524Sfenner struct device *next; /* next device in list */ 15498524Sfenner 15598524Sfenner /* interface service routines */ 15698524Sfenner int (*probe)(struct device *dev); 15798524Sfenner int (*open) (struct device *dev); 15898524Sfenner void (*close)(struct device *dev); 15998524Sfenner int (*xmit) (struct device *dev, const void *buf, int len); 16098524Sfenner void *(*get_stats)(struct device *dev); 16198524Sfenner void (*set_multicast_list)(struct device *dev); 16298524Sfenner 16398524Sfenner /* driver-to-pcap receive buffer routines */ 16498524Sfenner int (*copy_rx_buf) (BYTE *buf, int max); /* rx-copy (pktdrvr only) */ 16598524Sfenner BYTE *(*get_rx_buf) (int len); /* rx-buf fetch/enqueue */ 16698524Sfenner int (*peek_rx_buf) (BYTE **buf); /* rx-non-copy at queue */ 16798524Sfenner int (*release_rx_buf) (BYTE *buf); /* release after peek */ 16898524Sfenner 16998524Sfenner WORD flags; /* Low-level status flags. */ 17056893Sfenner void *priv; /* private data */ 17156893Sfenner }; 17298524Sfenner 173146773Ssam /* 17456893Sfenner * Network device statistics 175146773Ssam */ 17698524Sfenner typedef struct net_device_stats { 17798524Sfenner DWORD rx_packets; /* total packets received */ 17898524Sfenner DWORD tx_packets; /* total packets transmitted */ 179111726Sfenner DWORD rx_bytes; /* total bytes received */ 18098524Sfenner DWORD tx_bytes; /* total bytes transmitted */ 18156893Sfenner DWORD rx_errors; /* bad packets received */ 18298524Sfenner DWORD tx_errors; /* packet transmit problems */ 18398524Sfenner DWORD rx_dropped; /* no space in Rx buffers */ 18498524Sfenner DWORD tx_dropped; /* no space available for Tx */ 18598524Sfenner DWORD multicast; /* multicast packets received */ 18698524Sfenner 18798524Sfenner /* detailed rx_errors: */ 18898524Sfenner DWORD rx_length_errors; 18998524Sfenner DWORD rx_over_errors; /* recv'r overrun error */ 19098524Sfenner DWORD rx_osize_errors; /* recv'r over-size error */ 19198524Sfenner DWORD rx_crc_errors; /* recv'd pkt with crc error */ 19298524Sfenner DWORD rx_frame_errors; /* recv'd frame alignment error */ 19398524Sfenner DWORD rx_fifo_errors; /* recv'r fifo overrun */ 19498524Sfenner DWORD rx_missed_errors; /* recv'r missed packet */ 19598524Sfenner 19698524Sfenner /* detailed tx_errors */ 19798524Sfenner DWORD tx_aborted_errors; 19898524Sfenner DWORD tx_carrier_errors; 19998524Sfenner DWORD tx_fifo_errors; 20098524Sfenner DWORD tx_heartbeat_errors; 20198524Sfenner DWORD tx_window_errors; 20256893Sfenner DWORD tx_collisions; 20398524Sfenner DWORD tx_jabbers; 20456893Sfenner } NET_STATS; 20598524Sfenner#endif 20698524Sfenner 20798524Sfennerextern struct device *active_dev LOCKED_VAR; 20898524Sfennerextern const struct device *dev_base LOCKED_VAR; 209146773Ssamextern struct device *probed_dev; 21098524Sfenner 21198524Sfennerextern int pcap_pkt_debug; 21298524Sfenner 213146773Ssamextern void _w32_os_yield (void); /* Watt-32's misc.c */ 214146773Ssam 21598524Sfenner#ifdef NDEBUG 21698524Sfenner #define PCAP_ASSERT(x) ((void)0) 21798524Sfenner 21856893Sfenner#else 21998524Sfenner void pcap_assert (const char *what, const char *file, unsigned line); 220146773Ssam 221146773Ssam #define PCAP_ASSERT(x) do { \ 22298524Sfenner if (!(x)) \ 22398524Sfenner pcap_assert (#x, __FILE__, __LINE__); \ 22456893Sfenner } while (0) 22598524Sfenner#endif 226146773Ssam 227146773Ssam#endif /* __PCAP_DOS_H */ 228146773Ssam