1
0
mirror of https://github.com/SoftEtherVPN/SoftEtherVPN.git synced 2024-11-23 01:49:53 +03:00

v4.12-9514-beta

This commit is contained in:
dnobori 2014-11-18 12:05:48 +09:00
parent 2b3a4d0b75
commit 75f9836ce5
301 changed files with 1259 additions and 317 deletions

View File

@ -1663,6 +1663,8 @@ CEDAR *NewCedar(X *server_x, K *server_k)
c->CurrentRegionLock = NewLock(); c->CurrentRegionLock = NewLock();
StrCpy(c->OpenVPNDefaultClientOption, sizeof(c->OpenVPNDefaultClientOption), OVPN_DEF_CLIENT_OPTION_STRING);
#ifdef BETA_NUMBER #ifdef BETA_NUMBER
c->Beta = BETA_NUMBER; c->Beta = BETA_NUMBER;
#endif // BETA_NUMBER #endif // BETA_NUMBER

View File

@ -135,10 +135,10 @@
// Version number // Version number
#define CEDAR_VER 411 #define CEDAR_VER 412
// Build Number // Build Number
#define CEDAR_BUILD 9506 #define CEDAR_BUILD 9514
// Beta number // Beta number
//#define BETA_NUMBER 3 //#define BETA_NUMBER 3
@ -158,11 +158,11 @@
// Specifies the build date // Specifies the build date
#define BUILD_DATE_Y 2014 #define BUILD_DATE_Y 2014
#define BUILD_DATE_M 10 #define BUILD_DATE_M 11
#define BUILD_DATE_D 22 #define BUILD_DATE_D 17
#define BUILD_DATE_HO 19 #define BUILD_DATE_HO 21
#define BUILD_DATE_MI 51 #define BUILD_DATE_MI 41
#define BUILD_DATE_SE 55 #define BUILD_DATE_SE 16
// Tolerable time difference // Tolerable time difference
#define ALLOW_TIMESTAMP_DIFF (UINT64)(3 * 24 * 60 * 60 * 1000) #define ALLOW_TIMESTAMP_DIFF (UINT64)(3 * 24 * 60 * 60 * 1000)
@ -1052,6 +1052,7 @@ typedef struct CEDAR
LOCK *FifoBudgetLock; // Fifo budget lock LOCK *FifoBudgetLock; // Fifo budget lock
UINT FifoBudget; // Fifo budget UINT FifoBudget; // Fifo budget
bool AcceptOnlyTls; // Accept only TLS (Disable SSL) bool AcceptOnlyTls; // Accept only TLS (Disable SSL)
char OpenVPNDefaultClientOption[MAX_SIZE]; // OpenVPN Default Client Option String
} CEDAR; } CEDAR;
// Type of CEDAR // Type of CEDAR

View File

@ -137,6 +137,13 @@ typedef struct AUTHRADIUS AUTHRADIUS;
typedef struct AUTHNT AUTHNT; typedef struct AUTHNT AUTHNT;
// ==============================================================
// RADIUS
// ==============================================================
typedef struct RADIUS_LOGIN_OPTION RADIUS_LOGIN_OPTION;
// ============================================================== // ==============================================================
// Listener // Listener
// ============================================================== // ==============================================================

View File

@ -597,6 +597,7 @@ void DataToHubOptionStruct(HUB_OPTION *o, RPC_ADMIN_OPTION *ao)
GetHubAdminOptionDataAndSet(ao, "DropArpInPrivacyFilterMode", &o->DropArpInPrivacyFilterMode); GetHubAdminOptionDataAndSet(ao, "DropArpInPrivacyFilterMode", &o->DropArpInPrivacyFilterMode);
GetHubAdminOptionDataAndSet(ao, "SuppressClientUpdateNotification", &o->SuppressClientUpdateNotification); GetHubAdminOptionDataAndSet(ao, "SuppressClientUpdateNotification", &o->SuppressClientUpdateNotification);
GetHubAdminOptionDataAndSet(ao, "FloodingSendQueueBufferQuota", &o->FloodingSendQueueBufferQuota); GetHubAdminOptionDataAndSet(ao, "FloodingSendQueueBufferQuota", &o->FloodingSendQueueBufferQuota);
GetHubAdminOptionDataAndSet(ao, "AssignVLanIdByRadiusAttribute", &o->AssignVLanIdByRadiusAttribute);
} }
// Convert the contents of the HUB_OPTION to data // Convert the contents of the HUB_OPTION to data
@ -662,6 +663,7 @@ void HubOptionStructToData(RPC_ADMIN_OPTION *ao, HUB_OPTION *o, char *hub_name)
Add(aol, NewAdminOption("DropArpInPrivacyFilterMode", o->DropArpInPrivacyFilterMode)); Add(aol, NewAdminOption("DropArpInPrivacyFilterMode", o->DropArpInPrivacyFilterMode));
Add(aol, NewAdminOption("SuppressClientUpdateNotification", o->SuppressClientUpdateNotification)); Add(aol, NewAdminOption("SuppressClientUpdateNotification", o->SuppressClientUpdateNotification));
Add(aol, NewAdminOption("FloodingSendQueueBufferQuota", o->FloodingSendQueueBufferQuota)); Add(aol, NewAdminOption("FloodingSendQueueBufferQuota", o->FloodingSendQueueBufferQuota));
Add(aol, NewAdminOption("AssignVLanIdByRadiusAttribute", o->AssignVLanIdByRadiusAttribute));
Zero(ao, sizeof(RPC_ADMIN_OPTION)); Zero(ao, sizeof(RPC_ADMIN_OPTION));

View File

@ -275,6 +275,7 @@ struct HUB_OPTION
bool DropArpInPrivacyFilterMode; // Drop ARP packets if the both source and destination session is PrivacyFilter mode bool DropArpInPrivacyFilterMode; // Drop ARP packets if the both source and destination session is PrivacyFilter mode
bool SuppressClientUpdateNotification; // Suppress the update notification function on the VPN Client bool SuppressClientUpdateNotification; // Suppress the update notification function on the VPN Client
UINT FloodingSendQueueBufferQuota; // The global quota of send queues of flooding packets UINT FloodingSendQueueBufferQuota; // The global quota of send queues of flooding packets
bool AssignVLanIdByRadiusAttribute; // Assign the VLAN ID for the VPN session, by the attribute value of RADIUS
}; };
// MAC table entry // MAC table entry

View File

