]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/libpcap/pcap-dos.h
Make linux_ptrace() use linux_msg() instead of printf().
[FreeBSD/FreeBSD.git] / contrib / libpcap / pcap-dos.h
1 /*
2  * Internal details for libpcap on DOS.
3  * 32-bit targets: djgpp, Pharlap or DOS4GW.
4  */
5
6 #ifndef __PCAP_DOS_H
7 #define __PCAP_DOS_H
8
9 #ifdef __DJGPP__
10 #include <pc.h>    /* simple non-conio kbhit */
11 #else
12 #include <conio.h>
13 #endif
14
15 typedef int            BOOL;
16 typedef unsigned char  BYTE;
17 typedef unsigned short WORD;
18 typedef unsigned long  DWORD;
19 typedef BYTE           ETHER[6];
20
21 #define ETH_ALEN       sizeof(ETHER)   /* Ether address length */
22 #define ETH_HLEN       (2*ETH_ALEN+2)  /* Ether header length  */
23 #define ETH_MTU        1500
24 #define ETH_MIN        60
25 #define ETH_MAX        (ETH_MTU+ETH_HLEN)
26
27 #ifndef TRUE
28   #define TRUE   1
29   #define FALSE  0
30 #endif
31
32 #define PHARLAP  1
33 #define DJGPP    2
34 #define DOS4GW   4
35
36 #ifdef __DJGPP__
37   #undef  DOSX
38   #define DOSX DJGPP
39 #endif
40
41 #ifdef __WATCOMC__
42   #undef  DOSX
43   #define DOSX DOS4GW
44 #endif
45
46 #ifdef __HIGHC__
47   #include <pharlap.h>
48   #undef  DOSX
49   #define DOSX PHARLAP
50   #define inline
51 #else
52   typedef unsigned int UINT;
53 #endif
54
55
56 #if defined(__GNUC__) || defined(__HIGHC__)
57   typedef unsigned long long  uint64;
58   typedef unsigned long long  QWORD;
59 #endif
60
61 #if defined(__WATCOMC__)
62   typedef unsigned __int64  uint64;
63   typedef unsigned __int64  QWORD;
64 #endif
65
66 #define ARGSUSED(x)  (void) x
67
68 #if defined (__SMALL__) || defined(__LARGE__)
69   #define DOSX 0
70
71 #elif !defined(DOSX)
72   #error DOSX not defined; 1 = PharLap, 2 = djgpp, 4 = DOS4GW
73 #endif
74
75 #ifdef __HIGHC__
76 #define min(a,b) _min(a,b)
77 #define max(a,b) _max(a,b)
78 #endif
79
80 #ifndef min
81 #define min(a,b) ((a) < (b) ? (a) : (b))
82 #endif
83
84 #ifndef max
85 #define max(a,b) ((a) < (b) ? (b) : (a))
86 #endif
87
88 #if !defined(_U_) && defined(__GNUC__)
89 #define _U_  __attribute__((unused))
90 #endif
91
92 #ifndef _U_
93 #define _U_
94 #endif
95
96 #if defined(USE_32BIT_DRIVERS)
97   #include "msdos/pm_drvr/lock.h"
98
99   #ifndef RECEIVE_QUEUE_SIZE
100   #define RECEIVE_QUEUE_SIZE  60
101   #endif
102
103   #ifndef RECEIVE_BUF_SIZE
104   #define RECEIVE_BUF_SIZE   (ETH_MAX+20)
105   #endif
106
107   extern struct device el2_dev     LOCKED_VAR;  /* 3Com EtherLink II */
108   extern struct device el3_dev     LOCKED_VAR;  /*      EtherLink III */
109   extern struct device tc59_dev    LOCKED_VAR;  /* 3Com Vortex Card (?) */
110   extern struct device tc515_dev   LOCKED_VAR;
111   extern struct device tc90x_dev   LOCKED_VAR;
112   extern struct device tc90bcx_dev LOCKED_VAR;
113   extern struct device wd_dev      LOCKED_VAR;
114   extern struct device ne_dev      LOCKED_VAR;
115   extern struct device acct_dev    LOCKED_VAR;
116   extern struct device cs89_dev    LOCKED_VAR;
117   extern struct device rtl8139_dev LOCKED_VAR;
118
119   struct rx_ringbuf {
120          volatile int in_index;   /* queue index head */
121          int          out_index;  /* queue index tail */
122          int          elem_size;  /* size of each element */
123          int          num_elem;   /* number of elements */
124          char        *buf_start;  /* start of buffer pool */
125        };
126
127   struct rx_elem {
128          DWORD size;              /* size copied to this element */
129          BYTE  data[ETH_MAX+10];  /* add some margin. data[0] should be */
130        };                         /* dword aligned */
131
132   extern BYTE *get_rxbuf     (int len) LOCKED_FUNC;
133   extern int   peek_rxbuf    (BYTE **buf);
134   extern int   release_rxbuf (BYTE  *buf);
135
136 #else
137   #define LOCKED_VAR
138   #define LOCKED_FUNC
139
140   struct device {
141          const char *name;
142          const char *long_name;
143          DWORD  base_addr;      /* device I/O address       */
144          int    irq;            /* device IRQ number        */
145          int    dma;            /* DMA channel              */
146          DWORD  mem_start;      /* shared mem start         */
147          DWORD  mem_end;        /* shared mem end           */
148          DWORD  rmem_start;     /* shmem "recv" start       */
149          DWORD  rmem_end;       /* shared "recv" end        */
150
151          struct device *next;   /* next device in list      */
152
153          /* interface service routines */
154          int   (*probe)(struct device *dev);
155          int   (*open) (struct device *dev);
156          void  (*close)(struct device *dev);
157          int   (*xmit) (struct device *dev, const void *buf, int len);
158          void *(*get_stats)(struct device *dev);
159          void  (*set_multicast_list)(struct device *dev);
160
161          /* driver-to-pcap receive buffer routines */
162          int   (*copy_rx_buf) (BYTE *buf, int max); /* rx-copy (pktdrvr only) */
163          BYTE *(*get_rx_buf) (int len);             /* rx-buf fetch/enqueue */
164          int   (*peek_rx_buf) (BYTE **buf);         /* rx-non-copy at queue */
165          int   (*release_rx_buf) (BYTE *buf);       /* release after peek */
166
167          WORD   flags;          /* Low-level status flags. */
168          void  *priv;           /* private data */
169        };
170
171   /*
172    * Network device statistics
173    */
174   typedef struct net_device_stats {
175           DWORD  rx_packets;            /* total packets received       */
176           DWORD  tx_packets;            /* total packets transmitted    */
177           DWORD  rx_bytes;              /* total bytes received         */
178           DWORD  tx_bytes;              /* total bytes transmitted      */
179           DWORD  rx_errors;             /* bad packets received         */
180           DWORD  tx_errors;             /* packet transmit problems     */
181           DWORD  rx_dropped;            /* no space in Rx buffers       */
182           DWORD  tx_dropped;            /* no space available for Tx    */
183           DWORD  multicast;             /* multicast packets received   */
184
185           /* detailed rx_errors: */
186           DWORD  rx_length_errors;
187           DWORD  rx_over_errors;        /* recv'r overrun error         */
188           DWORD  rx_osize_errors;       /* recv'r over-size error       */
189           DWORD  rx_crc_errors;         /* recv'd pkt with crc error    */
190           DWORD  rx_frame_errors;       /* recv'd frame alignment error */
191           DWORD  rx_fifo_errors;        /* recv'r fifo overrun          */
192           DWORD  rx_missed_errors;      /* recv'r missed packet         */
193
194           /* detailed tx_errors */
195           DWORD  tx_aborted_errors;
196           DWORD  tx_carrier_errors;
197           DWORD  tx_fifo_errors;
198           DWORD  tx_heartbeat_errors;
199           DWORD  tx_window_errors;
200           DWORD  tx_collisions;
201           DWORD  tx_jabbers;
202         } NET_STATS;
203 #endif
204
205 extern struct device       *active_dev  LOCKED_VAR;
206 extern const struct device *dev_base    LOCKED_VAR;
207 extern struct device       *probed_dev;
208
209 extern int pcap_pkt_debug;
210
211 extern void _w32_os_yield (void); /* Watt-32's misc.c */
212
213 #ifdef NDEBUG
214   #define PCAP_ASSERT(x) ((void)0)
215
216 #else
217   void pcap_assert (const char *what, const char *file, unsigned line);
218
219   #define PCAP_ASSERT(x) do { \
220                            if (!(x)) \
221                               pcap_assert (#x, __FILE__, __LINE__); \
222                          } while (0)
223 #endif
224
225 #endif  /* __PCAP_DOS_H */