pcap-dos.h 6.7 KB

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