summaryrefslogtreecommitdiff
path: root/tap-win32/types.h
diff options
context:
space:
mode:
Diffstat (limited to 'tap-win32/types.h')
-rwxr-xr-xtap-win32/types.h178
1 files changed, 178 insertions, 0 deletions
diff --git a/tap-win32/types.h b/tap-win32/types.h
new file mode 100755
index 0000000..bdc08e7
--- /dev/null
+++ b/tap-win32/types.h
@@ -0,0 +1,178 @@
+/*
+ * TAP-Win32/TAP-Win64 -- A kernel driver to provide virtual tap
+ * device functionality on Windows.
+ *
+ * This code was inspired by the CIPE-Win32 driver by Damion K. Wilson.
+ *
+ * This source code is Copyright (C) 2002-2010 OpenVPN Technologies, Inc.,
+ * and is released under the GPL version 2 (see below).
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program (see the file COPYING included with this
+ * distribution); if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef TAP_TYPES_DEFINED
+#define TAP_TYPES_DEFINED
+
+typedef struct _Queue
+{
+ ULONG base;
+ ULONG size;
+ ULONG capacity;
+ ULONG max_size;
+ PVOID data[];
+} Queue;
+
+typedef struct _TapAdapter;
+typedef struct _TapPacket;
+
+typedef union _TapAdapterQuery
+{
+ NDIS_HARDWARE_STATUS m_HardwareStatus;
+ NDIS_MEDIUM m_Medium;
+ NDIS_PHYSICAL_MEDIUM m_PhysicalMedium;
+ UCHAR m_MacAddress [6];
+ UCHAR m_Buffer [256];
+ ULONG m_Long;
+ USHORT m_Short;
+ UCHAR m_Byte;
+}
+TapAdapterQuery, *TapAdapterQueryPointer;
+
+typedef struct _TapExtension
+{
+ // TAP device object and packet queues
+ Queue *m_PacketQueue, *m_IrpQueue;
+ PDEVICE_OBJECT m_TapDevice;
+ NDIS_HANDLE m_TapDeviceHandle;
+ ULONG m_TapOpens;
+
+ // Used to lock packet queues
+ NDIS_SPIN_LOCK m_QueueLock;
+ BOOLEAN m_AllocatedSpinlocks;
+
+ // Used to bracket open/close
+ // state changes.
+ MUTEX m_OpenCloseMutex;
+
+ // True if device has been permanently halted
+ BOOLEAN m_Halt;
+
+ // TAP device name
+ unsigned char *m_TapName;
+ UNICODE_STRING m_UnicodeLinkName;
+ BOOLEAN m_CreatedUnicodeLinkName;
+
+ // Used for device status ioctl only
+ const char *m_LastErrorFilename;
+ int m_LastErrorLineNumber;
+ LONG m_NumTapOpens;
+
+ // Flags
+ BOOLEAN m_TapIsRunning;
+ BOOLEAN m_CalledTapDeviceFreeResources;
+
+ // DPC queue for deferred packet injection
+ BOOLEAN m_InjectDpcInitialized;
+ KDPC m_InjectDpc;
+ NDIS_SPIN_LOCK m_InjectLock;
+ Queue *m_InjectQueue;
+}
+TapExtension, *TapExtensionPointer;
+
+typedef struct _TapPacket
+ {
+# define TAP_PACKET_SIZE(data_size) (sizeof (TapPacket) + (data_size))
+# define TP_TUN 0x80000000
+# define TP_SIZE_MASK (~TP_TUN)
+ ULONG m_SizeFlags;
+ UCHAR m_Data []; // m_Data must be the last struct member
+ }
+TapPacket, *TapPacketPointer;
+
+typedef struct _InjectPacket
+ {
+# define INJECT_PACKET_SIZE(data_size) (sizeof (InjectPacket) + (data_size))
+# define INJECT_PACKET_FREE(ib) NdisFreeMemory ((ib), INJECT_PACKET_SIZE ((ib)->m_Size), 0)
+ ULONG m_Size;
+ UCHAR m_Data []; // m_Data must be the last struct member
+ }
+InjectPacket, *InjectPacketPointer;
+
+typedef struct _TapAdapter
+{
+# define NAME(a) ((a)->m_NameAnsi.Buffer)
+ ANSI_STRING m_NameAnsi;
+ MACADDR m_MAC;
+ BOOLEAN m_InterfaceIsRunning;
+ NDIS_HANDLE m_MiniportAdapterHandle;
+ LONG m_Rx, m_Tx, m_RxErr, m_TxErr;
+#if PACKET_TRUNCATION_CHECK
+ LONG m_RxTrunc, m_TxTrunc;
+#endif
+ NDIS_MEDIUM m_Medium;
+ ULONG m_Lookahead;
+ ULONG m_MTU;
+
+ // TRUE if adapter should always be
+ // "connected" even when device node
+ // is not open by a userspace process.
+ BOOLEAN m_MediaStateAlwaysConnected;
+
+ // TRUE if device is "connected"
+ BOOLEAN m_MediaState;
+
+ // Adapter power state
+ char m_DeviceState;
+
+ // Info for point-to-point mode
+ BOOLEAN m_tun;
+ IPADDR m_localIP;
+ IPADDR m_remoteNetwork;
+ IPADDR m_remoteNetmask;
+ ETH_HEADER m_TapToUser;
+ ETH_HEADER m_UserToTap;
+ ETH_HEADER m_UserToTap_IPv6; // same as UserToTap but proto=ipv6
+ MACADDR m_MAC_Broadcast;
+
+ // Used for DHCP server masquerade
+ BOOLEAN m_dhcp_enabled;
+ IPADDR m_dhcp_addr;
+ ULONG m_dhcp_netmask;
+ IPADDR m_dhcp_server_ip;
+ BOOLEAN m_dhcp_server_arp;
+ MACADDR m_dhcp_server_mac;
+ ULONG m_dhcp_lease_time;
+ UCHAR m_dhcp_user_supplied_options_buffer[DHCP_USER_SUPPLIED_OPTIONS_BUFFER_SIZE];
+ ULONG m_dhcp_user_supplied_options_buffer_len;
+ BOOLEAN m_dhcp_received_discover;
+ ULONG m_dhcp_bad_requests;
+
+ // Help to tear down the adapter by keeping
+ // some state information on allocated
+ // resources.
+ BOOLEAN m_CalledAdapterFreeResources;
+ BOOLEAN m_RegisteredAdapterShutdownHandler;
+
+ // Multicast list info
+ NDIS_SPIN_LOCK m_MCLock;
+ BOOLEAN m_MCLockAllocated;
+ ULONG m_MCListSize;
+ MC_LIST m_MCList;
+
+ // Information on the TAP device
+ TapExtension m_Extension;
+} TapAdapter, *TapAdapterPointer;
+
+#endif