Blame pcap-dos.h

Packit 209cc3
/*
Packit 209cc3
 * Internal details for libpcap on DOS.
Packit 209cc3
 * 32-bit targets: djgpp, Pharlap or DOS4GW.
Packit 209cc3
 */
Packit 209cc3
Packit 209cc3
#ifndef __PCAP_DOS_H
Packit 209cc3
#define __PCAP_DOS_H
Packit 209cc3
Packit 209cc3
#ifdef __DJGPP__
Packit 209cc3
#include <pc.h>    /* simple non-conio kbhit */
Packit 209cc3
#else
Packit 209cc3
#include <conio.h>
Packit 209cc3
#endif
Packit 209cc3
Packit 209cc3
typedef int            BOOL;
Packit 209cc3
typedef unsigned char  BYTE;
Packit 209cc3
typedef unsigned short WORD;
Packit 209cc3
typedef unsigned long  DWORD;
Packit 209cc3
typedef BYTE           ETHER[6];
Packit 209cc3
Packit 209cc3
#define ETH_ALEN       sizeof(ETHER)   /* Ether address length */
Packit 209cc3
#define ETH_HLEN       (2*ETH_ALEN+2)  /* Ether header length  */
Packit 209cc3
#define ETH_MTU        1500
Packit 209cc3
#define ETH_MIN        60
Packit 209cc3
#define ETH_MAX        (ETH_MTU+ETH_HLEN)
Packit 209cc3
Packit 209cc3
#ifndef TRUE
Packit 209cc3
  #define TRUE   1
Packit 209cc3
  #define FALSE  0
Packit 209cc3
#endif
Packit 209cc3
Packit 209cc3
#define PHARLAP  1
Packit 209cc3
#define DJGPP    2
Packit 209cc3
#define DOS4GW   4
Packit 209cc3
Packit 209cc3
#ifdef __DJGPP__
Packit 209cc3
  #undef  DOSX
Packit 209cc3
  #define DOSX DJGPP
Packit 209cc3
#endif
Packit 209cc3
Packit 209cc3
#ifdef __WATCOMC__
Packit 209cc3
  #undef  DOSX
Packit 209cc3
  #define DOSX DOS4GW
Packit 209cc3
#endif
Packit 209cc3
Packit 209cc3
#ifdef __HIGHC__
Packit 209cc3
  #include <pharlap.h>
Packit 209cc3
  #undef  DOSX
Packit 209cc3
  #define DOSX PHARLAP
Packit 209cc3
  #define inline
Packit 209cc3
#else
Packit 209cc3
  typedef unsigned int UINT;
Packit 209cc3
#endif
Packit 209cc3
Packit 209cc3
Packit 209cc3
#if defined(__GNUC__) || defined(__HIGHC__)
Packit 209cc3
  typedef unsigned long long  uint64;
Packit 209cc3
  typedef unsigned long long  QWORD;
Packit 209cc3
#endif
Packit 209cc3
Packit 209cc3
#if defined(__WATCOMC__)
Packit 209cc3
  typedef unsigned __int64  uint64;
Packit 209cc3
  typedef unsigned __int64  QWORD;
Packit 209cc3
#endif
Packit 209cc3
Packit 209cc3
#define ARGSUSED(x)  (void) x
Packit 209cc3
Packit 209cc3
#if defined (__SMALL__) || defined(__LARGE__)
Packit 209cc3
  #define DOSX 0
Packit 209cc3
Packit 209cc3
#elif !defined(DOSX)
Packit 209cc3
  #error DOSX not defined; 1 = PharLap, 2 = djgpp, 4 = DOS4GW
Packit 209cc3
#endif
Packit 209cc3
Packit 209cc3
#ifdef __HIGHC__
Packit 209cc3
#define min(a,b) _min(a,b)
Packit 209cc3
#define max(a,b) _max(a,b)
Packit 209cc3
#endif
Packit 209cc3
Packit 209cc3
#ifndef min
Packit 209cc3
#define min(a,b) ((a) < (b) ? (a) : (b))
Packit 209cc3
#endif
Packit 209cc3
Packit 209cc3
#ifndef max
Packit 209cc3
#define max(a,b) ((a) < (b) ? (b) : (a))
Packit 209cc3
#endif
Packit 209cc3
Packit 209cc3
#if !defined(_U_) && defined(__GNUC__)
Packit 209cc3
#define _U_  __attribute__((unused))
Packit 209cc3
#endif
Packit 209cc3
Packit 209cc3
#ifndef _U_
Packit 209cc3
#define _U_
Packit 209cc3
#endif
Packit 209cc3
Packit 209cc3
#if defined(USE_32BIT_DRIVERS)
Packit 209cc3
  #include "msdos/pm_drvr/lock.h"
