1 // SoftEther VPN Source Code - Developer Edition Master Branch 2 // Cedar Communication Module 3 4 5 // VLanWin32.h 6 // Header of VLanWin32.c 7 8 #ifdef OS_WIN32 9 10 #ifndef VLANWIN32_H 11 #define VLANWIN32_H 12 13 #include "CedarType.h" 14 15 #include "VLan.h" 16 17 #include "Mayaqua/Network.h" 18 19 // Routing table tracking timer 20 #define TRACKING_INTERVAL_INITIAL 444 // Initial 21 #define TRACKING_INTERVAL_ADD 444 // Adding value 22 #define TRACKING_INTERVAL_MAX 12345 // Maximum value 23 #define TRACKING_INTERVAL_MAX_RC 87654 // Maximum value (OS which change detection mechanism enabled) 24 25 26 typedef void *HANDLE; 27 28 // Routing tracking state machine 29 struct ROUTE_TRACKING 30 { 31 UINT VLanInterfaceId; 32 ROUTE_ENTRY *RouteToServer; 33 bool RouteToServerAlreadyExists; 34 ROUTE_ENTRY *DefaultGatewayByVLan; 35 ROUTE_ENTRY *VistaDefaultGateway1, *VistaDefaultGateway2, *VistaOldDefaultGatewayByVLan; 36 ROUTE_ENTRY *RouteToDefaultDns; 37 ROUTE_ENTRY *RouteToEight; 38 ROUTE_ENTRY *RouteToNatTServer; 39 ROUTE_ENTRY *RouteToRealServerGlobal; 40 UINT64 NextTrackingTime; 41 UINT64 NextTrackingTimeAdd; 42 UINT64 NextRouteChangeCheckTime; 43 UINT LastRoutingTableHash; 44 QUEUE *DeletedDefaultGateway; 45 UINT OldDefaultGatewayMetric; 46 IP OldDnsServer; 47 bool VistaAndUsingPPP; 48 ROUTE_CHANGE *RouteChange; 49 }; 50 51 // VLAN structure 52 struct VLAN 53 { 54 volatile bool Halt; // Halting flag 55 char *InstanceName; // Instance name 56 char *DeviceNameWin32; // Win32 device name 57 char *EventNameWin32; // Win32 event name 58 HANDLE Handle; // Device driver file 59 HANDLE Event; // Handle of the event 60 void *GetBuffer; // Sent packet capturing buffer 61 UINT CurrentPacketCount; // Packet number to be read next 62 void *PutBuffer; // Buffer for writing received packet 63 ROUTE_TRACKING *RouteState; // Routing tracking state machine 64 }; 65 66 // Instance list 67 struct INSTANCE_LIST 68 { 69 UINT NumInstance; 70 char **InstanceName; 71 }; 72 73 74 // Function prototype 75 VLAN *NewVLan(char *instance_name, VLAN_PARAM *param); 76 void FreeVLan(VLAN *v); 77 CANCEL *VLanGetCancel(VLAN *v); 78 bool VLanGetNextPacket(VLAN *v, void **buf, UINT *size); 79 bool VLanGetPacketsFromDriver(VLAN *v); 80 bool VLanPutPacketsToDriver(VLAN *v); 81 bool VLanPutPacket(VLAN *v, void *buf, UINT size); 82 83 PACKET_ADAPTER *VLanGetPacketAdapter(); 84 bool VLanPaInit(SESSION *s); 85 CANCEL *VLanPaGetCancel(SESSION *s); 86 UINT VLanPaGetNextPacket(SESSION *s, void **data); 87 bool VLanPaPutPacket(SESSION *s, void *data, UINT size); 88 void VLanPaFree(SESSION *s); 89 90 INSTANCE_LIST *GetInstanceList(); 91 void FreeInstanceList(INSTANCE_LIST *n); 92 UINT GetInstanceId(char *name); 93 94 void RouteTrackingStart(SESSION *s); 95 void RouteTrackingStop(SESSION *s, ROUTE_TRACKING *t); 96 void RouteTrackingMain(SESSION *s); 97 98 void Win32GetWinVer(RPC_WINVER *v); 99 100 #endif // VLANWIN32_H 101 102 #endif // OS_WIN32 103