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