1 // Copyright (c) 2002-2008, Software Development Laboratories, "Fish" (David B. Trout) 2 ///////////////////////////////////////////////////////////////////////////////////////// 3 // 4 // TT32API.h -- TunTap32 DLL exported functions interface 5 // 6 ///////////////////////////////////////////////////////////////////////////////////////// 7 // 8 // T U N T A P 3 2 . D L L 9 // 10 // EXPORTED FUNCTION DEFINITIONS 11 // 12 // These functions provide a 'C' language interface and can be called from 13 // any type of app that can access a DLL: VB, C/C++, PowerBuilder, etc. 14 // 15 ///////////////////////////////////////////////////////////////////////////////////////// 16 // 17 // Change History: 18 // 19 // 12/22/01 1.0.0 Created. 20 // 07/20/02 2.0.0 JAP: LCS modifications/enhancements. 21 // 07/02/03 2.0.2 use std 'uint32_t' type instead of Win32 DWORD 22 // 06/16/04 2.1.0 'ex' variant functions to pass errno value. 23 // 11/01/03 3.1.0 TT32MINMTU, TT32MAXMTU, TT32DEFMTU 24 // 11/03/03 3.1.0 TT32_MAX_MULTICAST_LIST_ENTRIES 25 // 12/31/03 3.1.0 support for deprecated functions dropped/deleted. 26 // 02/05/06 3.1.0 New exported function: 'tuntap32_build_herc_iface_mac' 27 // 02/14/06 3.1.0 Added #defines for TUNTAP32_DLLNAME 28 // 04/14/06 3.1.0 Added 'tuntap32_calc_checksum' function 29 // 07/02/06 3.1.2 Added #defines for min/max/def buffer sizes 30 // 08/09/06 3.1.6 Added 'tuntap32_calc_checksum' function 31 // mm/dd/07 3.2.0 VS2005 + x64 + WinPCap 4.0 32 // 11/06/08 3.3.0 VS2008 + auto-link pragma. 33 // 11/06/08 3.3.0 Additional counters... 34 // 35 ////////////////////////////////////////////////////////////////////////////////////////// 36 37 #ifndef _TT32API_H_ 38 #define _TT32API_H_ 39 40 ///////////////////////////////////////////////////////////////////////////////////////// 41 // TunTap32.dll name 42 ///////////////////////////////////////////////////////////////////////////////////////// 43 44 #if defined(_WIN64) 45 #if defined(_UNICODE) || defined(UNICODE) 46 #if defined(_DEBUG) || defined(DEBUG) 47 #define BASE_TUNTAP32_NAME "TunTap64UD" 48 #else 49 #define BASE_TUNTAP32_NAME "TunTap64U" 50 #endif 51 #else 52 #if defined(_DEBUG) || defined(DEBUG) 53 #define BASE_TUNTAP32_NAME "TunTap64D" 54 #else 55 #define BASE_TUNTAP32_NAME "TunTap64" 56 #endif 57 #endif 58 #else 59 #if defined(_UNICODE) || defined(UNICODE) 60 #if defined(_DEBUG) || defined(DEBUG) 61 #define BASE_TUNTAP32_NAME "TunTap32UD" 62 #else 63 #define BASE_TUNTAP32_NAME "TunTap32U" 64 #endif 65 #else 66 #if defined(_DEBUG) || defined(DEBUG) 67 #define BASE_TUNTAP32_NAME "TunTap32D" 68 #else 69 #define BASE_TUNTAP32_NAME "TunTap32" 70 #endif 71 #endif 72 #endif 73 74 #if defined( _MSC_VER ) && defined( AUTOLINK_TUNTAP32_LIB ) 75 #pragma comment ( lib, BASE_TUNTAP32_NAME ".lib" ) 76 #endif 77 #define TUNTAP32_DLLNAME BASE_TUNTAP32_NAME ".dll" 78 79 ///////////////////////////////////////////////////////////////////////////////////////// 80 // TunTap32 structures, #defines and typedefs, etc... 81 ///////////////////////////////////////////////////////////////////////////////////////// 82 83 #ifdef __cplusplus 84 extern "C" 85 { 86 #endif 87 88 #define TT32MINMTU ( 60) // minimum MTU value 89 #define TT32DEFMTU ( 1500) // default MTU value 90 #define TT32MAXMTU ((64*1024)-14) // maximum MTU value (14 == eth_hdr_size) 91 92 #define TT32_MAX_MULTICAST_LIST_ENTRIES (32) 93 94 #define TT32SDEVBUFF _IOW('T', 220, int) 95 #define TT32GDEVBUFF _IOR('T', 220, int) 96 #define TT32SIOBUFF _IOW('T', 221, int) 97 #define TT32GIOBUFF _IOR('T', 221, int) 98 #define TT32STIMEOUT _IOW('T', 222, int) 99 #define TT32GTIMEOUT _IOR('T', 222, int) 100 #define TT32GSTATS _IOR('T', 223, int) 101 102 struct tt32ctl 103 { 104 union 105 { 106 char ctln_name[IFNAMSIZ]; // iface name (e.g. "tun0") 107 } tt32_ctln; 108 109 union 110 { 111 int ctlu_devbuffsize; // Kernel buffer size 112 int ctlu_iobuffsize; // Read buffer size 113 int ctlu_readtimeout; // Read timeout value 114 } tt32_ctlu; 115 }; 116 117 #define tt32ctl_name tt32_ctln.ctln_name 118 #define tt32ctl_devbuffsize tt32_ctlu.ctlu_devbuffsize 119 #define tt32ctl_iobuffsize tt32_ctlu.ctlu_iobuffsize 120 #define tt32ctl_readtimeout tt32_ctlu.ctlu_readtimeout 121 122 // WinPCap device driver capture buffer sizes 123 124 #define MIN_CAPTURE_BUFFSIZE (64*1024) // minimum = 64K 125 #define DEF_CAPTURE_BUFFSIZE (1*1024*1024) // default = 1M 126 #define MAX_CAPTURE_BUFFSIZE (16*1024*1024) // maximum = 16M 127 128 // FishPack I/O buffer sizes 129 130 #define MIN_PACKET_BUFFSIZE (16*1024) // minimum = 16K 131 #define DEF_PACKET_BUFFSIZE (1*64*1024) // default = 64K 132 #define MAX_PACKET_BUFFSIZE (1024*1024) // maximum = 1M 133 134 typedef struct TT32STATS 135 { 136 uint32_t dwStructSize; // size of this structure 137 uint32_t dwKernelBuffSize; // size of kernel capture buffer 138 uint32_t dwReadBuffSize; // size of dll I/O buffer 139 uint32_t dwMaxBytesReceived; // max dll I/O bytes received 140 141 int64_t n64WriteCalls; // total #of write requests 142 int64_t n64WriteIOs; // total #of write I/Os 143 144 int64_t n64ReadCalls; // total #of read requests 145 int64_t n64ReadIOs; // total #of read I/Os 146 147 int64_t n64PacketsRead; // total #of packets read 148 int64_t n64PacketsWritten; // total #of packets written 149 150 int64_t n64BytesRead; // total #of bytes read 151 int64_t n64BytesWritten; // total #of bytes written 152 153 int64_t n64InternalPackets; // total #of packets handled internally 154 int64_t n64IgnoredPackets; // total #of packets ignored 155 156 // New version 3.3 counters... 157 158 int64_t n64OwnPacketsIgnored; // total #of packets read with our source MAC 159 int64_t n64ZeroMACPacketsRead; // total #of packets read with dest MAC all zeros 160 int64_t n64ZeroMACPacketsWritten; // total #of packets written with dest MAC all zeros 161 } 162 TT32STATS, *PTT32STATS; 163 164 165 #ifndef EXPORT 166 #define EXPORT // we must be importing instead of exporting) 167 #endif 168 169 ///////////////////////////////////////////////////////////////////////////////////////// 170 // TunTap32.dll exported functions... 171 ///////////////////////////////////////////////////////////////////////////////////////// 172 173 typedef void (__cdecl *ptr_to_print_debug_string_func)(const char* debug_string); 174 175 extern const char* WINAPI EXPORT tuntap32_copyright_string (); 176 extern const char* WINAPI EXPORT tuntap32_version_string (); 177 extern void WINAPI EXPORT tuntap32_version_numbers (int* major, int* inter, int* minor, int* build); 178 extern int WINAPI EXPORT tuntap32_set_debug_output_func (ptr_to_print_debug_string_func pfn); 179 extern int WINAPI EXPORT tuntap32_open (char* gatewaydev, int flags); 180 extern int WINAPI EXPORT tuntap32_write (int fd, u_char* buffer, u_long len); 181 extern int WINAPI EXPORT tuntap32_read (int fd, u_char* buffer, u_long len); 182 extern int WINAPI EXPORT tuntap32_close (int fd); 183 extern int WINAPI EXPORT tuntap32_ioctl (int fd, int request, char* argp); 184 extern int WINAPI EXPORT tuntap32_get_stats (int fd, TT32STATS* stats); 185 extern const char* WINAPI EXPORT tuntap32_get_default_iface (); 186 extern void WINAPI EXPORT tuntap32_build_herc_iface_mac (u_char* mac, const u_char* ip); 187 extern u_short WINAPI EXPORT tuntap32_calc_inet_checksum (u_char* buffer, u_long bytes); 188 extern u_short WINAPI EXPORT tuntap32_calc_checksum (u_char* buffer, u_long bytes); 189 190 // (functions to work around an as-yet unidentified/unresolved 'errno' bug) 191 192 extern const char* WINAPI EXPORT tuntap32_copyright_string_ex ( int* eno); 193 extern const char* WINAPI EXPORT tuntap32_version_string_ex ( int* eno); 194 extern void WINAPI EXPORT tuntap32_version_numbers_ex (int* major, int* inter, int* minor, int* build, int* eno); 195 extern int WINAPI EXPORT tuntap32_set_debug_output_func_ex (ptr_to_print_debug_string_func pfn, int* eno); 196 extern int WINAPI EXPORT tuntap32_open_ex (char* gatewaydev, int flags, int* eno); 197 extern int WINAPI EXPORT tuntap32_write_ex (int fd, u_char* buffer, u_long len, int* eno); 198 extern int WINAPI EXPORT tuntap32_read_ex (int fd, u_char* buffer, u_long len, int* eno); 199 extern int WINAPI EXPORT tuntap32_close_ex (int fd, int* eno); 200 extern int WINAPI EXPORT tuntap32_ioctl_ex (int fd, int request, char* argp, int* eno); 201 extern int WINAPI EXPORT tuntap32_get_stats_ex (int fd, TT32STATS* stats, int* eno); 202 extern const char* WINAPI EXPORT tuntap32_get_default_iface_ex ( int* eno); 203 204 // (in case they want to use LoadLibrary and GetProcAddress instead) 205 206 typedef const char* (WINAPI *ptuntap32_copyright_string) (); 207 typedef const char* (WINAPI *ptuntap32_version_string) (); 208 typedef void (WINAPI *ptuntap32_version_numbers) (int*,int*,int*,int*); 209 typedef int (WINAPI *ptuntap32_set_debug_output_func) (ptr_to_print_debug_string_func); 210 typedef int (WINAPI *ptuntap32_open) (char*,int); 211 typedef int (WINAPI *ptuntap32_write) (int,u_char*,u_long); 212 typedef int (WINAPI *ptuntap32_read) (int,u_char*,u_long); 213 typedef int (WINAPI *ptuntap32_close) (int); 214 typedef int (WINAPI *ptuntap32_ioctl) (int,int,char*); 215 typedef int (WINAPI *ptuntap32_get_stats) (int fd, TT32STATS* stats); 216 typedef const char* (WINAPI *ptuntap32_get_default_iface) (); 217 typedef void (WINAPI *ptuntap32_build_herc_iface_mac) (u_char* mac, const u_char* ip); 218 typedef u_short (WINAPI *ptuntap32_calc_inet_checksum) (u_char*, u_long); 219 typedef u_short (WINAPI *ptuntap32_calc_checksum) (u_char*, u_long); 220 221 // (functions to work around an as-yet unidentified/unresolved 'errno' bug) 222 223 typedef const char* (WINAPI *ptuntap32_copyright_string_ex) ( int* eno); 224 typedef const char* (WINAPI *ptuntap32_version_string_ex) ( int* eno); 225 typedef void (WINAPI *ptuntap32_version_numbers_ex) (int* major, int* inter, int* minor, int* build, int* eno); 226 typedef int (WINAPI *ptuntap32_set_debug_output_func_ex) (ptr_to_print_debug_string_func pfn, int* eno); 227 typedef int (WINAPI *ptuntap32_open_ex) (char* gatewaydev, int flags, int* eno); 228 typedef int (WINAPI *ptuntap32_write_ex) (int fd, u_char* buffer, u_long len, int* eno); 229 typedef int (WINAPI *ptuntap32_read_ex) (int fd, u_char* buffer, u_long len, int* eno); 230 typedef int (WINAPI *ptuntap32_close_ex) (int fd, int* eno); 231 typedef int (WINAPI *ptuntap32_ioctl_ex) (int fd, int request, char* argp, int* eno); 232 typedef int (WINAPI *ptuntap32_get_stats_ex) (int fd, TT32STATS* stats, int* eno); 233 typedef const char* (WINAPI *ptuntap32_get_default_iface_ex) ( int* eno); 234 235 ///////////////////////////////////////////////////////////////////////////////////////// 236 237 #ifdef __cplusplus 238 } 239 #endif 240 241 #endif /* _TT32API_H_ */ 242 243 ///////////////////////////////////////////////////////////////////////////////////////// 244