mirror of
https://github.com/SDL-Hercules-390/hyperion.git
synced 2026-04-13 07:25:22 +02:00
294 lines
16 KiB
C
294 lines
16 KiB
C
/* TT32API.H (c) Copyright Software Development Laboratories, 2002-2011 */
|
|
/* TunTap32 DLL exported functions interface */
|
|
/* */
|
|
/* Released under "The Q Public License Version 1" */
|
|
/* (http://www.hercules-390.org/herclic.html) as modifications to */
|
|
/* Hercules. */
|
|
|
|
// Copyright (C) 2002-2013, Software Development Laboratories, "Fish" (David B. Trout)
|
|
/////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// TT32API.h -- TunTap32 DLL exported functions interface
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// T U N T A P 3 2 . D L L
|
|
//
|
|
// EXPORTED FUNCTION DEFINITIONS
|
|
//
|
|
// These functions provide a 'C' language interface and can be called from
|
|
// any type of app that can access a DLL: VB, C/C++, PowerBuilder, etc.
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Change History:
|
|
//
|
|
// 12/22/01 1.0.0 Created.
|
|
// 07/20/02 2.0.0 JAP: LCS modifications/enhancements.
|
|
// 07/02/03 2.0.2 use std 'uint32_t' type instead of Win32 DWORD
|
|
// 06/16/04 2.1.0 'ex' variant functions to pass errno value.
|
|
// 11/01/03 3.1.0 TT32MINMTU, TT32MAXMTU, TT32DEFMTU
|
|
// 11/03/03 3.1.0 TT32_MAX_MULTICAST_LIST_ENTRIES
|
|
// 12/31/03 3.1.0 support for deprecated functions dropped/deleted.
|
|
// 02/05/06 3.1.0 New exported function: 'tuntap32_build_herc_iface_mac'
|
|
// 02/14/06 3.1.0 Added #defines for TUNTAP32_DLLNAME
|
|
// 04/14/06 3.1.0 Added 'tuntap32_calc_checksum' function
|
|
// 07/02/06 3.1.2 Added #defines for min/max/def buffer sizes
|
|
// 08/09/06 3.1.6 Added 'tuntap32_calc_checksum' function
|
|
// mm/dd/07 3.2.0 VS2005 + x64 + WinPCap 4.0
|
|
// 11/06/08 3.3.0 VS2008 + auto-link pragma.
|
|
// 11/06/08 3.3.0 Additional counters...
|
|
// 05/18/10 3.3.0 Additional zero MAC address counters...
|
|
// 01/17/11 3.3.0 Added socketpair
|
|
// 02/03/11 3.3.0 _O_TT32NOTIFY packet arrival notification option
|
|
// 03/08/11 3.3.0 tuntap32_beg_write_multi, tuntap32_end_write_multi
|
|
// 03/10/11 3.3.0 Add '_ex' entry-points for calc_checksum,
|
|
// calc_inet_checksum and build_herc_iface_mac.
|
|
// 02/21/13 3.3.0 Added #include for new "TT32if.h" header
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef _TT32API_H_
|
|
#define _TT32API_H_
|
|
|
|
#include "TT32if.h"
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////
|
|
// TunTap32.dll name
|
|
/////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
#if defined(_WIN64)
|
|
#if defined(_UNICODE) || defined(UNICODE)
|
|
#if defined(_DEBUG) || defined(DEBUG)
|
|
#define BASE_TUNTAP32_NAME "TunTap64UD"
|
|
#else
|
|
#define BASE_TUNTAP32_NAME "TunTap64U"
|
|
#endif
|
|
#else
|
|
#if defined(_DEBUG) || defined(DEBUG)
|
|
#define BASE_TUNTAP32_NAME "TunTap64D"
|
|
#else
|
|
#define BASE_TUNTAP32_NAME "TunTap64"
|
|
#endif
|
|
#endif
|
|
#else
|
|
#if defined(_UNICODE) || defined(UNICODE)
|
|
#if defined(_DEBUG) || defined(DEBUG)
|
|
#define BASE_TUNTAP32_NAME "TunTap32UD"
|
|
#else
|
|
#define BASE_TUNTAP32_NAME "TunTap32U"
|
|
#endif
|
|
#else
|
|
#if defined(_DEBUG) || defined(DEBUG)
|
|
#define BASE_TUNTAP32_NAME "TunTap32D"
|
|
#else
|
|
#define BASE_TUNTAP32_NAME "TunTap32"
|
|
#endif
|
|
#endif
|
|
#endif
|
|
|
|
#if defined( _MSC_VER ) && defined( AUTOLINK_TUNTAP32_LIB )
|
|
#pragma comment ( lib, BASE_TUNTAP32_NAME ".lib" )
|
|
#endif
|
|
#define TUNTAP32_DLLNAME BASE_TUNTAP32_NAME ".dll"
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////
|
|
// TunTap32 structures, #defines and typedefs, etc...
|
|
/////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
{
|
|
#endif
|
|
|
|
// Flags...
|
|
|
|
#define _O_TT32NOTIFY 0x08000000 // open flag: notify when packets arrive
|
|
|
|
// Constants...
|
|
|
|
#define TT32MINMTU ( 60) // minimum MTU value
|
|
#define TT32DEFMTU ( 1500) // default MTU value
|
|
#define TT32MAXMTU ((64*1024)-14) // maximum MTU value (14 == eth_hdr_size)
|
|
|
|
#define TT32_MAX_MULTICAST_LIST_ENTRIES (32)
|
|
|
|
// ioctl codes...
|
|
|
|
#define TUNSETNOCSUM _IOW('T', 200, int) // (UNSUPPORTED)
|
|
#define TUNSETDEBUG _IOW('T', 201, int) // (UNSUPPORTED)
|
|
#define TUNSETIFF _IOW('T', 202, int) // Set TUN/TAP Flags
|
|
#define TUNSETPERSIST _IOW('T', 203, int) // (UNSUPPORTED)
|
|
#define TUNSETOWNER _IOW('T', 204, int) // (UNSUPPORTED)
|
|
|
|
#define TT32SDEVBUFF _IOW('T', 220, int) // Set Kernel buffer size
|
|
#define TT32GDEVBUFF _IOR('T', 220, int) // Get Kernel buffer size
|
|
#define TT32SIOBUFF _IOW('T', 221, int) // Set Read buffer size
|
|
#define TT32GIOBUFF _IOR('T', 221, int) // Get Read buffer size
|
|
#define TT32STIMEOUT _IOW('T', 222, int) // Set Read timeout value
|
|
#define TT32GTIMEOUT _IOR('T', 222, int) // Get Read timeout value
|
|
#define TT32GSTATS _IOR('T', 223, int) // Retrieve statistics
|
|
|
|
struct tt32ctl // ioctl request structure
|
|
{
|
|
union
|
|
{
|
|
char ctln_name[IFNAMSIZ]; // iface name (e.g. "tap0", "tun1", etc)
|
|
} tt32_ctln;
|
|
|
|
union
|
|
{
|
|
int ctlu_devbuffsize; // Kernel buffer size (def: 1M)
|
|
int ctlu_iobuffsize; // Read buffer size (def: 64K)
|
|
int ctlu_readtimeout; // Read timeout value (def: 5 secs)
|
|
} tt32_ctlu;
|
|
};
|
|
|
|
#define tt32ctl_name tt32_ctln.ctln_name
|
|
#define tt32ctl_devbuffsize tt32_ctlu.ctlu_devbuffsize
|
|
#define tt32ctl_iobuffsize tt32_ctlu.ctlu_iobuffsize
|
|
#define tt32ctl_readtimeout tt32_ctlu.ctlu_readtimeout
|
|
|
|
// WinPCap device driver capture buffer sizes
|
|
|
|
#define MIN_CAPTURE_BUFFSIZE (64*1024) // minimum = 64K
|
|
#define DEF_CAPTURE_BUFFSIZE (1*1024*1024) // default = 1M
|
|
#define MAX_CAPTURE_BUFFSIZE (16*1024*1024) // maximum = 16M
|
|
|
|
// FishPack I/O buffer sizes
|
|
|
|
#define MIN_PACKET_BUFFSIZE (16*1024) // minimum = 16K
|
|
#define DEF_PACKET_BUFFSIZE (1*64*1024) // default = 64K
|
|
#define MAX_PACKET_BUFFSIZE (1024*1024) // maximum = 1M
|
|
|
|
typedef struct TT32STATS
|
|
{
|
|
uint32_t dwStructSize; // size of this structure
|
|
uint32_t dwKernelBuffSize; // size of kernel capture buffer
|
|
uint32_t dwReadBuffSize; // size of dll I/O buffer
|
|
uint32_t dwMaxBytesReceived; // max dll I/O bytes received
|
|
|
|
int64_t n64WriteCalls; // total #of write requests
|
|
int64_t n64WriteIOs; // total #of write I/Os
|
|
|
|
int64_t n64ReadCalls; // total #of read requests
|
|
int64_t n64ReadIOs; // total #of read I/Os
|
|
|
|
int64_t n64PacketsRead; // total #of packets read
|
|
int64_t n64PacketsWritten; // total #of packets written
|
|
|
|
int64_t n64BytesRead; // total #of bytes read
|
|
int64_t n64BytesWritten; // total #of bytes written
|
|
|
|
int64_t n64InternalPackets; // total #of packets handled internally
|
|
int64_t n64IgnoredPackets; // total #of packets ignored
|
|
|
|
// New version 3.3 counters...
|
|
|
|
int64_t n64OwnPacketsIgnored; // total #of packets read with src MAC == our MAC
|
|
int64_t n64ZeroMACPacketsRead; // total #of packets read with dst MAC all zeros
|
|
int64_t n64ZeroMACPacketsWritten; // total #of packets written with dst MAC all zeros
|
|
int64_t n64From0MACPacketsRead; // total #of packets read with src MAC all zeros
|
|
int64_t n64From0MACPacketsWritten; // total #of packets written with src MAC all zeros
|
|
}
|
|
TT32STATS, *PTT32STATS;
|
|
|
|
|
|
#ifndef EXPORT
|
|
#define EXPORT // we must be importing instead of exporting)
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////
|
|
// TunTap32.dll exported functions...
|
|
/////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
typedef void (__cdecl *ptr_to_print_debug_string_func)(const char* debug_string);
|
|
|
|
extern const char* WINAPI EXPORT tuntap32_copyright_string ();
|
|
extern const char* WINAPI EXPORT tuntap32_version_string ();
|
|
extern void WINAPI EXPORT tuntap32_version_numbers (int* major, int* inter, int* minor, int* build);
|
|
extern int WINAPI EXPORT tuntap32_set_debug_output_func (ptr_to_print_debug_string_func pfn);
|
|
extern int WINAPI EXPORT tuntap32_open (char* gatewaydev, int flags);
|
|
extern int WINAPI EXPORT tuntap32_write (int fd, u_char* buffer, u_long len);
|
|
extern int WINAPI EXPORT tuntap32_beg_write_multi (int fd, u_long bufsiz); // (WinPCap v4.1+ only)
|
|
extern int WINAPI EXPORT tuntap32_end_write_multi (int fd); // (WinPCap v4.1+ only)
|
|
extern int WINAPI EXPORT tuntap32_read (int fd, u_char* buffer, u_long len);
|
|
extern int WINAPI EXPORT tuntap32_close (int fd);
|
|
extern int WINAPI EXPORT tuntap32_ioctl (int fd, int request, char* argp);
|
|
extern int WINAPI EXPORT tuntap32_get_stats (int fd, TT32STATS* stats);
|
|
extern const char* WINAPI EXPORT tuntap32_get_default_iface ();
|
|
extern void WINAPI EXPORT tuntap32_build_herc_iface_mac (u_char* mac, const u_char* ip);
|
|
extern u_short WINAPI EXPORT tuntap32_calc_inet_checksum (u_char* buffer, u_long bytes);
|
|
extern u_short WINAPI EXPORT tuntap32_calc_checksum (u_char* buffer, u_long bytes);
|
|
extern int WINAPI EXPORT tuntap32_socketpair (int domain, int type, int protocol, int socket_vector[2]);
|
|
|
|
// (functions to work around an as-yet unidentified/unresolved 'errno' bug)
|
|
|
|
extern const char* WINAPI EXPORT tuntap32_copyright_string_ex ( int* eno);
|
|
extern const char* WINAPI EXPORT tuntap32_version_string_ex ( int* eno);
|
|
extern void WINAPI EXPORT tuntap32_version_numbers_ex (int* major, int* inter, int* minor, int* build, int* eno);
|
|
extern int WINAPI EXPORT tuntap32_set_debug_output_func_ex (ptr_to_print_debug_string_func pfn, int* eno);
|
|
extern int WINAPI EXPORT tuntap32_open_ex (char* gatewaydev, int flags, int* eno);
|
|
extern int WINAPI EXPORT tuntap32_write_ex (int fd, u_char* buffer, u_long len, int* eno);
|
|
extern int WINAPI EXPORT tuntap32_beg_write_multi_ex (int fd, u_long bufsiz, int* eno); // (WinPCap v4.1+ only)
|
|
extern int WINAPI EXPORT tuntap32_end_write_multi_ex (int fd, int* eno); // (WinPCap v4.1+ only)
|
|
extern int WINAPI EXPORT tuntap32_read_ex (int fd, u_char* buffer, u_long len, int* eno);
|
|
extern int WINAPI EXPORT tuntap32_close_ex (int fd, int* eno);
|
|
extern int WINAPI EXPORT tuntap32_ioctl_ex (int fd, int request, char* argp, int* eno);
|
|
extern int WINAPI EXPORT tuntap32_get_stats_ex (int fd, TT32STATS* stats, int* eno);
|
|
extern const char* WINAPI EXPORT tuntap32_get_default_iface_ex ( int* eno);
|
|
extern void WINAPI EXPORT tuntap32_build_herc_iface_mac_ex (u_char* mac, const u_char* ip, int* eno);
|
|
extern u_short WINAPI EXPORT tuntap32_calc_inet_checksum_ex (u_char* buffer, u_long bytes, int* eno);
|
|
extern u_short WINAPI EXPORT tuntap32_calc_checksum_ex (u_char* buffer, u_long bytes, int* eno);
|
|
extern int WINAPI EXPORT tuntap32_socketpair_ex (int domain, int type, int protocol, int socket_vector[2], int* eno);
|
|
|
|
// (in case they want to use LoadLibrary and GetProcAddress instead)
|
|
|
|
typedef const char* (WINAPI *ptuntap32_copyright_string) ();
|
|
typedef const char* (WINAPI *ptuntap32_version_string) ();
|
|
typedef void (WINAPI *ptuntap32_version_numbers) (int*,int*,int*,int*);
|
|
typedef int (WINAPI *ptuntap32_set_debug_output_func) (ptr_to_print_debug_string_func);
|
|
typedef int (WINAPI *ptuntap32_open) (char*,int);
|
|
typedef int (WINAPI *ptuntap32_write) (int,u_char*,u_long);
|
|
typedef int (WINAPI *ptuntap32_beg_write_multi) (int fd, u_long bufsiz); // (WinPCap v4.1+ only)
|
|
typedef int (WINAPI *ptuntap32_end_write_multi) (int fd); // (WinPCap v4.1+ only)
|
|
typedef int (WINAPI *ptuntap32_read) (int,u_char*,u_long);
|
|
typedef int (WINAPI *ptuntap32_close) (int);
|
|
typedef int (WINAPI *ptuntap32_ioctl) (int,int,char*);
|
|
typedef int (WINAPI *ptuntap32_get_stats) (int fd, TT32STATS* stats);
|
|
typedef const char* (WINAPI *ptuntap32_get_default_iface) ();
|
|
typedef void (WINAPI *ptuntap32_build_herc_iface_mac) (u_char* mac, const u_char* ip);
|
|
typedef u_short (WINAPI *ptuntap32_calc_inet_checksum) (u_char*, u_long);
|
|
typedef u_short (WINAPI *ptuntap32_calc_checksum) (u_char*, u_long);
|
|
typedef int (WINAPI *ptuntap32_socketpair) (int domain, int type, int protocol, int socket_vector[2]);
|
|
|
|
// (functions to work around an as-yet unidentified/unresolved 'errno' bug)
|
|
|
|
typedef const char* (WINAPI *ptuntap32_copyright_string_ex) ( int* eno);
|
|
typedef const char* (WINAPI *ptuntap32_version_string_ex) ( int* eno);
|
|
typedef void (WINAPI *ptuntap32_version_numbers_ex) (int* major, int* inter, int* minor, int* build, int* eno);
|
|
typedef int (WINAPI *ptuntap32_set_debug_output_func_ex) (ptr_to_print_debug_string_func pfn, int* eno);
|
|
typedef int (WINAPI *ptuntap32_open_ex) (char* gatewaydev, int flags, int* eno);
|
|
typedef int (WINAPI *ptuntap32_write_ex) (int fd, u_char* buffer, u_long len, int* eno);
|
|
typedef int (WINAPI *ptuntap32_beg_write_multi_ex) (int fd, u_long bufsiz, int* eno); // (WinPCap v4.1+ only)
|
|
typedef int (WINAPI *ptuntap32_end_write_multi_ex) (int fd, int* eno); // (WinPCap v4.1+ only)
|
|
typedef int (WINAPI *ptuntap32_read_ex) (int fd, u_char* buffer, u_long len, int* eno);
|
|
typedef int (WINAPI *ptuntap32_close_ex) (int fd, int* eno);
|
|
typedef int (WINAPI *ptuntap32_ioctl_ex) (int fd, int request, char* argp, int* eno);
|
|
typedef int (WINAPI *ptuntap32_get_stats_ex) (int fd, TT32STATS* stats, int* eno);
|
|
typedef const char* (WINAPI *ptuntap32_get_default_iface_ex) ( int* eno);
|
|
typedef void (WINAPI *ptuntap32_build_herc_iface_mac_ex) (u_char* mac, const u_char* ip, int* eno);
|
|
typedef u_short (WINAPI *ptuntap32_calc_inet_checksum_ex) (u_char*, u_long, int* eno);
|
|
typedef u_short (WINAPI *ptuntap32_calc_checksum_ex) (u_char*, u_long, int* eno);
|
|
typedef int (WINAPI *ptuntap32_socketpair_ex) (int domain, int type, int protocol, int socket_vector[2], int* eno);
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* _TT32API_H_ */
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////
|