Packit 209cc3
Packit 209cc3
  #ifndef RECEIVE_QUEUE_SIZE
Packit 209cc3
  #define RECEIVE_QUEUE_SIZE  60
Packit 209cc3
  #endif
Packit 209cc3
Packit 209cc3
  #ifndef RECEIVE_BUF_SIZE
Packit 209cc3
  #define RECEIVE_BUF_SIZE   (ETH_MAX+20)
Packit 209cc3
  #endif
Packit 209cc3
Packit 209cc3
  extern struct device el2_dev     LOCKED_VAR;  /* 3Com EtherLink II */
Packit 209cc3
  extern struct device el3_dev     LOCKED_VAR;  /*      EtherLink III */
Packit 209cc3
  extern struct device tc59_dev    LOCKED_VAR;  /* 3Com Vortex Card (?) */
Packit 209cc3
  extern struct device tc515_dev   LOCKED_VAR;
Packit 209cc3
  extern struct device tc90x_dev   LOCKED_VAR;
Packit 209cc3
  extern struct device tc90bcx_dev LOCKED_VAR;
Packit 209cc3
  extern struct device wd_dev      LOCKED_VAR;
Packit 209cc3
  extern struct device ne_dev      LOCKED_VAR;
Packit 209cc3
  extern struct device acct_dev    LOCKED_VAR;
Packit 209cc3
  extern struct device cs89_dev    LOCKED_VAR;
Packit 209cc3
  extern struct device rtl8139_dev LOCKED_VAR;
Packit 209cc3
Packit 209cc3
  struct rx_ringbuf {
Packit 209cc3
         volatile int in_index;   /* queue index head */
Packit 209cc3
         int          out_index;  /* queue index tail */
Packit 209cc3
         int          elem_size;  /* size of each element */
Packit 209cc3
         int          num_elem;   /* number of elements */
Packit 209cc3
         char        *buf_start;  /* start of buffer pool */
Packit 209cc3
       };
Packit 209cc3
Packit 209cc3
  struct rx_elem {
Packit 209cc3
         DWORD size;              /* size copied to this element */
Packit 209cc3
         BYTE  data[ETH_MAX+10];  /* add some margin. data[0] should be */
Packit 209cc3
       };                         /* dword aligned */
Packit 209cc3
Packit 209cc3
  extern BYTE *get_rxbuf     (int len) LOCKED_FUNC;
Packit 209cc3
  extern int   peek_rxbuf    (BYTE **buf);
Packit 209cc3
  extern int   release_rxbuf (BYTE  *buf);
Packit 209cc3
Packit 209cc3
#else
Packit 209cc3
  #define LOCKED_VAR
Packit 209cc3
  #define LOCKED_FUNC
Packit 209cc3
Packit 209cc3
  struct device {
Packit 209cc3
         const char *name;
Packit 209cc3
         const char *long_name;
Packit 209cc3
         DWORD  base_addr;      /* device I/O address       */
Packit 209cc3
         int    irq;            /* device IRQ number        */
Packit 209cc3
         int    dma;            /* DMA channel              */
Packit 209cc3
         DWORD  mem_start;      /* shared mem start         */
Packit 209cc3
         DWORD  mem_end;        /* shared mem end           */
Packit 209cc3
         DWORD  rmem_start;     /* shmem "recv" start       */
Packit 209cc3
         DWORD  rmem_end;       /* shared "recv" end        */
Packit 209cc3
Packit 209cc3
         struct device *next;   /* next device in list      */
Packit 209cc3
Packit 209cc3
         /* interface service routines */
Packit 209cc3
         int   (*probe)(struct device *dev);
Packit 209cc3
         int   (*open) (struct device *dev);
Packit 209cc3
         void  (*close)(struct device *dev);
Packit 209cc3
         int   (*xmit) (struct device *dev, const void *buf, int len);
Packit 209cc3
         void *(*get_stats)(struct device *dev);
Packit 209cc3
         void  (*set_multicast_list)(struct device *dev);
Packit 209cc3
Packit 209cc3
         /* driver-to-pcap receive buffer routines */
Packit 209cc3
         int   (*copy_rx_buf) (BYTE *buf, int max); /* rx-copy (pktdrvr only) */
Packit 209cc3
         BYTE *(*get_rx_buf) (int len);             /* rx-buf fetch/enqueue */
Packit 209cc3
         int   (*peek_rx_buf) (BYTE **buf);         /* rx-non-copy at queue */
Packit 209cc3
         int   (*release_rx_buf) (BYTE *buf);       /* release after peek */
Packit 209cc3
Packit 209cc3
         WORD   flags;          /* Low-level status flags. */
Packit 209cc3
         void  *priv;           /* private data */
Packit 209cc3
       };
