2 * Internal details for libpcap on DOS.
3 * 32-bit targets: djgpp, Pharlap or DOS4GW.
10 #include <pc.h> /* simple non-conio kbhit */
16 typedef unsigned char BYTE
;
17 typedef unsigned short WORD
;
18 typedef unsigned long DWORD
;
19 typedef BYTE ETHER
[6];
21 #define ETH_ALEN sizeof(ETHER) /* Ether address length */
22 #define ETH_HLEN (2*ETH_ALEN+2) /* Ether header length */
25 #define ETH_MAX (ETH_MTU+ETH_HLEN)
52 typedef unsigned int UINT
;
56 #if defined(__GNUC__) || defined(__HIGHC__)
57 typedef unsigned long long uint64
;
58 typedef unsigned long long QWORD
;
61 #if defined(__WATCOMC__)
62 typedef unsigned __int64 uint64
;
63 typedef unsigned __int64 QWORD
;
66 #define ARGSUSED(x) (void) x
68 #if defined (__SMALL__) || defined(__LARGE__)
72 #error DOSX not defined; 1 = PharLap, 2 = djgpp, 4 = DOS4GW
76 #define min(a,b) _min(a,b)
77 #define max(a,b) _max(a,b)
81 #define min(a,b) ((a) < (b) ? (a) : (b))
85 #define max(a,b) ((a) < (b) ? (b) : (a))
88 #if !defined(_U_) && defined(__GNUC__)
89 #define _U_ __attribute__((unused))
96 #if defined(USE_32BIT_DRIVERS)
97 #include "msdos/pm_drvr/lock.h"
99 #ifndef RECEIVE_QUEUE_SIZE
100 #define RECEIVE_QUEUE_SIZE 60
103 #ifndef RECEIVE_BUF_SIZE
104 #define RECEIVE_BUF_SIZE (ETH_MAX+20)
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
;
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 */
128 DWORD size
; /* size copied to this element */
129 BYTE data
[ETH_MAX
+10]; /* add some margin. data[0] should be */
130 }; /* dword aligned */
132 extern BYTE
*get_rxbuf (int len
) LOCKED_FUNC
;
133 extern int peek_rxbuf (BYTE
**buf
);
134 extern int release_rxbuf (BYTE
*buf
);
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 */
151 struct device
*next
; /* next device in list */
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
);
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 */
167 WORD flags
; /* Low-level status flags. */
168 void *priv
; /* private data */
172 * Network device statistics
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 */
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 */
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
;
205 extern struct device
*active_dev LOCKED_VAR
;
206 extern const struct device
*dev_base LOCKED_VAR
;
207 extern struct device
*probed_dev
;
209 extern int pcap_pkt_debug
;
211 extern void _w32_os_yield (void); /* Watt-32's misc.c */
214 #define PCAP_ASSERT(x) ((void)0)
217 void pcap_assert (const char *what
, const char *file
, unsigned line
);
219 #define PCAP_ASSERT(x) do { \
221 pcap_assert (#x, __FILE__, __LINE__); \
225 #endif /* __PCAP_DOS_H */