1 // SoftEther VPN Source Code - Developer Edition Master Branch 2 // Cedar Communication Module 3 4 5 // BridgeWin32.h 6 // Header of BridgeWin32.c 7 8 #ifdef OS_WIN32 9 10 #ifndef BRIDGEWIN32_H 11 #define BRIDGEWIN32_H 12 13 #include "Bridge.h" 14 15 #include <Packet32.h> 16 17 #define BRIDGE_WIN32_PACKET_DLL "Packet.dll" 18 #define BRIDGE_WIN32_PCD_DLL "|see.dll" 19 #define BRIDGE_WIN32_PCD_SYS "|DriverPackages\\See\\x86\\See_x86.sys" 20 #define BRIDGE_WIN32_PCD_DLL_X64 "|see_x64.dll" 21 #define BRIDGE_WIN32_PCD_SYS_X64 "|DriverPackages\\See\\x64\\See_x64.sys" 22 #define BRIDGE_WIN32_PCD_REGKEY "SYSTEM\\CurrentControlSet\\services\\SEE" 23 #define BRIDGE_WIN32_PCD_BUILDVALUE "CurrentInstalledBuild" 24 25 #define BRIDGE_WIN32_ETH_BUFFER (1048576) 26 27 #ifdef BRIDGE_C 28 29 // Header for Internal function (for BridgeWin32.c) 30 typedef struct WP 31 { 32 bool Inited; 33 HINSTANCE hPacketDll; 34 PCHAR (*PacketGetVersion)(); 35 PCHAR (*PacketGetDriverVersion)(); 36 BOOLEAN (*PacketSetMinToCopy)(LPADAPTER AdapterObject,int nbytes); 37 BOOLEAN (*PacketSetNumWrites)(LPADAPTER AdapterObject,int nwrites); 38 BOOLEAN (*PacketSetMode)(LPADAPTER AdapterObject,int mode); 39 BOOLEAN (*PacketSetReadTimeout)(LPADAPTER AdapterObject,int timeout); 40 BOOLEAN (*PacketSetBpf)(LPADAPTER AdapterObject,struct bpf_program *fp); 41 INT (*PacketSetSnapLen)(LPADAPTER AdapterObject,int snaplen); 42 BOOLEAN (*PacketGetStats)(LPADAPTER AdapterObject,struct bpf_stat *s); 43 BOOLEAN (*PacketGetStatsEx)(LPADAPTER AdapterObject,struct bpf_stat *s); 44 BOOLEAN (*PacketSetBuff)(LPADAPTER AdapterObject,int dim); 45 BOOLEAN (*PacketGetNetType)(LPADAPTER AdapterObject,NetType *type); 46 LPADAPTER (*PacketOpenAdapter)(PCHAR AdapterName); 47 BOOLEAN (*PacketSendPacket)(LPADAPTER AdapterObject,LPPACKET pPacket,BOOLEAN Sync); 48 INT (*PacketSendPackets)(LPADAPTER AdapterObject,PVOID PacketBuff,ULONG Size, BOOLEAN Sync); 49 LPPACKET (*PacketAllocatePacket)(void); 50 VOID (*PacketInitPacket)(LPPACKET lpPacket,PVOID Buffer,UINT Length); 51 VOID (*PacketFreePacket)(LPPACKET lpPacket); 52 BOOLEAN (*PacketReceivePacket)(LPADAPTER AdapterObject,LPPACKET lpPacket,BOOLEAN Sync); 53 BOOLEAN (*PacketSetHwFilter)(LPADAPTER AdapterObject,ULONG Filter); 54 BOOLEAN (*PacketGetAdapterNames)(PTSTR pStr,PULONG BufferSize); 55 BOOLEAN (*PacketGetNetInfoEx)(PCHAR AdapterName, npf_if_addr* buffer, PLONG NEntries); 56 BOOLEAN (*PacketRequest)(LPADAPTER AdapterObject,BOOLEAN Set,PPACKET_OID_DATA OidData); 57 HANDLE (*PacketGetReadEvent)(LPADAPTER AdapterObject); 58 BOOLEAN (*PacketSetDumpName)(LPADAPTER AdapterObject, void *name, int len); 59 BOOLEAN (*PacketSetDumpLimits)(LPADAPTER AdapterObject, UINT maxfilesize, UINT maxnpacks); 60 BOOLEAN (*PacketIsDumpEnded)(LPADAPTER AdapterObject, BOOLEAN sync); 61 BOOL (*PacketStopDriver)(); 62 VOID (*PacketCloseAdapter)(LPADAPTER lpAdapter); 63 BOOLEAN (*PacketSetLoopbackBehavior)(LPADAPTER AdapterObject, UINT LoopbackBehavior); 64 } WP; 65 66 // Adapter list 67 typedef struct WP_ADAPTER 68 { 69 char Name[MAX_SIZE]; 70 char Title[MAX_SIZE]; 71 char Guid[MAX_SIZE]; 72 UINT Id; 73 } WP_ADAPTER; 74 75 // Internal function prototype 76 void InitEthAdaptersList(); 77 void FreeEthAdaptersList(); 78 int CompareWpAdapter(void *p1, void *p2); 79 LIST *GetEthAdapterList(); 80 LIST *GetEthAdapterListInternal(); 81 bool InitWpWithLoadLibrary(WP *wp, HINSTANCE h); 82 bool IsPcdSupported(); 83 HINSTANCE InstallPcdDriver(); 84 HINSTANCE InstallPcdDriverInternal(); 85 UINT LoadPcdDriverBuild(); 86 void SavePcdDriverBuild(UINT build); 87 88 #endif // BRIDGE_C 89 90 typedef struct _ADAPTER ADAPTER; 91 typedef struct _PACKET PACKET; 92 93 // ETH structure 94 struct ETH 95 { 96 char *Name; // Adapter name 97 char *Title; // Adapter title 98 ADAPTER *Adapter; // Adapter 99 CANCEL *Cancel; // Cancel object 100 UCHAR *Buffer; // Buffer 101 UINT BufferSize; // Buffer size 102 PACKET *Packet; // Packet 103 PACKET *PutPacket; // Write packet 104 QUEUE *PacketQueue; // Packet queue 105 UINT64 LastSetSingleCpu; // Date and time set to a single CPU to last 106 bool LoopbackBlock; // Whether to block the loop back packet 107 bool Empty; // It is empty 108 UCHAR MacAddress[6]; // MAC address 109 bool HasFatalError; // A fatal error occurred on the transmission side 110 111 SU *Su; // SeLow handle 112 SU_ADAPTER *SuAdapter; // SeLow adapter handle 113 114 // Unused 115 bool IsRawIpMode; // RAW IP mode 116 UCHAR RawIpMyMacAddr[6]; 117 UCHAR RawIpYourMacAddr[6]; 118 IP MyPhysicalIPForce; 119 }; 120 121 // Function prototype 122 void InitEth(); 123 void FreeEth(); 124 bool IsEthSupported(); 125 bool IsEthSupportedInner(); 126 TOKEN_LIST *GetEthList(); 127 TOKEN_LIST *GetEthListEx(UINT *total_num_including_hidden, bool enum_normal, bool enum_rawip); 128 ETH *OpenEth(char *name, bool local, bool tapmode, char *tapaddr); 129 ETH *OpenEthInternal(char *name, bool local, bool tapmode, char *tapaddr); 130 void CloseEth(ETH *e); 131 CANCEL *EthGetCancel(ETH *e); 132 UINT EthGetPacket(ETH *e, void **data); 133 void EthPutPacket(ETH *e, void *data, UINT size); 134 void EthPutPackets(ETH *e, UINT num, void **datas, UINT *sizes); 135 void GetEthNetworkConnectionName(wchar_t *dst, UINT size, char *device_name); 136 bool IsWin32BridgeWithSee(); 137 UINT EthGetMtu(ETH *e); 138 bool EthSetMtu(ETH *e, UINT mtu); 139 bool EthIsChangeMtuSupported(ETH *e); 140 141 bool Win32EthIsSuSupported(); 142 143 void Win32EthSetShowAllIf(bool b); 144 bool Win32EthGetShowAllIf(); 145 146 bool EnumEthVLanWin32(RPC_ENUM_ETH_VLAN *t); 147 bool GetClassRegKeyWin32(char *key, UINT key_size, char *short_key, UINT short_key_size, char *guid); 148 int CmpRpcEnumEthVLan(void *p1, void *p2); 149 void GetVLanSupportStatus(RPC_ENUM_ETH_VLAN_ITEM *e); 150 void GetVLanEnableStatus(RPC_ENUM_ETH_VLAN_ITEM *e); 151 bool SetVLanEnableStatus(char *title, bool enable); 152 RPC_ENUM_ETH_VLAN_ITEM *FindEthVLanItem(RPC_ENUM_ETH_VLAN *t, char *name); 153 char *SearchDeviceInstanceIdFromShortKey(char *short_key); 154 void Win32EthMakeCombinedName(char *dst, UINT dst_size, char *nicname, char *guid); 155 UINT Win32EthGenIdFromGuid(char *guid); 156 UINT Win32EthGetNameAndIdFromCombinedName(char *name, UINT name_size, char *str); 157 158 struct WP_ADAPTER *Win32EthSearch(char *name); 159 bool Win32IsUsingSeLow(); 160 void Win32SetEnableSeLow(bool b); 161 bool Win32GetEnableSeLow(); 162 163 #endif // BRIDGEWIN32_H 164 165 #endif // OS_WIN32 166