@ -766,6 +766,7 @@ void OvsSetupSessionParameters(OPENVPN_SERVER *s, OPENVPN_SESSION *se, OPENVPN_C
{ {
LIST *o; LIST *o;
BUF *b; BUF *b;
char opt_str[MAX_SIZE];
// Validate arguments // Validate arguments
if (s == NULL || se == NULL || c == NULL || data == NULL) if (s == NULL || se == NULL || c == NULL || data == NULL)
{ {
@ -779,7 +780,14 @@ void OvsSetupSessionParameters(OPENVPN_SERVER *s, OPENVPN_SESSION *se, OPENVPN_C
OvsLog(s, se, c, "LO_OPTION_STR_RECV", data->OptionString); OvsLog(s, se, c, "LO_OPTION_STR_RECV", data->OptionString);
o = OvsParseOptions(data->OptionString); Zero(opt_str, sizeof(opt_str));
StrCpy(opt_str, sizeof(opt_str), data->OptionString);
if (s->Cedar != NULL && (IsEmptyStr(opt_str) || StartWith(opt_str, "V0 UNDEF") || InStr(opt_str, ",") == false))
{
StrCpy(opt_str, sizeof(opt_str), s->Cedar->OpenVPNDefaultClientOption);
}
o = OvsParseOptions(opt_str);
if (se->Mode == OPENVPN_MODE_UNKNOWN) if (se->Mode == OPENVPN_MODE_UNKNOWN)
{ {

View File

@ -311,6 +311,9 @@ struct OPENVPN_SERVER_UDP
UINT64 VgsNextGetPublicPortsTick; UINT64 VgsNextGetPublicPortsTick;
}; };
// OpenVPN Default Client Option String
#define OVPN_DEF_CLIENT_OPTION_STRING "dev-type tun,link-mtu 1500,tun-mtu 1500,cipher AES-128-CBC,auth SHA1,keysize 128,key-method 2,tls-client"
//// Function prototype //// Function prototype
OPENVPN_SERVER_UDP *NewOpenVpnServerUdp(CEDAR *cedar); OPENVPN_SERVER_UDP *NewOpenVpnServerUdp(CEDAR *cedar);

View File

@ -1031,7 +1031,7 @@ void L3PollingBeacon(L3IF *f)
Copy(udp_buf + sizeof(IPV4_HEADER) + sizeof(UDP_HEADER), beacon_str, sizeof(beacon_str)); Copy(udp_buf + sizeof(IPV4_HEADER) + sizeof(UDP_HEADER), beacon_str, sizeof(beacon_str));
udp->Checksum = IpChecksum(udp, sizeof(UDP_HEADER) + sizeof(beacon_str)); udp->Checksum = CalcChecksumForIPv4(f->IpAddress, dest_ip, 0x11, udp, sizeof(UDP_HEADER) + sizeof(beacon_str), 0);
ip->DstIP = dest_ip; ip->DstIP = dest_ip;
IPV4_SET_VERSION(ip, 4); IPV4_SET_VERSION(ip, 4);

View File

@ -842,24 +842,24 @@ void GenerateMachineUniqueHash(void *data)
{ {
BUF *b; BUF *b;
char name[64]; char name[64];
char ip_str[64];
IP ip;
OS_INFO *osinfo; OS_INFO *osinfo;
UINT64 iphash = 0;
// Validate arguments // Validate arguments
if (data == NULL) if (data == NULL)
{ {
return; return;
} }
iphash = GetHostIPAddressListHash();
b = NewBuf(); b = NewBuf();
GetMachineName(name, sizeof(name)); GetMachineName(name, sizeof(name));
GetMachineIp(&ip);
IPToStr(ip_str, sizeof(ip_str), &ip);
osinfo = GetOsInfo(); osinfo = GetOsInfo();
WriteBuf(b, name, StrLen(name)); WriteBuf(b, name, StrLen(name));
WriteBuf(b, ip_str, StrLen(ip_str));
WriteBufInt64(b, iphash);
WriteBuf(b, &osinfo->OsType, sizeof(osinfo->OsType)); WriteBuf(b, &osinfo->OsType, sizeof(osinfo->OsType));
WriteBuf(b, osinfo->KernelName, StrLen(osinfo->KernelName)); WriteBuf(b, osinfo->KernelName, StrLen(osinfo->KernelName));
@ -1265,6 +1265,7 @@ bool ServerAccept(CONNECTION *c)
RC4_KEY_PAIR key_pair; RC4_KEY_PAIR key_pair;
UINT authtype; UINT authtype;
POLICY *policy; POLICY *policy;
UINT assigned_vlan_id = 0;
HUB *hub; HUB *hub;
SESSION *s = NULL; SESSION *s = NULL;
UINT64 user_expires = 0; UINT64 user_expires = 0;
@ -1330,6 +1331,8 @@ bool ServerAccept(CONNECTION *c)
return false; return false;
} }
GenerateMachineUniqueHash(unique2);
Zero(ctoken_hash_str, sizeof(ctoken_hash_str)); Zero(ctoken_hash_str, sizeof(ctoken_hash_str));
Zero(mschap_v2_server_response_20, sizeof(mschap_v2_server_response_20)); Zero(mschap_v2_server_response_20, sizeof(mschap_v2_server_response_20));
@ -1623,6 +1626,8 @@ bool ServerAccept(CONNECTION *c)
USER *user; USER *user;
USERGROUP *group; USERGROUP *group;
char plain_password[MAX_PASSWORD_LEN + 1]; char plain_password[MAX_PASSWORD_LEN + 1];
RADIUS_LOGIN_OPTION radius_login_opt;
if (hub->Halt || hub->Offline) if (hub->Halt || hub->Offline)
{ {
// HUB is off-line // HUB is off-line
@ -1633,6 +1638,13 @@ bool ServerAccept(CONNECTION *c)
goto CLEANUP; goto CLEANUP;
} }
Zero(&radius_login_opt, sizeof(radius_login_opt));
if (hub->Option != NULL)
{
radius_login_opt.In_CheckVLanId = hub->Option->AssignVLanIdByRadiusAttribute;
}
// Get the various flags // Get the various flags
use_encrypt = PackGetInt(p, "use_encrypt") == 0 ? false : true; use_encrypt = PackGetInt(p, "use_encrypt") == 0 ? false : true;
use_compress = PackGetInt(p, "use_compress") == 0 ? false : true; use_compress = PackGetInt(p, "use_compress") == 0 ? false : true;
@ -1997,7 +2009,7 @@ bool ServerAccept(CONNECTION *c)
if (fail_ext_user_auth == false) if (fail_ext_user_auth == false)
{ {
auth_ret = SamAuthUserByPlainPassword(c, hub, username, plain_password, false, mschap_v2_server_response_20); auth_ret = SamAuthUserByPlainPassword(c, hub, username, plain_password, false, mschap_v2_server_response_20, &radius_login_opt);
} }
if (auth_ret && pol == NULL) if (auth_ret && pol == NULL)
@ -2028,7 +2040,7 @@ bool ServerAccept(CONNECTION *c)
// If there is asterisk user, log on as the user // If there is asterisk user, log on as the user
if (b) if (b)
{ {
auth_ret = SamAuthUserByPlainPassword(c, hub, username, plain_password, true, mschap_v2_server_response_20); auth_ret = SamAuthUserByPlainPassword(c, hub, username, plain_password, true, mschap_v2_server_response_20, &radius_login_opt);
if (auth_ret && pol == NULL) if (auth_ret && pol == NULL)
{ {
pol = SamGetUserPolicy(hub, "*"); pol = SamGetUserPolicy(hub, "*");
@ -2180,6 +2192,12 @@ bool ServerAccept(CONNECTION *c)
// Authentication success // Authentication success
FreePack(p); FreePack(p);
// Check the assigned VLAN ID
if (radius_login_opt.Out_VLanId != 0)
{
assigned_vlan_id = radius_login_opt.Out_VLanId;
}
if (StrCmpi(username, ADMINISTRATOR_USERNAME) != 0) if (StrCmpi(username, ADMINISTRATOR_USERNAME) != 0)
{ {
// Get the policy // Get the policy
@ -2468,8 +2486,6 @@ bool ServerAccept(CONNECTION *c)
policy->NoRouting = true; policy->NoRouting = true;
} }
GenerateMachineUniqueHash(unique2);
if (Cmp(unique, unique2, SHA1_SIZE) == 0) if (Cmp(unique, unique2, SHA1_SIZE) == 0)
{ {
// It's a localhost session // It's a localhost session
@ -2865,6 +2881,18 @@ bool ServerAccept(CONNECTION *c)
// Remove the connection from Cedar // Remove the connection from Cedar
DelConnection(c->Cedar, c); DelConnection(c->Cedar, c);
// VLAN ID
if (assigned_vlan_id != 0)
{
if (policy != NULL)
{
if (policy->VLanId == 0)
{
policy->VLanId = assigned_vlan_id;
}
}
}
// Create a Session // Create a Session
StrLower(username); StrLower(username);
s = NewServerSessionEx(c->Cedar, c, hub, username, policy, c->IsInProc); s = NewServerSessionEx(c->Cedar, c, hub, username, policy, c->IsInProc);
@ -3050,6 +3078,7 @@ bool ServerAccept(CONNECTION *c)
s->QoS = qos; s->QoS = qos;
s->NoReconnectToSession = no_reconnect_to_session; s->NoReconnectToSession = no_reconnect_to_session;
if (policy != NULL) if (policy != NULL)
{ {
s->VLanId = policy->VLanId; s->VLanId = policy->VLanId;
@ -3245,6 +3274,11 @@ bool ServerAccept(CONNECTION *c)
NodeInfoToStr(tmp, sizeof(tmp), &s->NodeInfo); NodeInfoToStr(tmp, sizeof(tmp), &s->NodeInfo);
HLog(hub, "LH_NODE_INFO", s->Name, tmp); HLog(hub, "LH_NODE_INFO", s->Name, tmp);
if (s->VLanId != 0)
{
HLog(hub, "LH_VLAN_ID", s->Name, s->VLanId);
}
} }
// Shift the connection to the tunneling mode // Shift the connection to the tunneling mode

View File

@ -114,7 +114,8 @@
#include "CedarPch.h" #include "CedarPch.h"
// Attempts Radius authentication (with specifying retry interval and multiple server) // Attempts Radius authentication (with specifying retry interval and multiple server)
bool RadiusLogin(CONNECTION *c, char *server, UINT port, UCHAR *secret, UINT secret_size, wchar_t *username, char *password, UINT interval, UCHAR *mschap_v2_server_response_20) bool RadiusLogin(CONNECTION *c, char *server, UINT port, UCHAR *secret, UINT secret_size, wchar_t *username, char *password, UINT interval, UCHAR *mschap_v2_server_response_20,
RADIUS_LOGIN_OPTION *opt)
{ {
UCHAR random[MD5_SIZE]; UCHAR random[MD5_SIZE];
UCHAR id; UCHAR id;
@ -128,6 +129,7 @@ bool RadiusLogin(CONNECTION *c, char *server, UINT port, UCHAR *secret, UINT sec
IPC_MSCHAP_V2_AUTHINFO mschap; IPC_MSCHAP_V2_AUTHINFO mschap;
bool is_mschap; bool is_mschap;
char client_ip_str[MAX_SIZE]; char client_ip_str[MAX_SIZE];
RADIUS_LOGIN_OPTION opt_dummy;
static UINT packet_id = 0; static UINT packet_id = 0;
// Validate arguments // Validate arguments
if (server == NULL || port == 0 || (secret_size != 0 && secret == NULL) || username == NULL || password == NULL) if (server == NULL || port == 0 || (secret_size != 0 && secret == NULL) || username == NULL || password == NULL)
@ -135,6 +137,15 @@ bool RadiusLogin(CONNECTION *c, char *server, UINT port, UCHAR *secret, UINT sec
return false; return false;
} }
if (opt == NULL)
{
Zero(&opt_dummy, sizeof(opt_dummy));
opt = &opt_dummy;
}
opt->Out_VLanId = 0;
Zero(client_ip_str, sizeof(client_ip_str)); Zero(client_ip_str, sizeof(client_ip_str));
if (c != NULL && c->FirstSock != NULL) if (c != NULL && c->FirstSock != NULL)
{ {
@ -450,6 +461,34 @@ RECV_RETRY:
FreeBuf(b); FreeBuf(b);
} }
} }
if (opt->In_CheckVLanId)
{
BUF *buf = NewBufFromMemory(recv_buf, recv_size);
LIST *o = RadiusParseOptions(buf);
if (o != NULL)
{
DHCP_OPTION *vlan_option = GetDhcpOption(o, RADIUS_ATTRIBUTE_VLAN_ID);
if (vlan_option != NULL)
{
UINT vlan_id = 0;
char tmp[32];
Zero(tmp, sizeof(tmp));
Copy(tmp, vlan_option->Data, MIN(vlan_option->Size, sizeof(tmp) - 1));
vlan_id = ToInt(tmp);
opt->Out_VLanId = vlan_id;
}
}
FreeBuf(buf);
FreeDhcpOptions(o);
}
} }
break; break;
} }
@ -484,6 +523,68 @@ RECV_RETRY:
return ret; return ret;
} }
// Parse RADIUS attributes
LIST *RadiusParseOptions(BUF *b)
{
LIST *o;
UCHAR code;
UCHAR id;
USHORT len;
UCHAR auth[16];
// Validate arguments
if (b == NULL)
{
return NULL;
}
o = NewList(NULL);
ReadBuf(b, &code, 1);
ReadBuf(b, &id, 1);
len = 0;
ReadBuf(b, &len, 2);
len = Endian16(len);
ReadBuf(b, auth, 16);
while (true)
{
UCHAR attribute_id;
UCHAR size;
UCHAR data[256];
DHCP_OPTION *d;
if (ReadBuf(b, &attribute_id, 1) != 1)
{
break;
}
if (ReadBuf(b, &size, 1) != 1)
{
break;
}
if (size <= 2)
{
break;
}
size -= 2;
if (ReadBuf(b, data, size) != size)
{
break;
}
d = ZeroMalloc(sizeof(DHCP_OPTION));
d->Id = attribute_id;
d->Size = size;
d->Data = Clone(data, d->Size);
Add(o, d);
}
return o;
}
// Adding Attributes // Adding Attributes
void RadiusAddValue(BUF *b, UCHAR t, UINT v, UCHAR vt, void *data, UINT size) void RadiusAddValue(BUF *b, UCHAR t, UINT v, UCHAR vt, void *data, UINT size)
{ {

View File

@ -118,13 +118,25 @@
#define RADIUS_RETRY_INTERVAL 500 // Retransmission interval #define RADIUS_RETRY_INTERVAL 500 // Retransmission interval
#define RADIUS_RETRY_TIMEOUT (10 * 1000) // Time-out period #define RADIUS_RETRY_TIMEOUT (10 * 1000) // Time-out period
// RADIUS attributes
#define RADIUS_ATTRIBUTE_VLAN_ID 81
struct RADIUS_LOGIN_OPTION
{
bool In_CheckVLanId;
UINT Out_VLanId;
};
// Function prototype // Function prototype
bool RadiusLogin(CONNECTION *c, char *server, UINT port, UCHAR *secret, UINT secret_size, wchar_t *username, char *password, UINT interval, UCHAR *mschap_v2_server_response_20); bool RadiusLogin(CONNECTION *c, char *server, UINT port, UCHAR *secret, UINT secret_size, wchar_t *username, char *password, UINT interval, UCHAR *mschap_v2_server_response_20,
RADIUS_LOGIN_OPTION *opt);
BUF *RadiusEncryptPassword(char *password, UCHAR *random, UCHAR *secret, UINT secret_size); BUF *RadiusEncryptPassword(char *password, UCHAR *random, UCHAR *secret, UINT secret_size);
BUF *RadiusCreateUserName(wchar_t *username); BUF *RadiusCreateUserName(wchar_t *username);
BUF *RadiusCreateUserPassword(void *data, UINT size); BUF *RadiusCreateUserPassword(void *data, UINT size);
BUF *RadiusCreateNasId(char *name); BUF *RadiusCreateNasId(char *name);
void RadiusAddValue(BUF *b, UCHAR t, UINT v, UCHAR vt, void *data, UINT size); void RadiusAddValue(BUF *b, UCHAR t, UINT v, UCHAR vt, void *data, UINT size);
LIST *RadiusParseOptions(BUF *b);
#endif // RADIUS_H #endif // RADIUS_H

View File

@ -2670,7 +2670,7 @@ void SwDefineTasks(SW *sw, SW_TASK *t, SW_COMPONENT *c)
SW_TASK_COPY *vpninstall; SW_TASK_COPY *vpninstall;
wchar_t *src_config_filename; wchar_t *src_config_filename;
CombinePathW(tmp, sizeof(tmp), sw->InstallDir, L"backup.vpn_vpnclient.config"); CombinePathW(tmp, sizeof(tmp), sw->InstallDir, L"backup.vpn_client.config");
Add(t->SetSecurityPaths, CopyUniStr(tmp)); Add(t->SetSecurityPaths, CopyUniStr(tmp));
if (x64 == false) if (x64 == false)

View File

@ -175,7 +175,7 @@ bool SamAuthUserByAnonymous(HUB *h, char *username)
} }
// Plaintext password authentication of user // Plaintext password authentication of user
bool SamAuthUserByPlainPassword(CONNECTION *c, HUB *hub, char *username, char *password, bool ast, UCHAR *mschap_v2_server_response_20) bool SamAuthUserByPlainPassword(CONNECTION *c, HUB *hub, char *username, char *password, bool ast, UCHAR *mschap_v2_server_response_20, RADIUS_LOGIN_OPTION *opt)
{ {
bool b = false; bool b = false;
wchar_t *name = NULL; wchar_t *name = NULL;
@ -267,7 +267,7 @@ bool SamAuthUserByPlainPassword(CONNECTION *c, HUB *hub, char *username, char *p
// Attempt to login // Attempt to login
b = RadiusLogin(c, radius_server_addr, radius_server_port, b = RadiusLogin(c, radius_server_addr, radius_server_port,
radius_secret, StrLen(radius_secret), radius_secret, StrLen(radius_secret),
name, password, interval, mschap_v2_server_response_20); name, password, interval, mschap_v2_server_response_20, opt);
} }
Lock(hub->lock); Lock(hub->lock);

View File

@ -121,7 +121,7 @@ UINT SamGetUserAuthType(HUB *h, char *username);
bool SamAuthUserByPassword(HUB *h, char *username, void *random, void *secure_password, char *mschap_v2_password, UCHAR *mschap_v2_server_response_20, UINT *err); bool SamAuthUserByPassword(HUB *h, char *username, void *random, void *secure_password, char *mschap_v2_password, UCHAR *mschap_v2_server_response_20, UINT *err);
bool SamAuthUserByAnonymous(HUB *h, char *username); bool SamAuthUserByAnonymous(HUB *h, char *username);
bool SamAuthUserByCert(HUB *h, char *username, X *x); bool SamAuthUserByCert(HUB *h, char *username, X *x);
bool SamAuthUserByPlainPassword(CONNECTION *c, HUB *hub, char *username, char *password, bool ast, UCHAR *mschap_v2_server_response_20); bool SamAuthUserByPlainPassword(CONNECTION *c, HUB *hub, char *username, char *password, bool ast, UCHAR *mschap_v2_server_response_20, RADIUS_LOGIN_OPTION *opt);
POLICY *SamGetUserPolicy(HUB *h, char *username); POLICY *SamGetUserPolicy(HUB *h, char *username);
void GenRamdom(void *random); void GenRamdom(void *random);

View File

@ -260,6 +260,7 @@ UINT SiDebug(SERVER *s, RPC_TEST *ret, UINT i, char *str)
{10, "Get VgsMessageDisplayed Flag", "", SiDebugProcGetVgsMessageDisplayedValue}, {10, "Get VgsMessageDisplayed Flag", "", SiDebugProcGetVgsMessageDisplayedValue},
{11, "Set VgsMessageDisplayed Flag", "", SiDebugProcSetVgsMessageDisplayedValue}, {11, "Set VgsMessageDisplayed Flag", "", SiDebugProcSetVgsMessageDisplayedValue},
{12, "Get the current TCP send queue length", "", SiDebugProcGetCurrentTcpSendQueueLength}, {12, "Get the current TCP send queue length", "", SiDebugProcGetCurrentTcpSendQueueLength},
{13, "Get the current GetIP thread count", "", SiDebugProcGetCurrentGetIPThreadCount},
}; };
UINT num_proc_list = sizeof(proc_list) / sizeof(proc_list[0]); UINT num_proc_list = sizeof(proc_list) / sizeof(proc_list[0]);
UINT j; UINT j;
@ -478,6 +479,25 @@ UINT SiDebugProcGetCurrentTcpSendQueueLength(SERVER *s, char *in_str, char *ret_
return ERR_NO_ERROR; return ERR_NO_ERROR;
} }
UINT SiDebugProcGetCurrentGetIPThreadCount(SERVER *s, char *in_str, char *ret_str, UINT ret_str_size)
{
char tmp1[64], tmp2[64];
// Validate arguments
if (s == NULL || in_str == NULL || ret_str == NULL)
{
return ERR_INVALID_PARAMETER;
}
ToStr3(tmp1, 0, GetCurrentGetIpThreadNum());
ToStr3(tmp2, 0, GetGetIpThreadMaxNum());
Format(ret_str, 0,
"Current threads = %s\n"
"Quota = %s\n",
tmp1, tmp2);
return ERR_NO_ERROR;
}
UINT SiDebugProcSetVgsMessageDisplayedValue(SERVER *s, char *in_str, char *ret_str, UINT ret_str_size) UINT SiDebugProcSetVgsMessageDisplayedValue(SERVER *s, char *in_str, char *ret_str, UINT ret_str_size)
{ {
// Validate arguments // Validate arguments
@ -4081,6 +4101,7 @@ void SiLoadHubOptionCfg(FOLDER *f, HUB_OPTION *o)
o->DisableCheckMacOnLocalBridge = CfgGetBool(f, "DisableCheckMacOnLocalBridge"); o->DisableCheckMacOnLocalBridge = CfgGetBool(f, "DisableCheckMacOnLocalBridge");
o->DisableCorrectIpOffloadChecksum = CfgGetBool(f, "DisableCorrectIpOffloadChecksum"); o->DisableCorrectIpOffloadChecksum = CfgGetBool(f, "DisableCorrectIpOffloadChecksum");
o->SuppressClientUpdateNotification = CfgGetBool(f, "SuppressClientUpdateNotification"); o->SuppressClientUpdateNotification = CfgGetBool(f, "SuppressClientUpdateNotification");
o->AssignVLanIdByRadiusAttribute = CfgGetBool(f, "AssignVLanIdByRadiusAttribute");
// Enabled by default // Enabled by default
if (CfgIsItem(f, "ManageOnlyPrivateIP")) if (CfgIsItem(f, "ManageOnlyPrivateIP"))
@ -4156,6 +4177,7 @@ void SiWriteHubOptionCfg(FOLDER *f, HUB_OPTION *o)
CfgAddBool(f, "DropBroadcastsInPrivacyFilterMode", o->DropBroadcastsInPrivacyFilterMode); CfgAddBool(f, "DropBroadcastsInPrivacyFilterMode", o->DropBroadcastsInPrivacyFilterMode);
CfgAddBool(f, "DropArpInPrivacyFilterMode", o->DropArpInPrivacyFilterMode); CfgAddBool(f, "DropArpInPrivacyFilterMode", o->DropArpInPrivacyFilterMode);
CfgAddBool(f, "SuppressClientUpdateNotification", o->SuppressClientUpdateNotification); CfgAddBool(f, "SuppressClientUpdateNotification", o->SuppressClientUpdateNotification);
CfgAddBool(f, "AssignVLanIdByRadiusAttribute", o->AssignVLanIdByRadiusAttribute);
CfgAddBool(f, "NoLookBPDUBridgeId", o->NoLookBPDUBridgeId); CfgAddBool(f, "NoLookBPDUBridgeId", o->NoLookBPDUBridgeId);
CfgAddInt(f, "AdjustTcpMssValue", o->AdjustTcpMssValue); CfgAddInt(f, "AdjustTcpMssValue", o->AdjustTcpMssValue);
CfgAddBool(f, "DisableAdjustTcpMss", o->DisableAdjustTcpMss); CfgAddBool(f, "DisableAdjustTcpMss", o->DisableAdjustTcpMss);
@ -5748,6 +5770,7 @@ void SiLoadServerCfg(SERVER *s, FOLDER *f)
bool cluster_allowed = false; bool cluster_allowed = false;
UINT num_connections_per_ip = 0; UINT num_connections_per_ip = 0;
FOLDER *params_folder; FOLDER *params_folder;
UINT i;
// Validate arguments // Validate arguments
if (s == NULL || f == NULL) if (s == NULL || f == NULL)
{ {
@ -5765,6 +5788,16 @@ void SiLoadServerCfg(SERVER *s, FOLDER *f)
s->AutoSaveConfigSpan = MAKESURE(s->AutoSaveConfigSpan, SERVER_FILE_SAVE_INTERVAL_MIN, SERVER_FILE_SAVE_INTERVAL_MAX); s->AutoSaveConfigSpan = MAKESURE(s->AutoSaveConfigSpan, SERVER_FILE_SAVE_INTERVAL_MIN, SERVER_FILE_SAVE_INTERVAL_MAX);
} }
i = CfgGetInt(f, "MaxConcurrentDnsClientThreads");
if (i != 0)
{
SetGetIpThreadMaxNum(i);
}
else
{
SetGetIpThreadMaxNum(DEFAULT_GETIP_THREAD_MAX_NUM);
}
s->DontBackupConfig = CfgGetBool(f, "DontBackupConfig"); s->DontBackupConfig = CfgGetBool(f, "DontBackupConfig");
if (CfgIsItem(f, "BackupConfigOnlyWhenModified")) if (CfgIsItem(f, "BackupConfigOnlyWhenModified"))
@ -5900,6 +5933,16 @@ void SiLoadServerCfg(SERVER *s, FOLDER *f)
// Disable the OpenVPN server function // Disable the OpenVPN server function
s->DisableOpenVPNServer = CfgGetBool(f, "DisableOpenVPNServer"); s->DisableOpenVPNServer = CfgGetBool(f, "DisableOpenVPNServer");
// OpenVPN Default Option String
if (CfgGetStr(f, "OpenVPNDefaultClientOption", tmp, sizeof(tmp)))
{
if (IsEmptyStr(tmp) == false)
{
StrCpy(c->OpenVPNDefaultClientOption,
sizeof(c->OpenVPNDefaultClientOption), tmp);
}
}
// Disable the NAT-traversal feature // Disable the NAT-traversal feature
s->DisableNatTraversal = CfgGetBool(f, "DisableNatTraversal"); s->DisableNatTraversal = CfgGetBool(f, "DisableNatTraversal");
@ -6190,6 +6233,8 @@ void SiWriteServerCfg(FOLDER *f, SERVER *s)
return; return;
} }
CfgAddInt(f, "MaxConcurrentDnsClientThreads", GetGetIpThreadMaxNum());
CfgAddInt(f, "CurrentBuild", s->Cedar->Build); CfgAddInt(f, "CurrentBuild", s->Cedar->Build);
CfgAddInt(f, "AutoSaveConfigSpan", s->AutoSaveConfigSpanSaved / 1000); CfgAddInt(f, "AutoSaveConfigSpan", s->AutoSaveConfigSpanSaved / 1000);
@ -6292,6 +6337,8 @@ void SiWriteServerCfg(FOLDER *f, SERVER *s)
} }
} }
CfgAddStr(f, "OpenVPNDefaultClientOption", c->OpenVPNDefaultClientOption);
if (c->Bridge == false) if (c->Bridge == false)
{ {
// VPN over ICMP // VPN over ICMP
@ -7431,6 +7478,7 @@ void SiCalledUpdateHub(SERVER *s, PACK *p)
o.DropBroadcastsInPrivacyFilterMode = PackGetBool(p, "DropBroadcastsInPrivacyFilterMode"); o.DropBroadcastsInPrivacyFilterMode = PackGetBool(p, "DropBroadcastsInPrivacyFilterMode");
o.DropArpInPrivacyFilterMode = PackGetBool(p, "DropArpInPrivacyFilterMode"); o.DropArpInPrivacyFilterMode = PackGetBool(p, "DropArpInPrivacyFilterMode");
o.SuppressClientUpdateNotification = PackGetBool(p, "SuppressClientUpdateNotification"); o.SuppressClientUpdateNotification = PackGetBool(p, "SuppressClientUpdateNotification");
o.AssignVLanIdByRadiusAttribute = PackGetBool(p, "AssignVLanIdByRadiusAttribute");
o.VlanTypeId = PackGetInt(p, "VlanTypeId"); o.VlanTypeId = PackGetInt(p, "VlanTypeId");
if (o.VlanTypeId == 0) if (o.VlanTypeId == 0)
{ {
@ -9270,6 +9318,7 @@ void SiPackAddCreateHub(PACK *p, HUB *h)
PackAddBool(p, "DropBroadcastsInPrivacyFilterMode", h->Option->DropBroadcastsInPrivacyFilterMode); PackAddBool(p, "DropBroadcastsInPrivacyFilterMode", h->Option->DropBroadcastsInPrivacyFilterMode);
PackAddBool(p, "DropArpInPrivacyFilterMode", h->Option->DropArpInPrivacyFilterMode); PackAddBool(p, "DropArpInPrivacyFilterMode", h->Option->DropArpInPrivacyFilterMode);
PackAddBool(p, "SuppressClientUpdateNotification", h->Option->SuppressClientUpdateNotification); PackAddBool(p, "SuppressClientUpdateNotification", h->Option->SuppressClientUpdateNotification);
PackAddBool(p, "AssignVLanIdByRadiusAttribute", h->Option->AssignVLanIdByRadiusAttribute);
PackAddInt(p, "ClientMinimumRequiredBuild", h->Option->ClientMinimumRequiredBuild); PackAddInt(p, "ClientMinimumRequiredBuild", h->Option->ClientMinimumRequiredBuild);
PackAddBool(p, "FixForDLinkBPDU", h->Option->FixForDLinkBPDU); PackAddBool(p, "FixForDLinkBPDU", h->Option->FixForDLinkBPDU);
PackAddBool(p, "BroadcastLimiterStrictMode", h->Option->BroadcastLimiterStrictMode); PackAddBool(p, "BroadcastLimiterStrictMode", h->Option->BroadcastLimiterStrictMode);
@ -10811,6 +10860,8 @@ SERVER *SiNewServerEx(bool bridge, bool in_client_inner_server)
LISTENER *azure; LISTENER *azure;
LISTENER *rudp; LISTENER *rudp;
SetGetIpThreadMaxNum(DEFAULT_GETIP_THREAD_MAX_NUM);
s = ZeroMalloc(sizeof(SERVER)); s = ZeroMalloc(sizeof(SERVER));
SetEraserCheckInterval(0); SetEraserCheckInterval(0);

View File

@ -678,6 +678,7 @@ UINT SiDebugProcSetIPsecMessageDisplayedValue(SERVER *s, char *in_str, char *ret
UINT SiDebugProcGetVgsMessageDisplayedValue(SERVER *s, char *in_str, char *ret_str, UINT ret_str_size); UINT SiDebugProcGetVgsMessageDisplayedValue(SERVER *s, char *in_str, char *ret_str, UINT ret_str_size);
UINT SiDebugProcSetVgsMessageDisplayedValue(SERVER *s, char *in_str, char *ret_str, UINT ret_str_size); UINT SiDebugProcSetVgsMessageDisplayedValue(SERVER *s, char *in_str, char *ret_str, UINT ret_str_size);
UINT SiDebugProcGetCurrentTcpSendQueueLength(SERVER *s, char *in_str, char *ret_str, UINT ret_str_size); UINT SiDebugProcGetCurrentTcpSendQueueLength(SERVER *s, char *in_str, char *ret_str, UINT ret_str_size);
UINT SiDebugProcGetCurrentGetIPThreadCount(SERVER *s, char *in_str, char *ret_str, UINT ret_str_size);
typedef UINT (SI_DEBUG_PROC)(SERVER *s, char *in_str, char *ret_str, UINT ret_str_size); typedef UINT (SI_DEBUG_PROC)(SERVER *s, char *in_str, char *ret_str, UINT ret_str_size);

View File

@ -1034,6 +1034,11 @@ UDP_ACCEL *NewUdpAccel(CEDAR *cedar, IP *ip, bool client_mode, bool random_port,
a->IsIPv6 = IsIP6(ip); a->IsIPv6 = IsIP6(ip);
if (a->IsIPv6)
{
a->NoNatT = true;
}
a->RecvBlockQueue = NewQueue(); a->RecvBlockQueue = NewQueue();
Rand(a->NextIv, sizeof(a->NextIv)); Rand(a->NextIv, sizeof(a->NextIv));
@ -1088,6 +1093,8 @@ void NatT_GetIpThread(THREAD *thread, void *param)
{ {
UDP_ACCEL *a; UDP_ACCEL *a;
char hostname[MAX_SIZE]; char hostname[MAX_SIZE];
static IP dummy_ip = {0};
UINT num_retry = 0;
// Validate arguments // Validate arguments
if (thread == NULL || param == NULL) if (thread == NULL || param == NULL)
{ {
@ -1096,11 +1103,17 @@ void NatT_GetIpThread(THREAD *thread, void *param)
a = (UDP_ACCEL *)param; a = (UDP_ACCEL *)param;
RUDPGetRegisterHostNameByIP(hostname, sizeof(hostname), NULL); if (IsZeroIP(&dummy_ip))
{
SetIP(&dummy_ip, 11, Rand8(), Rand8(), Rand8());
}
RUDPGetRegisterHostNameByIP(hostname, sizeof(hostname), &dummy_ip);
while (a->NatT_Halt == false) while (a->NatT_Halt == false)
{ {
IP ip; IP ip;
UINT wait_time = UDP_NAT_T_GET_IP_INTERVAL;
// Get the IP address // Get the IP address
bool ret = GetIP4Ex(&ip, hostname, 0, &a->NatT_Halt); bool ret = GetIP4Ex(&ip, hostname, 0, &a->NatT_Halt);
@ -1125,7 +1138,11 @@ void NatT_GetIpThread(THREAD *thread, void *param)
} }
// Fail to get // Fail to get
Wait(a->NatT_HaltEvent, UDP_NAT_T_GET_IP_INTERVAL); num_retry++;
wait_time = (UINT)(MIN((UINT64)UDP_NAT_T_GET_IP_INTERVAL * (UINT64)num_retry, (UINT64)UDP_NAT_T_GET_IP_INTERVAL_MAX));
Wait(a->NatT_HaltEvent, wait_time);
} }
} }

View File

@ -1,4 +1,4 @@
BUILD_NUMBER 9506 BUILD_NUMBER 9514
VERSION 411 VERSION 412
BUILD_NAME beta BUILD_NAME beta
BUILD_DATE 20141022_195155 BUILD_DATE 20141117_214116

361
src/Makefile64 Normal file
View File

@ -0,0 +1,361 @@
# PacketiX VPN Source Code
# Copyright (c) SoftEther Corporation. All Rights Reserved.
# Platform: linux-x86-64bit
# Variables
CC=gcc
OPTIONS_COMPILE_DEBUG=-DUNIX_LINUX -DCPU_64 -DCPU_X64 -D_DEBUG -DDEBUG -DUNIX -D_REENTRANT -DREENTRANT -D_THREAD_SAFE -D_THREADSAFE -DTHREAD_SAFE -DTHREADSAFE -D_FILE_OFFSET_BITS=64 -I./ -I./Cedar/ -I./Mayaqua/ -g -fsigned-char -pthread -m64
OPTIONS_LINK_DEBUG=-g -fsigned-char -pthread -m64 -lm -ldl -lrt -lpthread -L./ lib/64/libssl.a lib/64/libcrypto.a lib/64/libiconv.a lib/64/libcharset.a lib/64/libedit.a lib/64/libncurses.a lib/64/libz.a lib/64/libintelaes.a
OPTIONS_COMPILE_RELEASE=-DUNIX_LINUX -DCPU_64 -DCPU_X64 -DNDEBUG -DVPN_SPEED -DMAYAQUA_REPLACE -DUNIX -D_REENTRANT -DREENTRANT -D_THREAD_SAFE -D_THREADSAFE -DTHREAD_SAFE -DTHREADSAFE -D_FILE_OFFSET_BITS=64 -I./ -I./Cedar/ -I./Mayaqua/ -O2 -fsigned-char -pthread -m64
OPTIONS_LINK_RELEASE=-O2 -fsigned-char -pthread -m64 -lm -ldl -lrt -lpthread -L./ lib/64/libssl.a lib/64/libcrypto.a lib/64/libiconv.a lib/64/libcharset.a lib/64/libedit.a lib/64/libncurses.a lib/64/libz.a lib/64/libintelaes.a
ifeq ($(DEBUG),YES)
OPTIONS_COMPILE=$(OPTIONS_COMPILE_DEBUG)
OPTIONS_LINK=$(OPTIONS_LINK_DEBUG)
else
OPTIONS_COMPILE=$(OPTIONS_COMPILE_RELEASE)
OPTIONS_LINK=$(OPTIONS_LINK_RELEASE)
endif
# Files
HEADERS_MAYAQUA=Mayaqua/Cfg.h Mayaqua/cryptoki.h Mayaqua/Encrypt.h Mayaqua/FileIO.h Mayaqua/intelaes/iaesni.h Mayaqua/Internat.h Mayaqua/Kernel.h Mayaqua/Mayaqua.h Mayaqua/MayaType.h Mayaqua/Memory.h Mayaqua/Microsoft.h Mayaqua/Network.h Mayaqua/Object.h Mayaqua/openssl/aes.h Mayaqua/openssl/asn1.h Mayaqua/openssl/asn1_mac.h Mayaqua/openssl/asn1t.h Mayaqua/openssl/bio.h Mayaqua/openssl/blowfish.h Mayaqua/openssl/bn.h Mayaqua/openssl/buffer.h Mayaqua/openssl/cast.h Mayaqua/openssl/comp.h Mayaqua/openssl/conf.h Mayaqua/openssl/conf_api.h Mayaqua/openssl/crypto.h Mayaqua/openssl/des.h Mayaqua/openssl/des_old.h Mayaqua/openssl/dh.h Mayaqua/openssl/dsa.h Mayaqua/openssl/dso.h Mayaqua/openssl/dtls1.h Mayaqua/openssl/e_os2.h Mayaqua/openssl/ebcdic.h Mayaqua/openssl/ec.h Mayaqua/openssl/ecdh.h Mayaqua/openssl/ecdsa.h Mayaqua/openssl/engine.h Mayaqua/openssl/err.h Mayaqua/openssl/evp.h Mayaqua/openssl/fips.h Mayaqua/openssl/fips_rand.h Mayaqua/openssl/hmac.h Mayaqua/openssl/idea.h Mayaqua/openssl/krb5_asn.h Mayaqua/openssl/kssl.h Mayaqua/openssl/lhash.h Mayaqua/openssl/md2.h Mayaqua/openssl/md4.h Mayaqua/openssl/md5.h Mayaqua/openssl/mdc2.h Mayaqua/openssl/obj_mac.h Mayaqua/openssl/objects.h Mayaqua/openssl/ocsp.h Mayaqua/openssl/opensslconf.h Mayaqua/openssl/opensslv.h Mayaqua/openssl/ossl_typ.h Mayaqua/openssl/pem.h Mayaqua/openssl/pem2.h Mayaqua/openssl/pkcs12.h Mayaqua/openssl/pkcs7.h Mayaqua/openssl/pq_compat.h Mayaqua/openssl/pqueue.h Mayaqua/openssl/rand.h Mayaqua/openssl/rc2.h Mayaqua/openssl/rc4.h Mayaqua/openssl/rc5.h Mayaqua/openssl/ripemd.h Mayaqua/openssl/rsa.h Mayaqua/openssl/safestack.h Mayaqua/openssl/sha.h Mayaqua/openssl/ssl.h Mayaqua/openssl/ssl2.h Mayaqua/openssl/ssl23.h Mayaqua/openssl/ssl3.h Mayaqua/openssl/stack.h Mayaqua/openssl/store.h Mayaqua/openssl/symhacks.h Mayaqua/openssl/tls1.h Mayaqua/openssl/tmdiff.h Mayaqua/openssl/txt_db.h Mayaqua/openssl/ui.h Mayaqua/openssl/ui_compat.h Mayaqua/openssl/x509.h Mayaqua/openssl/x509_vfy.h Mayaqua/openssl/x509v3.h Mayaqua/OS.h Mayaqua/Pack.h Mayaqua/pkcs11.h Mayaqua/pkcs11f.h Mayaqua/pkcs11t.h Mayaqua/Secure.h Mayaqua/Str.h Mayaqua/Table.h Mayaqua/TcpIp.h Mayaqua/Tick64.h Mayaqua/Tracking.h Mayaqua/TunTap.h Mayaqua/Unix.h Mayaqua/Win32.h Mayaqua/zlib/zconf.h Mayaqua/zlib/zlib.h
HEADERS_CEDAR=Cedar/Account.h Cedar/Admin.h Cedar/AzureClient.h Cedar/AzureServer.h Cedar/Bridge.h Cedar/BridgeUnix.h Cedar/BridgeWin32.h Cedar/Cedar.h Cedar/CedarPch.h Cedar/CedarType.h Cedar/Client.h Cedar/CM.h Cedar/CMInner.h Cedar/Command.h Cedar/Connection.h Cedar/Console.h Cedar/Database.h Cedar/DDNS.h Cedar/EM.h Cedar/EMInner.h Cedar/EtherLog.h Cedar/Hub.h Cedar/Interop_OpenVPN.h Cedar/Interop_SSTP.h Cedar/IPsec.h Cedar/IPsec_EtherIP.h Cedar/IPsec_IKE.h Cedar/IPsec_IkePacket.h Cedar/IPsec_IPC.h Cedar/IPsec_L2TP.h Cedar/IPsec_PPP.h Cedar/IPsec_Win7.h Cedar/IPsec_Win7Inner.h Cedar/Layer3.h Cedar/Link.h Cedar/Listener.h Cedar/Logging.h Cedar/Nat.h Cedar/NativeStack.h Cedar/NM.h Cedar/NMInner.h Cedar/NullLan.h Cedar/Protocol.h Cedar/Radius.h Cedar/Remote.h Cedar/Sam.h Cedar/SecureInfo.h Cedar/SecureNAT.h Cedar/SeLowUser.h Cedar/Server.h Cedar/Session.h Cedar/SM.h Cedar/SMInner.h Cedar/SW.h Cedar/SWInner.h Cedar/UdpAccel.h Cedar/UT.h Cedar/VG.h Cedar/Virtual.h Cedar/VLan.h Cedar/VLanUnix.h Cedar/VLanWin32.h Cedar/WaterMark.h Cedar/WebUI.h Cedar/Win32Com.h Cedar/WinUi.h Cedar/Wpc.h
OBJECTS_MAYAQUA=object/Mayaqua/Cfg.o object/Mayaqua/Encrypt.o object/Mayaqua/FileIO.o object/Mayaqua/Internat.o object/Mayaqua/Kernel.o object/Mayaqua/Mayaqua.o object/Mayaqua/Memory.o object/Mayaqua/Microsoft.o object/Mayaqua/Network.o object/Mayaqua/Object.o object/Mayaqua/OS.o object/Mayaqua/Pack.o object/Mayaqua/Secure.o object/Mayaqua/Str.o object/Mayaqua/Table.o object/Mayaqua/TcpIp.o object/Mayaqua/Tick64.o object/Mayaqua/Tracking.o object/Mayaqua/Unix.o object/Mayaqua/Win32.o
OBJECTS_CEDAR=object/Cedar/Account.o object/Cedar/Admin.o object/Cedar/AzureClient.o object/Cedar/AzureServer.o object/Cedar/Bridge.o object/Cedar/BridgeUnix.o object/Cedar/BridgeWin32.o object/Cedar/Cedar.o object/Cedar/CedarPch.o object/Cedar/Client.o object/Cedar/CM.o object/Cedar/Command.o object/Cedar/Connection.o object/Cedar/Console.o object/Cedar/Database.o object/Cedar/DDNS.o object/Cedar/EM.o object/Cedar/EtherLog.o object/Cedar/Hub.o object/Cedar/Interop_OpenVPN.o object/Cedar/Interop_SSTP.o object/Cedar/IPsec.o object/Cedar/IPsec_EtherIP.o object/Cedar/IPsec_IKE.o object/Cedar/IPsec_IkePacket.o object/Cedar/IPsec_IPC.o object/Cedar/IPsec_L2TP.o object/Cedar/IPsec_PPP.o object/Cedar/IPsec_Win7.o object/Cedar/Layer3.o object/Cedar/Link.o object/Cedar/Listener.o object/Cedar/Logging.o object/Cedar/Nat.o object/Cedar/NativeStack.o object/Cedar/NM.o object/Cedar/NullLan.o object/Cedar/Protocol.o object/Cedar/Radius.o object/Cedar/Remote.o object/Cedar/Sam.o object/Cedar/SecureInfo.o object/Cedar/SecureNAT.o object/Cedar/SeLowUser.o object/Cedar/Server.o object/Cedar/Session.o object/Cedar/SM.o object/Cedar/SW.o object/Cedar/UdpAccel.o object/Cedar/UT.o object/Cedar/VG.o object/Cedar/Virtual.o object/Cedar/VLan.o object/Cedar/VLanUnix.o object/Cedar/VLanWin32.o object/Cedar/WaterMark.o object/Cedar/WebUI.o object/Cedar/WinUi.o object/Cedar/Wpc.o
# Build Action
default: build
build: $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) bin/ham bin/vpnserver bin/vpnbridge bin/vpnclient bin/vpncmd
# Mayaqua Kernel Code
object/Mayaqua/Cfg.o: Mayaqua/Cfg.c $(HEADERS_MAYAQUA)
@mkdir -p object/
@mkdir -p object/Mayaqua/
@mkdir -p object/Cedar/
@mkdir -p code/
$(CC) $(OPTIONS_COMPILE) -c Mayaqua/Cfg.c -o object/Mayaqua/Cfg.o
object/Mayaqua/Encrypt.o: Mayaqua/Encrypt.c $(HEADERS_MAYAQUA)
$(CC) $(OPTIONS_COMPILE) -c Mayaqua/Encrypt.c -o object/Mayaqua/Encrypt.o
object/Mayaqua/FileIO.o: Mayaqua/FileIO.c $(HEADERS_MAYAQUA)
$(CC) $(OPTIONS_COMPILE) -c Mayaqua/FileIO.c -o object/Mayaqua/FileIO.o
object/Mayaqua/Internat.o: Mayaqua/Internat.c $(HEADERS_MAYAQUA)
$(CC) $(OPTIONS_COMPILE) -c Mayaqua/Internat.c -o object/Mayaqua/Internat.o
object/Mayaqua/Kernel.o: Mayaqua/Kernel.c $(HEADERS_MAYAQUA)
$(CC) $(OPTIONS_COMPILE) -c Mayaqua/Kernel.c -o object/Mayaqua/Kernel.o
object/Mayaqua/Mayaqua.o: Mayaqua/Mayaqua.c $(HEADERS_MAYAQUA)
$(CC) $(OPTIONS_COMPILE) -c Mayaqua/Mayaqua.c -o object/Mayaqua/Mayaqua.o
object/Mayaqua/Memory.o: Mayaqua/Memory.c $(HEADERS_MAYAQUA)
$(CC) $(OPTIONS_COMPILE) -c Mayaqua/Memory.c -o object/Mayaqua/Memory.o
object/Mayaqua/Microsoft.o: Mayaqua/Microsoft.c $(HEADERS_MAYAQUA)
$(CC) $(OPTIONS_COMPILE) -c Mayaqua/Microsoft.c -o object/Mayaqua/Microsoft.o
object/Mayaqua/Network.o: Mayaqua/Network.c $(HEADERS_MAYAQUA)
$(CC) $(OPTIONS_COMPILE) -c Mayaqua/Network.c -o object/Mayaqua/Network.o
object/Mayaqua/Object.o: Mayaqua/Object.c $(HEADERS_MAYAQUA)
$(CC) $(OPTIONS_COMPILE) -c Mayaqua/Object.c -o object/Mayaqua/Object.o
object/Mayaqua/OS.o: Mayaqua/OS.c $(HEADERS_MAYAQUA)
$(CC) $(OPTIONS_COMPILE) -c Mayaqua/OS.c -o object/Mayaqua/OS.o
object/Mayaqua/Pack.o: Mayaqua/Pack.c $(HEADERS_MAYAQUA)
$(CC) $(OPTIONS_COMPILE) -c Mayaqua/Pack.c -o object/Mayaqua/Pack.o
object/Mayaqua/Secure.o: Mayaqua/Secure.c $(HEADERS_MAYAQUA)
$(CC) $(OPTIONS_COMPILE) -c Mayaqua/Secure.c -o object/Mayaqua/Secure.o
object/Mayaqua/Str.o: Mayaqua/Str.c $(HEADERS_MAYAQUA)
$(CC) $(OPTIONS_COMPILE) -c Mayaqua/Str.c -o object/Mayaqua/Str.o
object/Mayaqua/Table.o: Mayaqua/Table.c $(HEADERS_MAYAQUA)
$(CC) $(OPTIONS_COMPILE) -c Mayaqua/Table.c -o object/Mayaqua/Table.o
object/Mayaqua/TcpIp.o: Mayaqua/TcpIp.c $(HEADERS_MAYAQUA)
$(CC) $(OPTIONS_COMPILE) -c Mayaqua/TcpIp.c -o object/Mayaqua/TcpIp.o
object/Mayaqua/Tick64.o: Mayaqua/Tick64.c $(HEADERS_MAYAQUA)
$(CC) $(OPTIONS_COMPILE) -c Mayaqua/Tick64.c -o object/Mayaqua/Tick64.o
object/Mayaqua/Tracking.o: Mayaqua/Tracking.c $(HEADERS_MAYAQUA)
$(CC) $(OPTIONS_COMPILE) -c Mayaqua/Tracking.c -o object/Mayaqua/Tracking.o
object/Mayaqua/Unix.o: Mayaqua/Unix.c $(HEADERS_MAYAQUA)
$(CC) $(OPTIONS_COMPILE) -c Mayaqua/Unix.c -o object/Mayaqua/Unix.o
object/Mayaqua/Win32.o: Mayaqua/Win32.c $(HEADERS_MAYAQUA)
$(CC) $(OPTIONS_COMPILE) -c Mayaqua/Win32.c -o object/Mayaqua/Win32.o
# Cedar Communication Module Code
object/Cedar/Account.o: Cedar/Account.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/Account.c -o object/Cedar/Account.o
object/Cedar/Admin.o: Cedar/Admin.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/Admin.c -o object/Cedar/Admin.o
object/Cedar/AzureClient.o: Cedar/AzureClient.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/AzureClient.c -o object/Cedar/AzureClient.o
object/Cedar/AzureServer.o: Cedar/AzureServer.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/AzureServer.c -o object/Cedar/AzureServer.o
object/Cedar/Bridge.o: Cedar/Bridge.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) Cedar/BridgeUnix.c
$(CC) $(OPTIONS_COMPILE) -c Cedar/Bridge.c -o object/Cedar/Bridge.o
object/Cedar/BridgeUnix.o: Cedar/BridgeUnix.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/BridgeUnix.c -o object/Cedar/BridgeUnix.o
object/Cedar/BridgeWin32.o: Cedar/BridgeWin32.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/BridgeWin32.c -o object/Cedar/BridgeWin32.o
object/Cedar/Cedar.o: Cedar/Cedar.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/Cedar.c -o object/Cedar/Cedar.o
object/Cedar/CedarPch.o: Cedar/CedarPch.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/CedarPch.c -o object/Cedar/CedarPch.o
object/Cedar/Client.o: Cedar/Client.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/Client.c -o object/Cedar/Client.o
object/Cedar/CM.o: Cedar/CM.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/CM.c -o object/Cedar/CM.o
object/Cedar/Command.o: Cedar/Command.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/Command.c -o object/Cedar/Command.o
object/Cedar/Connection.o: Cedar/Connection.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/Connection.c -o object/Cedar/Connection.o
object/Cedar/Console.o: Cedar/Console.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/Console.c -o object/Cedar/Console.o
object/Cedar/Database.o: Cedar/Database.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/Database.c -o object/Cedar/Database.o
object/Cedar/DDNS.o: Cedar/DDNS.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/DDNS.c -o object/Cedar/DDNS.o
object/Cedar/EM.o: Cedar/EM.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/EM.c -o object/Cedar/EM.o
object/Cedar/EtherLog.o: Cedar/EtherLog.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/EtherLog.c -o object/Cedar/EtherLog.o
object/Cedar/Hub.o: Cedar/Hub.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/Hub.c -o object/Cedar/Hub.o
object/Cedar/Interop_OpenVPN.o: Cedar/Interop_OpenVPN.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/Interop_OpenVPN.c -o object/Cedar/Interop_OpenVPN.o
object/Cedar/Interop_SSTP.o: Cedar/Interop_SSTP.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/Interop_SSTP.c -o object/Cedar/Interop_SSTP.o
object/Cedar/IPsec.o: Cedar/IPsec.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/IPsec.c -o object/Cedar/IPsec.o
object/Cedar/IPsec_EtherIP.o: Cedar/IPsec_EtherIP.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/IPsec_EtherIP.c -o object/Cedar/IPsec_EtherIP.o
object/Cedar/IPsec_IKE.o: Cedar/IPsec_IKE.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/IPsec_IKE.c -o object/Cedar/IPsec_IKE.o
object/Cedar/IPsec_IkePacket.o: Cedar/IPsec_IkePacket.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/IPsec_IkePacket.c -o object/Cedar/IPsec_IkePacket.o
object/Cedar/IPsec_IPC.o: Cedar/IPsec_IPC.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/IPsec_IPC.c -o object/Cedar/IPsec_IPC.o
object/Cedar/IPsec_L2TP.o: Cedar/IPsec_L2TP.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/IPsec_L2TP.c -o object/Cedar/IPsec_L2TP.o
object/Cedar/IPsec_PPP.o: Cedar/IPsec_PPP.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/IPsec_PPP.c -o object/Cedar/IPsec_PPP.o
object/Cedar/IPsec_Win7.o: Cedar/IPsec_Win7.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/IPsec_Win7.c -o object/Cedar/IPsec_Win7.o
object/Cedar/Layer3.o: Cedar/Layer3.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/Layer3.c -o object/Cedar/Layer3.o
object/Cedar/Link.o: Cedar/Link.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/Link.c -o object/Cedar/Link.o
object/Cedar/Listener.o: Cedar/Listener.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/Listener.c -o object/Cedar/Listener.o
object/Cedar/Logging.o: Cedar/Logging.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/Logging.c -o object/Cedar/Logging.o
object/Cedar/Nat.o: Cedar/Nat.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/Nat.c -o object/Cedar/Nat.o
object/Cedar/NativeStack.o: Cedar/NativeStack.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/NativeStack.c -o object/Cedar/NativeStack.o
object/Cedar/NM.o: Cedar/NM.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/NM.c -o object/Cedar/NM.o
object/Cedar/NullLan.o: Cedar/NullLan.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/NullLan.c -o object/Cedar/NullLan.o
object/Cedar/Protocol.o: Cedar/Protocol.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/Protocol.c -o object/Cedar/Protocol.o
object/Cedar/Radius.o: Cedar/Radius.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/Radius.c -o object/Cedar/Radius.o
object/Cedar/Remote.o: Cedar/Remote.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/Remote.c -o object/Cedar/Remote.o
object/Cedar/Sam.o: Cedar/Sam.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/Sam.c -o object/Cedar/Sam.o
object/Cedar/SecureInfo.o: Cedar/SecureInfo.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/SecureInfo.c -o object/Cedar/SecureInfo.o
object/Cedar/SecureNAT.o: Cedar/SecureNAT.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/SecureNAT.c -o object/Cedar/SecureNAT.o
object/Cedar/SeLowUser.o: Cedar/SeLowUser.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/SeLowUser.c -o object/Cedar/SeLowUser.o
object/Cedar/Server.o: Cedar/Server.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/Server.c -o object/Cedar/Server.o
object/Cedar/Session.o: Cedar/Session.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/Session.c -o object/Cedar/Session.o
object/Cedar/SM.o: Cedar/SM.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/SM.c -o object/Cedar/SM.o
object/Cedar/SW.o: Cedar/SW.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/SW.c -o object/Cedar/SW.o
object/Cedar/UdpAccel.o: Cedar/UdpAccel.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/UdpAccel.c -o object/Cedar/UdpAccel.o
object/Cedar/UT.o: Cedar/UT.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/UT.c -o object/Cedar/UT.o
object/Cedar/VG.o: Cedar/VG.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/VG.c -o object/Cedar/VG.o
object/Cedar/Virtual.o: Cedar/Virtual.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/Virtual.c -o object/Cedar/Virtual.o
object/Cedar/VLan.o: Cedar/VLan.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/VLan.c -o object/Cedar/VLan.o
object/Cedar/VLanUnix.o: Cedar/VLanUnix.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/VLanUnix.c -o object/Cedar/VLanUnix.o
object/Cedar/VLanWin32.o: Cedar/VLanWin32.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/VLanWin32.c -o object/Cedar/VLanWin32.o
object/Cedar/WaterMark.o: Cedar/WaterMark.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/WaterMark.c -o object/Cedar/WaterMark.o
object/Cedar/WebUI.o: Cedar/WebUI.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/WebUI.c -o object/Cedar/WebUI.o
object/Cedar/WinUi.o: Cedar/WinUi.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/WinUi.c -o object/Cedar/WinUi.o
object/Cedar/Wpc.o: Cedar/Wpc.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Cedar/Wpc.c -o object/Cedar/Wpc.o
# Ham
bin/ham: code/Ham.a $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR)
$(CC) code/Ham.a $(OPTIONS_LINK) -o bin/ham
code/Ham.a: object/Ham.o $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR)
rm -f code/Ham.a
ar r code/Ham.a $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) object/Ham.o
ranlib code/Ham.a
object/Ham.o: Ham/Ham.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c Ham/Ham.c -o object/Ham.o
# vpnserver
bin/vpnserver: code/vpnserver.a $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR)
$(CC) code/vpnserver.a $(OPTIONS_LINK) -o bin/vpnserver
code/vpnserver.a: object/vpnserver.o $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR)
rm -f code/vpnserver.a
ar r code/vpnserver.a $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) object/vpnserver.o
ranlib code/vpnserver.a
object/vpnserver.o: vpnserver/vpnserver.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c vpnserver/vpnserver.c -o object/vpnserver.o
# vpnbridge
bin/vpnbridge: code/vpnbridge.a $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR)
$(CC) code/vpnbridge.a $(OPTIONS_LINK) -o bin/vpnbridge
code/vpnbridge.a: object/vpnbridge.o $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR)
rm -f code/vpnbridge.a
ar r code/vpnbridge.a $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) object/vpnbridge.o
ranlib code/vpnbridge.a
object/vpnbridge.o: vpnbridge/vpnbridge.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c vpnbridge/vpnbridge.c -o object/vpnbridge.o
# vpnclient
bin/vpnclient: code/vpnclient.a $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR)
$(CC) code/vpnclient.a $(OPTIONS_LINK) -o bin/vpnclient
code/vpnclient.a: object/vpnclient.o $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR)
rm -f code/vpnclient.a
ar r code/vpnclient.a $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) object/vpnclient.o
ranlib code/vpnclient.a
object/vpnclient.o: vpnclient/vpncsvc.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c vpnclient/vpncsvc.c -o object/vpnclient.o
# vpncmd
bin/vpncmd: code/vpncmd.a $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR)
$(CC) code/vpncmd.a $(OPTIONS_LINK) -o bin/vpncmd
code/vpncmd.a: object/vpncmd.o $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR)
rm -f code/vpncmd.a
ar r code/vpncmd.a $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) object/vpncmd.o
ranlib code/vpncmd.a
object/vpncmd.o: vpncmd/vpncmd.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR)
$(CC) $(OPTIONS_COMPILE) -c vpncmd/vpncmd.c -o object/vpncmd.o
# Clean
clean:
-rm -f $(OBJECTS_MAYAQUA)
-rm -f $(OBJECTS_CEDAR)
-rm -f object/Ham.o
-rm -f code/Ham.a
-rm -f bin/ham
-rm -f object/vpnserver.o
-rm -f code/vpnserver.a
-rm -f bin/vpnserver
-rm -f object/vpnbridge.o
-rm -f code/vpnbridge.a
-rm -f bin/vpnbridge
-rm -f object/vpnclient.o
-rm -f code/vpnclient.a
-rm -f bin/vpnclient
-rm -f object/vpncmd.o
-rm -f code/vpncmd.a
-rm -f bin/vpncmd
# Help Strings
help:
@echo "make [DEBUG=YES]"