Packit 209cc3
Packit 209cc3
  /*
Packit 209cc3
   * Network device statistics
Packit 209cc3
   */
Packit 209cc3
  typedef struct net_device_stats {
Packit 209cc3
          DWORD  rx_packets;            /* total packets received       */
Packit 209cc3
          DWORD  tx_packets;            /* total packets transmitted    */
Packit 209cc3
          DWORD  rx_bytes;              /* total bytes received         */
Packit 209cc3
          DWORD  tx_bytes;              /* total bytes transmitted      */
Packit 209cc3
          DWORD  rx_errors;             /* bad packets received         */
Packit 209cc3
          DWORD  tx_errors;             /* packet transmit problems     */
Packit 209cc3
          DWORD  rx_dropped;            /* no space in Rx buffers       */
Packit 209cc3
          DWORD  tx_dropped;            /* no space available for Tx    */
Packit 209cc3
          DWORD  multicast;             /* multicast packets received   */
Packit 209cc3
Packit 209cc3
          /* detailed rx_errors: */
Packit 209cc3
          DWORD  rx_length_errors;
Packit 209cc3
          DWORD  rx_over_errors;        /* recv'r overrun error         */
Packit 209cc3
          DWORD  rx_osize_errors;       /* recv'r over-size error       */
Packit 209cc3
          DWORD  rx_crc_errors;         /* recv'd pkt with crc error    */
Packit 209cc3
          DWORD  rx_frame_errors;       /* recv'd frame alignment error */
Packit 209cc3
          DWORD  rx_fifo_errors;        /* recv'r fifo overrun          */
Packit 209cc3
          DWORD  rx_missed_errors;      /* recv'r missed packet         */
Packit 209cc3
Packit 209cc3
          /* detailed tx_errors */
Packit 209cc3
          DWORD  tx_aborted_errors;
Packit 209cc3
          DWORD  tx_carrier_errors;
Packit 209cc3
          DWORD  tx_fifo_errors;
Packit 209cc3
          DWORD  tx_heartbeat_errors;
Packit 209cc3
          DWORD  tx_window_errors;
Packit 209cc3
          DWORD  tx_collisions;
Packit 209cc3
          DWORD  tx_jabbers;
Packit 209cc3
        } NET_STATS;
Packit 209cc3
#endif
Packit 209cc3
Packit 209cc3
extern struct device       *active_dev  LOCKED_VAR;
Packit 209cc3
extern const struct device *dev_base    LOCKED_VAR;
Packit 209cc3
extern struct device       *probed_dev;
Packit 209cc3
Packit 209cc3
extern int pcap_pkt_debug;
Packit 209cc3
Packit 209cc3
extern void _w32_os_yield (void); /* Watt-32's misc.c */
Packit 209cc3
Packit 209cc3
#ifdef NDEBUG
Packit 209cc3
  #define PCAP_ASSERT(x) ((void)0)
Packit 209cc3
Packit 209cc3
#else
Packit 209cc3
  void pcap_assert (const char *what, const char *file, unsigned line);
Packit 209cc3
Packit 209cc3
  #define PCAP_ASSERT(x) do { \
Packit 209cc3
                           if (!(x)) \
Packit 209cc3
                              pcap_assert (#x, __FILE__, __LINE__); \
Packit 209cc3
                         } while (0)
Packit 209cc3
#endif
Packit 209cc3
Packit 209cc3
#endif  /* __PCAP_DOS_H */