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