pcap-dos.h revision 214518
157429Smarkm/* 257429Smarkm * Internal details for libpcap on DOS. 357429Smarkm * 32-bit targets: djgpp, Pharlap or DOS4GW. 457429Smarkm * 557429Smarkm * @(#) $Header: /tcpdump/master/libpcap/pcap-dos.h,v 1.1 2004-12-18 08:52:10 guy Exp $ (LBL) 657429Smarkm */ 760573Skris 865668Skris#ifndef __PCAP_DOS_H 965668Skris#define __PCAP_DOS_H 1065668Skris 1165668Skris#ifdef __DJGPP__ 1265668Skris#include <pc.h> /* simple non-conio kbhit */ 1365668Skris#else 1465668Skris#include <conio.h> 1560573Skris#endif 1692555Sdes 1760573Skristypedef int BOOL; 1865668Skristypedef unsigned char BYTE; 1965668Skristypedef unsigned short WORD; 2065668Skristypedef unsigned long DWORD; 2165668Skristypedef BYTE ETHER[6]; 2265668Skris 2365668Skris#define ETH_ALEN sizeof(ETHER) /* Ether address length */ 2465668Skris#define ETH_HLEN (2*ETH_ALEN+2) /* Ether header length */ 2565668Skris#define ETH_MTU 1500 2665668Skris#define ETH_MIN 60 2765668Skris#define ETH_MAX (ETH_MTU+ETH_HLEN) 2865668Skris 2965668Skris#ifndef TRUE 3065668Skris #define TRUE 1 3165668Skris #define FALSE 0 3265668Skris#endif 3365668Skris 3465668Skris#define PHARLAP 1 3565668Skris#define DJGPP 2 3665668Skris#define DOS4GW 4 3757429Smarkm 3857429Smarkm#ifdef __DJGPP__ 3957429Smarkm #undef DOSX 40146998Sdes #define DOSX DJGPP 4157429Smarkm#endif 42124208Sdes 43124208Sdes#ifdef __WATCOMC__ 4457429Smarkm #undef DOSX 4557429Smarkm #define DOSX DOS4GW 4657429Smarkm#endif 4757429Smarkm 4857429Smarkm#ifdef __HIGHC__ 4957429Smarkm #include <pharlap.h> 5057429Smarkm #undef DOSX 5157429Smarkm #define DOSX PHARLAP 5257429Smarkm #define inline 5360573Skris#else 5457429Smarkm typedef unsigned int UINT; 5560573Skris#endif 5676259Sgreen 5760573Skris 5860573Skris#if defined(__GNUC__) || defined(__HIGHC__) 5969587Sgreen typedef unsigned long long uint64; 6060573Skris typedef unsigned long long QWORD; 6176259Sgreen#endif 6276259Sgreen 6376259Sgreen#if defined(__WATCOMC__) 6492555Sdes typedef unsigned __int64 uint64; 6598675Sdes typedef unsigned __int64 QWORD; 6660573Skris#endif 6760573Skris 6860573Skris#define ARGSUSED(x) (void) x 6960573Skris 7060573Skris#if defined (__SMALL__) || defined(__LARGE__) 7160573Skris #define DOSX 0 7260573Skris 7357429Smarkm#elif !defined(DOSX) 7457429Smarkm #error DOSX not defined; 1 = PharLap, 2 = djgpp, 4 = DOS4GW 7557429Smarkm#endif 7657429Smarkm 7757429Smarkm#ifdef __HIGHC__ 7857429Smarkm#define min(a,b) _min(a,b) 7957429Smarkm#define max(a,b) _max(a,b) 8057429Smarkm#endif 8157429Smarkm 8257429Smarkm#ifndef min 8376259Sgreen#define min(a,b) ((a) < (b) ? (a) : (b)) 8457429Smarkm#endif 8557429Smarkm 8657429Smarkm#ifndef max 8757429Smarkm#define max(a,b) ((a) < (b) ? (b) : (a)) 8857429Smarkm#endif 8957429Smarkm 9057429Smarkm#if !defined(_U_) && defined(__GNUC__) 9157429Smarkm#define _U_ __attribute__((unused)) 9298675Sdes#endif 9357429Smarkm 9457429Smarkm#ifndef _U_ 9598675Sdes#define _U_ 9657429Smarkm#endif 9757429Smarkm 9857429Smarkm#if defined(USE_32BIT_DRIVERS) 9957429Smarkm #include "msdos/pm_drvr/lock.h" 10057429Smarkm 10157429Smarkm #ifndef RECEIVE_QUEUE_SIZE 10257429Smarkm #define RECEIVE_QUEUE_SIZE 60 10357429Smarkm #endif 10457429Smarkm 10576259Sgreen #ifndef RECEIVE_BUF_SIZE 10657429Smarkm #define RECEIVE_BUF_SIZE (ETH_MAX+20) 10757429Smarkm #endif 10857429Smarkm 10957429Smarkm extern struct device el2_dev LOCKED_VAR; /* 3Com EtherLink II */ 11057429Smarkm extern struct device el3_dev LOCKED_VAR; /* EtherLink III */ 111124208Sdes extern struct device tc59_dev LOCKED_VAR; /* 3Com Vortex Card (?) */ 11257429Smarkm extern struct device tc515_dev LOCKED_VAR; 11357429Smarkm extern struct device tc90x_dev LOCKED_VAR; 11457429Smarkm extern struct device tc90bcx_dev LOCKED_VAR; 11557429Smarkm extern struct device wd_dev LOCKED_VAR; 11657429Smarkm extern struct device ne_dev LOCKED_VAR; 11757429Smarkm extern struct device acct_dev LOCKED_VAR; 11857429Smarkm extern struct device cs89_dev LOCKED_VAR; 11960573Skris extern struct device rtl8139_dev LOCKED_VAR; 12076259Sgreen 121124208Sdes struct rx_ringbuf { 122124208Sdes volatile int in_index; /* queue index head */ 123124208Sdes int out_index; /* queue index tail */ 124124208Sdes int elem_size; /* size of each element */ 125124208Sdes int num_elem; /* number of elements */ 12660573Skris char *buf_start; /* start of buffer pool */ 127124208Sdes }; 128124208Sdes 129124208Sdes struct rx_elem { 13098675Sdes DWORD size; /* size copied to this element */ 13198675Sdes BYTE data[ETH_MAX+10]; /* add some margin. data[0] should be */ 13298675Sdes }; /* dword aligned */ 13398675Sdes 13492555Sdes extern BYTE *get_rxbuf (int len) LOCKED_FUNC; 13592555Sdes extern int peek_rxbuf (BYTE **buf); 13660573Skris extern int release_rxbuf (BYTE *buf); 137124208Sdes 138124208Sdes#else 139124208Sdes #define LOCKED_VAR 140124208Sdes #define LOCKED_FUNC 141124208Sdes 142124208Sdes struct device { 143124208Sdes const char *name; 14457429Smarkm const char *long_name; 14557429Smarkm DWORD base_addr; /* device I/O address */ 14657429Smarkm int irq; /* device IRQ number */ 14757429Smarkm int dma; /* DMA channel */ 14857429Smarkm DWORD mem_start; /* shared mem start */ 14957429Smarkm DWORD mem_end; /* shared mem end */ 15057429Smarkm DWORD rmem_start; /* shmem "recv" start */ 15169587Sgreen DWORD rmem_end; /* shared "recv" end */ 152106121Sdes 15369587Sgreen struct device *next; /* next device in list */ 15469587Sgreen 15557429Smarkm /* interface service routines */ 15657429Smarkm int (*probe)(struct device *dev); 157137015Sdes int (*open) (struct device *dev); 158137015Sdes void (*close)(struct device *dev); 159137015Sdes int (*xmit) (struct device *dev, const void *buf, int len); 160137015Sdes void *(*get_stats)(struct device *dev); 16192555Sdes void (*set_multicast_list)(struct device *dev); 16257429Smarkm 16357429Smarkm /* driver-to-pcap receive buffer routines */ 16457429Smarkm int (*copy_rx_buf) (BYTE *buf, int max); /* rx-copy (pktdrvr only) */ 16557429Smarkm BYTE *(*get_rx_buf) (int len); /* rx-buf fetch/enqueue */ 16657429Smarkm int (*peek_rx_buf) (BYTE **buf); /* rx-non-copy at queue */ 16757429Smarkm int (*release_rx_buf) (BYTE *buf); /* release after peek */ 168124208Sdes 16957429Smarkm WORD flags; /* Low-level status flags. */ 17057429Smarkm void *priv; /* private data */ 17157429Smarkm }; 17257429Smarkm 17357429Smarkm /* 17457429Smarkm * Network device statistics 17592555Sdes */ 17657429Smarkm typedef struct net_device_stats { 17757429Smarkm DWORD rx_packets; /* total packets received */ 17857429Smarkm DWORD tx_packets; /* total packets transmitted */ 17957429Smarkm DWORD rx_bytes; /* total bytes received */ 18057429Smarkm DWORD tx_bytes; /* total bytes transmitted */ 18157429Smarkm DWORD rx_errors; /* bad packets received */ 18257429Smarkm DWORD tx_errors; /* packet transmit problems */ 18357429Smarkm DWORD rx_dropped; /* no space in Rx buffers */ 18457429Smarkm DWORD tx_dropped; /* no space available for Tx */ 18557429Smarkm DWORD multicast; /* multicast packets received */ 18657429Smarkm 18757429Smarkm /* detailed rx_errors: */ 18857429Smarkm DWORD rx_length_errors; 18957429Smarkm DWORD rx_over_errors; /* recv'r overrun error */ 19057429Smarkm DWORD rx_osize_errors; /* recv'r over-size error */ 19157429Smarkm DWORD rx_crc_errors; /* recv'd pkt with crc error */ 19257429Smarkm DWORD rx_frame_errors; /* recv'd frame alignment error */ 19357429Smarkm DWORD rx_fifo_errors; /* recv'r fifo overrun */ 19457429Smarkm DWORD rx_missed_errors; /* recv'r missed packet */ 19557429Smarkm 19657429Smarkm /* detailed tx_errors */ 19757429Smarkm DWORD tx_aborted_errors; 19898675Sdes DWORD tx_carrier_errors; 19998675Sdes DWORD tx_fifo_errors; 20098675Sdes DWORD tx_heartbeat_errors; 20198675Sdes DWORD tx_window_errors; 20298675Sdes DWORD tx_collisions; 20398675Sdes DWORD tx_jabbers; 20498675Sdes } NET_STATS; 20598675Sdes#endif 20698675Sdes 20798675Sdesextern struct device *active_dev LOCKED_VAR; 20898675Sdesextern const struct device *dev_base LOCKED_VAR; 20998675Sdesextern struct device *probed_dev; 21098675Sdes 21198675Sdesextern int pcap_pkt_debug; 21298675Sdes 21398675Sdesextern void _w32_os_yield (void); /* Watt-32's misc.c */ 21498675Sdes 21598675Sdes#ifdef NDEBUG 21698675Sdes #define PCAP_ASSERT(x) ((void)0) 21798675Sdes 21898675Sdes#else 21998675Sdes void pcap_assert (const char *what, const char *file, unsigned line); 22098675Sdes 22198675Sdes #define PCAP_ASSERT(x) do { \ 22298675Sdes if (!(x)) \ 22398675Sdes pcap_assert (#x, __FILE__, __LINE__); \ 22498675Sdes } while (0) 22598675Sdes#endif 22698675Sdes 22798675Sdes#endif /* __PCAP_DOS_H */ 22898675Sdes