View File

@ -229,6 +229,8 @@ static LOCK *host_ip_address_list_cache_lock = NULL;
static UINT64 host_ip_address_list_cache_last = 0; static UINT64 host_ip_address_list_cache_last = 0;
static LIST *host_ip_address_cache = NULL; static LIST *host_ip_address_cache = NULL;
static bool disable_gethostname_by_accept = false; static bool disable_gethostname_by_accept = false;
static COUNTER *getip_thread_counter = NULL;
static UINT max_getip_thread = 0;
static char *cipher_list = "RC4-MD5 RC4-SHA AES128-SHA AES256-SHA DES-CBC-SHA DES-CBC3-SHA DHE-RSA-AES128-SHA DHE-RSA-AES256-SHA"; static char *cipher_list = "RC4-MD5 RC4-SHA AES128-SHA AES256-SHA DES-CBC-SHA DES-CBC3-SHA DHE-RSA-AES128-SHA DHE-RSA-AES256-SHA";
@ -2005,6 +2007,17 @@ bool RUDPIsIpInValidateList(RUDP_STACK *r, IP *ip)
return false; return false;
} }
// Always allow private IP addresses
if (IsIPPrivate(ip))
{
return true;
}
if (IsIPAddressInSameLocalNetwork(ip))
{
return true;
}
for (i = 0;i < LIST_NUM(r->NatT_SourceIpList);i++) for (i = 0;i < LIST_NUM(r->NatT_SourceIpList);i++)
{ {
RUDP_SOURCE_IP *s = (RUDP_SOURCE_IP *)LIST_DATA(r->NatT_SourceIpList, i); RUDP_SOURCE_IP *s = (RUDP_SOURCE_IP *)LIST_DATA(r->NatT_SourceIpList, i);
@ -4350,6 +4363,7 @@ void RUDPIpQueryThread(THREAD *thread, void *param)
void *route_change_poller = NULL; void *route_change_poller = NULL;
char current_hostname[MAX_SIZE]; char current_hostname[MAX_SIZE];
bool last_time_ip_changed = false; bool last_time_ip_changed = false;
UINT num_retry = 0;
// Validate arguments // Validate arguments
if (thread == NULL || param == NULL) if (thread == NULL || param == NULL)
{ {
@ -4429,7 +4443,9 @@ void RUDPIpQueryThread(THREAD *thread, void *param)
if (IsZeroIp(&r->NatT_IP)) if (IsZeroIp(&r->NatT_IP))
{ {
next_getip_tick = now + (UINT64)UDP_NAT_T_GET_IP_INTERVAL; num_retry++;
next_getip_tick = now + MIN((UINT64)UDP_NAT_T_GET_IP_INTERVAL * (UINT64)num_retry, (UINT64)UDP_NAT_T_GET_IP_INTERVAL_MAX);
} }
else else
{ {
@ -6730,6 +6746,46 @@ bool IsInSameNetwork4(IP *a1, IP *a2, IP *subnet)
return false; return false;
} }
bool IsInSameNetwork4Standard(IP *a1, IP *a2)
{
IP subnet;
SetIP(&subnet, 255, 255, 0, 0);
return IsInSameNetwork4(a1, a2, &subnet);
}
bool IsInSameLocalNetworkToMe4(IP *a)
{
IP g1, g2;
Zero(&g1, sizeof(g1));
Zero(&g2, sizeof(g2));
GetCurrentGlobalIPGuess(&g1, false);
if (IsZeroIp(&g1) == false)
{
if (IsInSameNetwork4Standard(&g1, a))
{
return true;
}
}
if (GetCurrentGlobalIP(&g2, false))
{
if (IsInSameNetwork4Standard(&g2, a))
{
return true;
}
}
if (IsIPAddressInSameLocalNetwork(a))
{
return true;
}
return false;
}
// Check whether it is a network address prefix // Check whether it is a network address prefix
bool IsNetworkAddress6(IP *ip, IP *subnet) bool IsNetworkAddress6(IP *ip, IP *subnet)
@ -10926,6 +10982,20 @@ void InitHostCache()
HostCacheList = NewList(CompareHostCache); HostCacheList = NewList(CompareHostCache);
} }
// Get the number of wait threads
UINT GetNumWaitThread()
{
UINT ret = 0;
LockList(WaitThreadList);
{
ret = LIST_NUM(WaitThreadList);
}
UnlockList(WaitThreadList);
return ret;
}
// Add the thread to the thread waiting list // Add the thread to the thread waiting list
void AddWaitThread(THREAD *t) void AddWaitThread(THREAD *t)
{ {
@ -16631,6 +16701,8 @@ void GetIP4Ex6ExThread(THREAD *t, void *param)
ReleaseGetIPThreadParam(p); ReleaseGetIPThreadParam(p);
DelWaitThread(t); DelWaitThread(t);
Dec(getip_thread_counter);
} }
// Perform a forward DNS query (with timeout) // Perform a forward DNS query (with timeout)
@ -16645,9 +16717,13 @@ bool GetIP4Ex6Ex2(IP *ip, char *hostname_arg, UINT timeout, bool ipv6, bool *can
bool ret = false; bool ret = false;
UINT64 start_tick = 0; UINT64 start_tick = 0;
UINT64 end_tick = 0; UINT64 end_tick = 0;
UINT64 spent_time = 0;
UINT64 now;
UINT n;
bool use_dns_proxy = false; bool use_dns_proxy = false;
char hostname[260]; char hostname[260];
UINT i; UINT i;
bool timed_out;
// Validate arguments // Validate arguments
if (ip == NULL || hostname_arg == NULL) if (ip == NULL || hostname_arg == NULL)
{ {
@ -16718,6 +16794,89 @@ bool GetIP4Ex6Ex2(IP *ip, char *hostname_arg, UINT timeout, bool ipv6, bool *can
} }
// check the quota
start_tick = Tick64();
end_tick = start_tick + (UINT64)timeout;
n = 0;
timed_out = false;
while (true)
{
UINT64 now = Tick64();
UINT64 remain;
UINT remain32;
if (GetGetIpThreadMaxNum() > GetCurrentGetIpThreadNum())
{
// below the quota
break;
}
if (now >= end_tick)
{
// timeouted
timed_out = true;
break;
}
if (cancel != NULL && (*cancel))
{
// cancelled
timed_out = true;
break;
}
remain = end_tick - now;
remain32 = MIN((UINT)remain, 100);
SleepThread(remain32);
n++;
}
now = Tick64();
spent_time = now - start_tick;
if (n == 0)
{
spent_time = 0;
}
if ((UINT)spent_time >= timeout)
{
timed_out = true;
}
if (timed_out)
{
IP ip2;
// timed out, cancelled
if (QueryDnsCache(&ip2, hostname))
{
ret = true;
Copy(ip, &ip2, sizeof(IP));
}
Debug("GetIP4Ex6Ex2: Worker thread quota exceeded: max=%u current=%u\n",
GetGetIpThreadMaxNum(), GetCurrentGetIpThreadNum());
return ret;
}
// Increment the counter
Inc(getip_thread_counter);
if (spent_time != 0)
{
Debug("GetIP4Ex6Ex2: Waited for %u msecs to create a worker thread.\n",
spent_time);
}
timeout -= (UINT)spent_time;
p = ZeroMalloc(sizeof(GETIP_THREAD_PARAM)); p = ZeroMalloc(sizeof(GETIP_THREAD_PARAM));
p->Ref = NewRef(); p->Ref = NewRef();
StrCpy(p->HostName, sizeof(p->HostName), hostname); StrCpy(p->HostName, sizeof(p->HostName), hostname);
@ -16774,6 +16933,7 @@ bool GetIP4Ex6Ex2(IP *ip, char *hostname_arg, UINT timeout, bool ipv6, bool *can
{ {
IP ip2; IP ip2;
#if 0
if (only_direct_dns == false) if (only_direct_dns == false)
{ {
if (ipv6) if (ipv6)
@ -16802,6 +16962,7 @@ bool GetIP4Ex6Ex2(IP *ip, char *hostname_arg, UINT timeout, bool ipv6, bool *can
} }
} }
} }
#endif
if (QueryDnsCache(&ip2, hostname)) if (QueryDnsCache(&ip2, hostname))
{ {
@ -17457,6 +17618,27 @@ void FreeSSLCtx(struct ssl_ctx_st *ctx)
SSL_CTX_free(ctx); SSL_CTX_free(ctx);
} }
// The number of get ip threads
void SetGetIpThreadMaxNum(UINT num)
{
max_getip_thread = num;
}
UINT GetGetIpThreadMaxNum()
{
UINT ret = max_getip_thread;
if (ret == 0)
{
ret = 0x7FFFFFFF;
}
return ret;
}
UINT GetCurrentGetIpThreadNum()
{
return Count(getip_thread_counter);
}
// Initialize the network communication module // Initialize the network communication module
void InitNetwork() void InitNetwork()
{ {
@ -17471,6 +17653,8 @@ void InitNetwork()
num_tcp_connections = NewCounter(); num_tcp_connections = NewCounter();
getip_thread_counter = NewCounter();
// Initialization of client list // Initialization of client list
InitIpClientList(); InitIpClientList();
@ -17515,6 +17699,8 @@ void InitNetwork()
dh_1024 = DhNewGroup2(); dh_1024 = DhNewGroup2();
Zero(rand_port_numbers, sizeof(rand_port_numbers)); Zero(rand_port_numbers, sizeof(rand_port_numbers));
SetGetIpThreadMaxNum(DEFAULT_GETIP_THREAD_MAX_NUM);
} }
// Enable the network name cache // Enable the network name cache
@ -17770,6 +17956,45 @@ void FreePrivateIPFile()
g_use_privateip_file = false; g_use_privateip_file = false;
} }
// Check whether the specified IP address is in the same network to this computer
bool IsIPAddressInSameLocalNetwork(IP *a)
{
bool ret = false;
LIST *o;
UINT i;
// Validate arguments
if (a == NULL)
{
return false;
}
o = GetHostIPAddressList();
if (o != NULL)
{
for (i = 0;i < LIST_NUM(o);i++)
{
IP *p = LIST_DATA(o, i);
if (IsIP4(p))
{
if (IsZeroIp(p) == false && p->addr[0] != 127)
{
if (IsInSameNetwork4Standard(p, a))
{
ret = true;
break;
}
}
}
}
FreeHostIPAddressList(o);
}
return ret;
}
// Guess the IPv4, IPv6 global address from the IP address list of the current interface // Guess the IPv4, IPv6 global address from the IP address list of the current interface
void GetCurrentGlobalIPGuess(IP *ip, bool ipv6) void GetCurrentGlobalIPGuess(IP *ip, bool ipv6)
{ {
@ -17950,6 +18175,9 @@ void FreeNetwork()
FreeDynList(); FreeDynList();
DeleteCounter(getip_thread_counter);
getip_thread_counter = NULL;
} }
// Add a socket to socket list // Add a socket to socket list
@ -19114,6 +19342,46 @@ int CmpIpAddressList(void *p1, void *p2)
return r; return r;
} }
// Get the IP address list hash of the host
UINT64 GetHostIPAddressListHash()
{
UINT i;
LIST *o;
BUF *buf = NewBuf();
UCHAR hash[SHA1_SIZE];
UINT64 ret = 0;
o = GetHostIPAddressList();
if (o != NULL)
{
for (i = 0;i < LIST_NUM(o);i++)
{
IP *ip = LIST_DATA(o, i);
char tmp[128];
Zero(tmp, sizeof(tmp));
IPToStr(tmp, sizeof(tmp), ip);
WriteBufStr(buf, tmp);
}
FreeHostIPAddressList(o);
}
WriteBufStr(buf, "test");
HashSha1(hash, buf->Buf, buf->Size);
FreeBuf(buf);
Copy(&ret, hash, sizeof(UINT64));
ret = Endian64(ret);
return ret;
}
// Get the IP address list of the host (using cache) // Get the IP address list of the host (using cache)
LIST *GetHostIPAddressList() LIST *GetHostIPAddressList()
{ {

View File

@ -147,6 +147,13 @@ struct DYN_VALUE
#define MAX_NUM_IGNORE_ERRORS 1024 #define MAX_NUM_IGNORE_ERRORS 1024
#ifndef USE_STRATEGY_LOW_MEMORY
#define DEFAULT_GETIP_THREAD_MAX_NUM 512
#else // USE_STRATEGY_LOW_MEMORY
#define DEFAULT_GETIP_THREAD_MAX_NUM 64
#endif // USE_STRATEGY_LOW_MEMORY
// SSL logging function // SSL logging function
//#define ENABLE_SSL_LOGGING //#define ENABLE_SSL_LOGGING
#define SSL_LOGGING_DIRNAME "@ssl_log" #define SSL_LOGGING_DIRNAME "@ssl_log"
@ -748,6 +755,7 @@ struct RUDP_SESSION
// Related to processing to get the IP address of the NAT-T server // Related to processing to get the IP address of the NAT-T server
#define UDP_NAT_T_GET_IP_INTERVAL DYN32(UDP_NAT_T_GET_IP_INTERVAL, (5 * 1000)) // IP address acquisition interval of NAT-T server (before success) #define UDP_NAT_T_GET_IP_INTERVAL DYN32(UDP_NAT_T_GET_IP_INTERVAL, (5 * 1000)) // IP address acquisition interval of NAT-T server (before success)
#define UDP_NAT_T_GET_IP_INTERVAL_MAX DYN32(UDP_NAT_T_GET_IP_INTERVAL, (150 * 1000)) // IP address acquisition interval of NAT-T server (before success)
#define UDP_NAT_T_GET_IP_INTERVAL_AFTER DYN32(UDP_NAT_T_GET_IP_INTERVAL_AFTER, (5 * 60 * 1000)) // IP address acquisition interval of NAT-T server (after success) #define UDP_NAT_T_GET_IP_INTERVAL_AFTER DYN32(UDP_NAT_T_GET_IP_INTERVAL_AFTER, (5 * 60 * 1000)) // IP address acquisition interval of NAT-T server (after success)
// Related to process to get the private IP address of itself with making a TCP connection to the NAT-T server // Related to process to get the private IP address of itself with making a TCP connection to the NAT-T server
@ -1418,6 +1426,7 @@ void RouteToStr(char *str, UINT str_size, ROUTE_ENTRY *e);
void DebugPrintRoute(ROUTE_ENTRY *e); void DebugPrintRoute(ROUTE_ENTRY *e);
void DebugPrintRouteTable(ROUTE_TABLE *r); void DebugPrintRouteTable(ROUTE_TABLE *r);
bool IsIPv6LocalNetworkAddress(IP *ip); bool IsIPv6LocalNetworkAddress(IP *ip);
UINT GetNumWaitThread();
#ifdef ENABLE_SSL_LOGGING #ifdef ENABLE_SSL_LOGGING
void SockEnableSslLogging(SOCK *s); void SockEnableSslLogging(SOCK *s);
@ -1484,6 +1493,8 @@ void IPNot4(IP *dst, IP *a);
void IPOr4(IP *dst, IP *a, IP *b); void IPOr4(IP *dst, IP *a, IP *b);
void IPAnd4(IP *dst, IP *a, IP *b); void IPAnd4(IP *dst, IP *a, IP *b);
bool IsInSameNetwork4(IP *a1, IP *a2, IP *subnet); bool IsInSameNetwork4(IP *a1, IP *a2, IP *subnet);
bool IsInSameNetwork4Standard(IP *a1, IP *a2);
bool IsInSameLocalNetworkToMe4(IP *a);
bool ParseIpAndSubnetMask4(char *src, UINT *ip, UINT *mask); bool ParseIpAndSubnetMask4(char *src, UINT *ip, UINT *mask);
bool ParseIpAndSubnetMask6(char *src, IP *ip, IP *mask); bool ParseIpAndSubnetMask6(char *src, IP *ip, IP *mask);
@ -1539,6 +1550,7 @@ bool IsMyIPAddress(IP *ip);
void FreeHostIPAddressList(LIST *o); void FreeHostIPAddressList(LIST *o);
void AddHostIPAddressToList(LIST *o, IP *ip); void AddHostIPAddressToList(LIST *o, IP *ip);
int CmpIpAddressList(void *p1, void *p2); int CmpIpAddressList(void *p1, void *p2);
UINT64 GetHostIPAddressListHash();
UDPLISTENER *NewUdpListener(UDPLISTENER_RECV_PROC *recv_proc, void *param); UDPLISTENER *NewUdpListener(UDPLISTENER_RECV_PROC *recv_proc, void *param);
void UdpListenerThread(THREAD *thread, void *param); void UdpListenerThread(THREAD *thread, void *param);
@ -1599,6 +1611,7 @@ bool SslBioSync(SSL_BIO *b, bool sync_send, bool sync_recv);
void SetCurrentGlobalIP(IP *ip, bool ipv6); void SetCurrentGlobalIP(IP *ip, bool ipv6);
bool GetCurrentGlobalIP(IP *ip, bool ipv6); bool GetCurrentGlobalIP(IP *ip, bool ipv6);
void GetCurrentGlobalIPGuess(IP *ip, bool ipv6); void GetCurrentGlobalIPGuess(IP *ip, bool ipv6);
bool IsIPAddressInSameLocalNetwork(IP *a);
bool IsIPPrivate(IP *ip); bool IsIPPrivate(IP *ip);
bool IsIPMyHost(IP *ip); bool IsIPMyHost(IP *ip);
@ -1631,6 +1644,11 @@ QUERYIPTHREAD *NewQueryIpThread(char *hostname, UINT interval_last_ok, UINT inte
bool GetQueryIpThreadResult(QUERYIPTHREAD *t, IP *ip); bool GetQueryIpThreadResult(QUERYIPTHREAD *t, IP *ip);
void FreeQueryIpThread(QUERYIPTHREAD *t); void FreeQueryIpThread(QUERYIPTHREAD *t);
void SetGetIpThreadMaxNum(UINT num);
UINT GetGetIpThreadMaxNum();
UINT GetCurrentGetIpThreadNum();
bool IsIpInStrList(IP *ip, char *ip_list); bool IsIpInStrList(IP *ip, char *ip_list);
bool IsInStrByStrList(char *str, char *str_list); bool IsInStrByStrList(char *str, char *str_list);

View File

@ -3304,11 +3304,44 @@ BUF *BuildDhcpOptionsBuf(LIST *o)
for (i = 0;i < LIST_NUM(o);i++) for (i = 0;i < LIST_NUM(o);i++)
{ {
DHCP_OPTION *d = LIST_DATA(o, i); DHCP_OPTION *d = LIST_DATA(o, i);
UINT current_size = d->Size;
UINT current_pos = 0;
id = (UCHAR)d->Id; id = (UCHAR)d->Id;
sz = (UCHAR)d->Size; if (d->Size <= 255)
{
sz = (UCHAR)d->Size;
}
else
{
sz = 0xFF;
}
WriteBuf(b, &id, 1); WriteBuf(b, &id, 1);
WriteBuf(b, &sz, 1); WriteBuf(b, &sz, 1);
WriteBuf(b, d->Data, d->Size); WriteBuf(b, d->Data, sz);
current_size -= sz;
current_pos += sz;
while (current_size != 0)
{
id = DHCP_ID_PRIVATE;
if (current_size <= 255)
{
sz = (UCHAR)current_size;
}
else
{
sz = 0xFF;
}
WriteBuf(b, &id, 1);
WriteBuf(b, &sz, 1);
WriteBuf(b, ((UCHAR *)d->Data) + current_pos, sz);
current_size -= sz;
current_pos += sz;
}
} }
id = 0xff; id = 0xff;
@ -3755,27 +3788,24 @@ BUF *DhcpBuildClasslessRouteData(DHCP_CLASSLESS_ROUTE_TABLE *t)
if (r->Exists && r->SubnetMaskLen <= 32) if (r->Exists && r->SubnetMaskLen <= 32)
{ {
if (b->Size <= (255 - 9)) UCHAR c;
{ UINT data_len;
UCHAR c; UINT ip32;
UINT data_len; UCHAR tmp[4];
UINT ip32;
UCHAR tmp[4];
// Width of subnet mask // Width of subnet mask
c = (UCHAR)r->SubnetMaskLen; c = (UCHAR)r->SubnetMaskLen;
WriteBuf(b, &c, 1); WriteBuf(b, &c, 1);
// Number of significant octets // Number of significant octets
data_len = (r->SubnetMaskLen + 7) / 8; data_len = (r->SubnetMaskLen + 7) / 8;
Zero(tmp, sizeof(tmp)); Zero(tmp, sizeof(tmp));
Copy(tmp, &r->Network, data_len); Copy(tmp, &r->Network, data_len);
WriteBuf(b, tmp, data_len); WriteBuf(b, tmp, data_len);
// Gateway // Gateway
ip32 = IPToUINT(&r->Gateway); ip32 = IPToUINT(&r->Gateway);
WriteBuf(b, &ip32, sizeof(UINT)); WriteBuf(b, &ip32, sizeof(UINT));
}
} }
} }
@ -3965,6 +3995,7 @@ LIST *ParseDhcpOptions(void *data, UINT size)
{ {
BUF *b; BUF *b;
LIST *o; LIST *o;
DHCP_OPTION *last_opt;
// Validate arguments // Validate arguments
if (data == NULL) if (data == NULL)
{ {
@ -3977,6 +4008,8 @@ LIST *ParseDhcpOptions(void *data, UINT size)
o = NewListFast(NULL); o = NewListFast(NULL);
last_opt = NULL;
while (true) while (true)
{ {
UCHAR c = 0; UCHAR c = 0;
@ -3995,12 +4028,27 @@ LIST *ParseDhcpOptions(void *data, UINT size)
break; break;
} }
opt = ZeroMalloc(sizeof(DHCP_OPTION)); if (c == DHCP_ID_PRIVATE && last_opt != NULL)
opt->Id = (UINT)c; {
opt->Size = (UINT)sz; UINT new_size = last_opt->Size + (UINT)sz;
opt->Data = ZeroMalloc((UINT)sz); UCHAR *new_buf = ZeroMalloc(new_size);
ReadBuf(b, opt->Data, sz); Copy(new_buf, last_opt->Data, last_opt->Size);
Add(o, opt); ReadBuf(b, new_buf + last_opt->Size, sz);
Free(last_opt->Data);
last_opt->Data = new_buf;
last_opt->Size = new_size;
}
else
{
opt = ZeroMalloc(sizeof(DHCP_OPTION));
opt->Id = (UINT)c;
opt->Size = (UINT)sz;
opt->Data = ZeroMalloc((UINT)sz);
ReadBuf(b, opt->Data, sz);
Add(o, opt);
last_opt = opt;
}
} }
FreeBuf(b); FreeBuf(b);

View File

@ -625,6 +625,7 @@ struct ICMPV6_HEADER_INFO
#define DHCP_ID_REQ_PARAM_LIST 0x37 #define DHCP_ID_REQ_PARAM_LIST 0x37
#define DHCP_ID_CLASSLESS_ROUTE 0x79 #define DHCP_ID_CLASSLESS_ROUTE 0x79
#define DHCP_ID_MS_CLASSLESS_ROUTE 0xF9 #define DHCP_ID_MS_CLASSLESS_ROUTE 0xF9
#define DHCP_ID_PRIVATE 0xFA
// DHCP client action // DHCP client action

Binary file not shown.

Binary file not shown.

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = NetTrans Class = NetTrans
ClassGUID = {4D36E975-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E975-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_selow.cat CatalogFile.NT = inf_selow.cat
@ -66,5 +66,5 @@ SeLow_Description = "A lightweight helper kernel-mode module for PacketiX VPN
; Auto Generated 20141022_203021.056 ; Auto Generated 20141117_222152.555

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = NetTrans Class = NetTrans
ClassGUID = {4D36E975-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E975-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_selow.cat CatalogFile.NT = inf_selow.cat
@ -66,5 +66,5 @@ SeLow_Description = "A lightweight helper kernel-mode module for PacketiX VPN
; Auto Generated 20141022_202525.677 ; Auto Generated 20141117_221645.757

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN.cat CatalogFile.NT = inf_VPN.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN10.cat CatalogFile.NT = inf_VPN10.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN100.cat CatalogFile.NT = inf_VPN100.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN101.cat CatalogFile.NT = inf_VPN101.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN102.cat CatalogFile.NT = inf_VPN102.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN103.cat CatalogFile.NT = inf_VPN103.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN104.cat CatalogFile.NT = inf_VPN104.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN105.cat CatalogFile.NT = inf_VPN105.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN106.cat CatalogFile.NT = inf_VPN106.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN107.cat CatalogFile.NT = inf_VPN107.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN108.cat CatalogFile.NT = inf_VPN108.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN109.cat CatalogFile.NT = inf_VPN109.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN11.cat CatalogFile.NT = inf_VPN11.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN110.cat CatalogFile.NT = inf_VPN110.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN111.cat CatalogFile.NT = inf_VPN111.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN112.cat CatalogFile.NT = inf_VPN112.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN113.cat CatalogFile.NT = inf_VPN113.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN114.cat CatalogFile.NT = inf_VPN114.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN115.cat CatalogFile.NT = inf_VPN115.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN116.cat CatalogFile.NT = inf_VPN116.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN117.cat CatalogFile.NT = inf_VPN117.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN118.cat CatalogFile.NT = inf_VPN118.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN119.cat CatalogFile.NT = inf_VPN119.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN12.cat CatalogFile.NT = inf_VPN12.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN120.cat CatalogFile.NT = inf_VPN120.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN121.cat CatalogFile.NT = inf_VPN121.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN122.cat CatalogFile.NT = inf_VPN122.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN123.cat CatalogFile.NT = inf_VPN123.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN124.cat CatalogFile.NT = inf_VPN124.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN125.cat CatalogFile.NT = inf_VPN125.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN126.cat CatalogFile.NT = inf_VPN126.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN127.cat CatalogFile.NT = inf_VPN127.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN13.cat CatalogFile.NT = inf_VPN13.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN14.cat CatalogFile.NT = inf_VPN14.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN15.cat CatalogFile.NT = inf_VPN15.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN16.cat CatalogFile.NT = inf_VPN16.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN17.cat CatalogFile.NT = inf_VPN17.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN18.cat CatalogFile.NT = inf_VPN18.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN19.cat CatalogFile.NT = inf_VPN19.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN2.cat CatalogFile.NT = inf_VPN2.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN20.cat CatalogFile.NT = inf_VPN20.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN21.cat CatalogFile.NT = inf_VPN21.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN22.cat CatalogFile.NT = inf_VPN22.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN23.cat CatalogFile.NT = inf_VPN23.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN24.cat CatalogFile.NT = inf_VPN24.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN25.cat CatalogFile.NT = inf_VPN25.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN26.cat CatalogFile.NT = inf_VPN26.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN27.cat CatalogFile.NT = inf_VPN27.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN28.cat CatalogFile.NT = inf_VPN28.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN29.cat CatalogFile.NT = inf_VPN29.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN3.cat CatalogFile.NT = inf_VPN3.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN30.cat CatalogFile.NT = inf_VPN30.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN31.cat CatalogFile.NT = inf_VPN31.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN32.cat CatalogFile.NT = inf_VPN32.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN33.cat CatalogFile.NT = inf_VPN33.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN34.cat CatalogFile.NT = inf_VPN34.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN35.cat CatalogFile.NT = inf_VPN35.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN36.cat CatalogFile.NT = inf_VPN36.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN37.cat CatalogFile.NT = inf_VPN37.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN38.cat CatalogFile.NT = inf_VPN38.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN39.cat CatalogFile.NT = inf_VPN39.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN4.cat CatalogFile.NT = inf_VPN4.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN40.cat CatalogFile.NT = inf_VPN40.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN41.cat CatalogFile.NT = inf_VPN41.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN42.cat CatalogFile.NT = inf_VPN42.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN43.cat CatalogFile.NT = inf_VPN43.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN44.cat CatalogFile.NT = inf_VPN44.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN45.cat CatalogFile.NT = inf_VPN45.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN46.cat CatalogFile.NT = inf_VPN46.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN47.cat CatalogFile.NT = inf_VPN47.cat

View File

@ -8,7 +8,7 @@ Signature = "$Windows NT$"
Class = Net Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %CompanyName% Provider = %CompanyName%
DriverVer = 10/22/2014, 4.11.0.9506 DriverVer = 11/17/2014, 4.12.0.9514
CatalogFile.NT = inf_VPN48.cat CatalogFile.NT = inf_VPN48.cat

Some files were not shown because too many files have changed in this diff Show More