mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2025-05-29 13:34:29 +00:00
Merge branch 'dev' of http://git.int.zerotier.com/ZeroTier/ZeroTierOne into dev
This commit is contained in:
commit
21e844cd82
@ -27,10 +27,10 @@
|
|||||||
<ROW Property="CTRLS" Value="2"/>
|
<ROW Property="CTRLS" Value="2"/>
|
||||||
<ROW Property="MSIFASTINSTALL" MultiBuildValue="DefaultBuild:2"/>
|
<ROW Property="MSIFASTINSTALL" MultiBuildValue="DefaultBuild:2"/>
|
||||||
<ROW Property="Manufacturer" Value="ZeroTier, Inc."/>
|
<ROW Property="Manufacturer" Value="ZeroTier, Inc."/>
|
||||||
<ROW Property="ProductCode" Value="1033:{855E8629-580C-4BDF-8B59-B9290C7E7BA5} " Type="16"/>
|
<ROW Property="ProductCode" Value="1033:{B87100D2-6023-447A-A6D0-23A35A0C58F8} " Type="16"/>
|
||||||
<ROW Property="ProductLanguage" Value="1033"/>
|
<ROW Property="ProductLanguage" Value="1033"/>
|
||||||
<ROW Property="ProductName" Value="ZeroTier One"/>
|
<ROW Property="ProductName" Value="ZeroTier One"/>
|
||||||
<ROW Property="ProductVersion" Value="1.2.12" Type="32"/>
|
<ROW Property="ProductVersion" Value="1.4.0" Type="32"/>
|
||||||
<ROW Property="REBOOT" MultiBuildValue="DefaultBuild:ReallySuppress"/>
|
<ROW Property="REBOOT" MultiBuildValue="DefaultBuild:ReallySuppress"/>
|
||||||
<ROW Property="RUNAPPLICATION" Value="1" Type="4"/>
|
<ROW Property="RUNAPPLICATION" Value="1" Type="4"/>
|
||||||
<ROW Property="SecureCustomProperties" Value="OLDPRODUCTS;AI_NEWERPRODUCTFOUND;AI_SETUPEXEPATH;SETUPEXEDIR"/>
|
<ROW Property="SecureCustomProperties" Value="OLDPRODUCTS;AI_NEWERPRODUCTFOUND;AI_SETUPEXEPATH;SETUPEXEDIR"/>
|
||||||
@ -64,7 +64,7 @@
|
|||||||
<ROW Directory="x86_Dir" Directory_Parent="tapwindows_Dir" DefaultDir="x86"/>
|
<ROW Directory="x86_Dir" Directory_Parent="tapwindows_Dir" DefaultDir="x86"/>
|
||||||
</COMPONENT>
|
</COMPONENT>
|
||||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiCompsComponent">
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiCompsComponent">
|
||||||
<ROW Component="AI_CustomARPName" ComponentId="{92D9A995-E340-41B2-98F5-F2DB3F6E8AD8}" Directory_="APPDIR" Attributes="4" KeyPath="DisplayName" Options="1"/>
|
<ROW Component="AI_CustomARPName" ComponentId="{9120F1FC-96D1-4099-8ABC-92A469A85B7E}" Directory_="APPDIR" Attributes="4" KeyPath="DisplayName" Options="1"/>
|
||||||
<ROW Component="AI_DisableModify" ComponentId="{020DCABD-5D56-49B9-AF48-F07F0B55E590}" Directory_="APPDIR" Attributes="4" KeyPath="NoModify" Options="1"/>
|
<ROW Component="AI_DisableModify" ComponentId="{020DCABD-5D56-49B9-AF48-F07F0B55E590}" Directory_="APPDIR" Attributes="4" KeyPath="NoModify" Options="1"/>
|
||||||
<ROW Component="AI_ExePath" ComponentId="{8E02B36C-7A19-429B-A93E-77A9261AC918}" Directory_="APPDIR" Attributes="4" KeyPath="AI_ExePath"/>
|
<ROW Component="AI_ExePath" ComponentId="{8E02B36C-7A19-429B-A93E-77A9261AC918}" Directory_="APPDIR" Attributes="4" KeyPath="AI_ExePath"/>
|
||||||
<ROW Component="Hardcodet.Wpf.TaskbarNotification.dll" ComponentId="{BEA825AF-2555-44AF-BE40-47FFC16DCBA6}" Directory_="APPDIR" Attributes="0" KeyPath="Hardcodet.Wpf.TaskbarNotification.dll"/>
|
<ROW Component="Hardcodet.Wpf.TaskbarNotification.dll" ComponentId="{BEA825AF-2555-44AF-BE40-47FFC16DCBA6}" Directory_="APPDIR" Attributes="0" KeyPath="Hardcodet.Wpf.TaskbarNotification.dll"/>
|
||||||
@ -82,7 +82,7 @@
|
|||||||
</COMPONENT>
|
</COMPONENT>
|
||||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiFeatsComponent">
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiFeatsComponent">
|
||||||
<ROW Feature="ZeroTierOne" Title="MainFeature" Description="ZeroTier One" Display="1" Level="1" Directory_="APPDIR" Attributes="0" Components="AI_CustomARPName AI_DisableModify AI_ExePath Hardcodet.Wpf.TaskbarNotification.dll Newtonsoft.Json.dll ProductInformation ZeroTierOne.exe copyutil.exe networks.d regid.201001.com.zerotier segoeui.ttf zerotierone_x64.exe zerotierone_x86.exe zttap300.cat_1"/>
|
<ROW Feature="ZeroTierOne" Title="MainFeature" Description="ZeroTier One" Display="1" Level="1" Directory_="APPDIR" Attributes="0" Components="AI_CustomARPName AI_DisableModify AI_ExePath Hardcodet.Wpf.TaskbarNotification.dll Newtonsoft.Json.dll ProductInformation ZeroTierOne.exe copyutil.exe networks.d regid.201001.com.zerotier segoeui.ttf zerotierone_x64.exe zerotierone_x86.exe zttap300.cat_1"/>
|
||||||
<ROW Feature="zttap300" Feature_Parent="ZeroTierOne" Title="zttap300" Description="ZeroTier Virtual Network Port Driver" Display="1" Level="1" Directory_="APPDIR" Attributes="16" Components="zttap300.inf"/>
|
<ROW Feature="zttap300" Feature_Parent="ZeroTierOne" Title="zttap300" Description="ZeroTier Virtual Network Port Driver" Display="1" Level="1" Directory_="APPDIR" Attributes="16" Components="AI_CustomARPName AI_DisableModify AI_ExePath zttap300.inf"/>
|
||||||
<ATTRIBUTE name="CurrentFeature" value="ZeroTierOne"/>
|
<ATTRIBUTE name="CurrentFeature" value="ZeroTierOne"/>
|
||||||
</COMPONENT>
|
</COMPONENT>
|
||||||
<COMPONENT cid="caphyon.advinst.msicomp.MsiFilesComponent">
|
<COMPONENT cid="caphyon.advinst.msicomp.MsiFilesComponent">
|
||||||
@ -454,10 +454,10 @@
|
|||||||
<ROW XmlAttribute="xsischemaLocation" XmlElement="swidsoftware_identification_tag" Name="xsi:schemaLocation" Flags="14" Order="3" Value="http://standards.iso.org/iso/19770/-2/2008/schema.xsd software_identification_tag.xsd"/>
|
<ROW XmlAttribute="xsischemaLocation" XmlElement="swidsoftware_identification_tag" Name="xsi:schemaLocation" Flags="14" Order="3" Value="http://standards.iso.org/iso/19770/-2/2008/schema.xsd software_identification_tag.xsd"/>
|
||||||
</COMPONENT>
|
</COMPONENT>
|
||||||
<COMPONENT cid="caphyon.advinst.msicomp.XmlElementComponent">
|
<COMPONENT cid="caphyon.advinst.msicomp.XmlElementComponent">
|
||||||
<ROW XmlElement="swidbuild" ParentElement="swidnumeric" Name="swid:build" Condition="1" Order="2" Flags="14" Text="12"/>
|
<ROW XmlElement="swidbuild" ParentElement="swidnumeric" Name="swid:build" Condition="1" Order="2" Flags="14" Text="0"/>
|
||||||
<ROW XmlElement="swidentitlement_required_indicator" ParentElement="swidsoftware_identification_tag" Name="swid:entitlement_required_indicator" Condition="1" Order="0" Flags="14" Text="false"/>
|
<ROW XmlElement="swidentitlement_required_indicator" ParentElement="swidsoftware_identification_tag" Name="swid:entitlement_required_indicator" Condition="1" Order="0" Flags="14" Text="false"/>
|
||||||
<ROW XmlElement="swidmajor" ParentElement="swidnumeric" Name="swid:major" Condition="1" Order="0" Flags="14" Text="1"/>
|
<ROW XmlElement="swidmajor" ParentElement="swidnumeric" Name="swid:major" Condition="1" Order="0" Flags="14" Text="1"/>
|
||||||
<ROW XmlElement="swidminor" ParentElement="swidnumeric" Name="swid:minor" Condition="1" Order="1" Flags="14" Text="2"/>
|
<ROW XmlElement="swidminor" ParentElement="swidnumeric" Name="swid:minor" Condition="1" Order="1" Flags="14" Text="4"/>
|
||||||
<ROW XmlElement="swidname" ParentElement="swidproduct_version" Name="swid:name" Condition="1" Order="0" Flags="14" Text="[ProductVersion]"/>
|
<ROW XmlElement="swidname" ParentElement="swidproduct_version" Name="swid:name" Condition="1" Order="0" Flags="14" Text="[ProductVersion]"/>
|
||||||
<ROW XmlElement="swidname_1" ParentElement="swidsoftware_creator" Name="swid:name" Condition="1" Order="0" Flags="14" Text="ZeroTier, Inc."/>
|
<ROW XmlElement="swidname_1" ParentElement="swidsoftware_creator" Name="swid:name" Condition="1" Order="0" Flags="14" Text="ZeroTier, Inc."/>
|
||||||
<ROW XmlElement="swidname_2" ParentElement="swidsoftware_licensor" Name="swid:name" Condition="1" Order="0" Flags="14" Text="ZeroTier, Inc."/>
|
<ROW XmlElement="swidname_2" ParentElement="swidsoftware_licensor" Name="swid:name" Condition="1" Order="0" Flags="14" Text="ZeroTier, Inc."/>
|
||||||
|
@ -67,29 +67,18 @@ public:
|
|||||||
THING_IPV6_ADDRESS = 3
|
THING_IPV6_ADDRESS = 3
|
||||||
};
|
};
|
||||||
|
|
||||||
CertificateOfOwnership() :
|
CertificateOfOwnership()
|
||||||
_networkId(0),
|
|
||||||
_ts(0),
|
|
||||||
_flags(0),
|
|
||||||
_id(0),
|
|
||||||
_thingCount(0)
|
|
||||||
{
|
{
|
||||||
memset(_thingTypes,0,sizeof(_thingTypes));
|
memset(reinterpret_cast<void *>(this),0,sizeof(CertificateOfOwnership));
|
||||||
memset(_thingValues,0,sizeof(_thingValues));
|
|
||||||
memset(_signature.data,0,sizeof(_signature.data));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CertificateOfOwnership(const uint64_t nwid,const int64_t ts,const Address &issuedTo,const uint32_t id) :
|
CertificateOfOwnership(const uint64_t nwid,const int64_t ts,const Address &issuedTo,const uint32_t id)
|
||||||
_networkId(nwid),
|
|
||||||
_ts(ts),
|
|
||||||
_flags(0),
|
|
||||||
_id(id),
|
|
||||||
_thingCount(0),
|
|
||||||
_issuedTo(issuedTo)
|
|
||||||
{
|
{
|
||||||
memset(_thingTypes,0,sizeof(_thingTypes));
|
memset(reinterpret_cast<void *>(this),0,sizeof(CertificateOfOwnership));
|
||||||
memset(_thingValues,0,sizeof(_thingValues));
|
_networkId = nwid;
|
||||||
memset(_signature.data,0,sizeof(_signature.data));
|
_ts = ts;
|
||||||
|
_id = id;
|
||||||
|
_issuedTo = issuedTo;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline uint64_t networkId() const { return _networkId; }
|
inline uint64_t networkId() const { return _networkId; }
|
||||||
|
@ -1036,7 +1036,7 @@ int Network::setConfiguration(void *tPtr,const NetworkConfig &nconf,bool saveToD
|
|||||||
_portError = RR->node->configureVirtualNetworkPort(tPtr,_id,&_uPtr,(oldPortInitialized) ? ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_CONFIG_UPDATE : ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_UP,&ctmp);
|
_portError = RR->node->configureVirtualNetworkPort(tPtr,_id,&_uPtr,(oldPortInitialized) ? ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_CONFIG_UPDATE : ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_UP,&ctmp);
|
||||||
|
|
||||||
if (saveToDisk) {
|
if (saveToDisk) {
|
||||||
Dictionary<ZT_NETWORKCONFIG_DICT_CAPACITY> *d = new Dictionary<ZT_NETWORKCONFIG_DICT_CAPACITY>();
|
Dictionary<ZT_NETWORKCONFIG_DICT_CAPACITY> *const d = new Dictionary<ZT_NETWORKCONFIG_DICT_CAPACITY>();
|
||||||
try {
|
try {
|
||||||
if (nconf.toDictionary(*d,false)) {
|
if (nconf.toDictionary(*d,false)) {
|
||||||
uint64_t tmp[2];
|
uint64_t tmp[2];
|
||||||
@ -1493,25 +1493,27 @@ void Network::_sendUpdatesToMembers(void *tPtr,const MulticastGroup *const newMu
|
|||||||
void Network::_announceMulticastGroupsTo(void *tPtr,const Address &peer,const std::vector<MulticastGroup> &allMulticastGroups)
|
void Network::_announceMulticastGroupsTo(void *tPtr,const Address &peer,const std::vector<MulticastGroup> &allMulticastGroups)
|
||||||
{
|
{
|
||||||
// Assumes _lock is locked
|
// Assumes _lock is locked
|
||||||
Packet outp(peer,RR->identity.address(),Packet::VERB_MULTICAST_LIKE);
|
Packet *const outp = new Packet(peer,RR->identity.address(),Packet::VERB_MULTICAST_LIKE);
|
||||||
|
|
||||||
for(std::vector<MulticastGroup>::const_iterator mg(allMulticastGroups.begin());mg!=allMulticastGroups.end();++mg) {
|
for(std::vector<MulticastGroup>::const_iterator mg(allMulticastGroups.begin());mg!=allMulticastGroups.end();++mg) {
|
||||||
if ((outp.size() + 24) >= ZT_PROTO_MAX_PACKET_LENGTH) {
|
if ((outp->size() + 24) >= ZT_PROTO_MAX_PACKET_LENGTH) {
|
||||||
outp.compress();
|
outp->compress();
|
||||||
RR->sw->send(tPtr,outp,true);
|
RR->sw->send(tPtr,*outp,true);
|
||||||
outp.reset(peer,RR->identity.address(),Packet::VERB_MULTICAST_LIKE);
|
outp->reset(peer,RR->identity.address(),Packet::VERB_MULTICAST_LIKE);
|
||||||
}
|
}
|
||||||
|
|
||||||
// network ID, MAC, ADI
|
// network ID, MAC, ADI
|
||||||
outp.append((uint64_t)_id);
|
outp->append((uint64_t)_id);
|
||||||
mg->mac().appendTo(outp);
|
mg->mac().appendTo(*outp);
|
||||||
outp.append((uint32_t)mg->adi());
|
outp->append((uint32_t)mg->adi());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (outp.size() > ZT_PROTO_MIN_PACKET_LENGTH) {
|
if (outp->size() > ZT_PROTO_MIN_PACKET_LENGTH) {
|
||||||
outp.compress();
|
outp->compress();
|
||||||
RR->sw->send(tPtr,outp,true);
|
RR->sw->send(tPtr,*outp,true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
delete outp;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<MulticastGroup> Network::_allMulticastGroups() const
|
std::vector<MulticastGroup> Network::_allMulticastGroups() const
|
||||||
|
@ -442,7 +442,7 @@ public:
|
|||||||
uint64_t id = it->first;
|
uint64_t id = it->first;
|
||||||
memcpy(qosBuffer, &id, sizeof(uint64_t));
|
memcpy(qosBuffer, &id, sizeof(uint64_t));
|
||||||
qosBuffer+=sizeof(uint64_t);
|
qosBuffer+=sizeof(uint64_t);
|
||||||
uint16_t holdingTime = (now - it->second);
|
uint16_t holdingTime = (uint16_t)(now - it->second);
|
||||||
memcpy(qosBuffer, &holdingTime, sizeof(uint16_t));
|
memcpy(qosBuffer, &holdingTime, sizeof(uint16_t));
|
||||||
qosBuffer+=sizeof(uint16_t);
|
qosBuffer+=sizeof(uint16_t);
|
||||||
len+=sizeof(uint64_t)+sizeof(uint16_t);
|
len+=sizeof(uint64_t)+sizeof(uint16_t);
|
||||||
@ -594,11 +594,11 @@ public:
|
|||||||
float throughput_cv = _throughputSamples.mean() > 0 ? _throughputSamples.stddev() / _throughputSamples.mean() : 1;
|
float throughput_cv = _throughputSamples.mean() > 0 ? _throughputSamples.stddev() / _throughputSamples.mean() : 1;
|
||||||
|
|
||||||
// Form an exponential cutoff and apply contribution weights
|
// Form an exponential cutoff and apply contribution weights
|
||||||
float pdv_contrib = exp((-1)*normalized_pdv) * ZT_PATH_CONTRIB_PDV;
|
float pdv_contrib = expf((-1.0f)*normalized_pdv) * (float)ZT_PATH_CONTRIB_PDV;
|
||||||
float latency_contrib = exp((-1)*normalized_la) * ZT_PATH_CONTRIB_LATENCY;
|
float latency_contrib = expf((-1.0f)*normalized_la) * (float)ZT_PATH_CONTRIB_LATENCY;
|
||||||
|
|
||||||
// Throughput Disturbance Coefficient
|
// Throughput Disturbance Coefficient
|
||||||
float throughput_disturbance_contrib = exp((-1)*throughput_cv) * ZT_PATH_CONTRIB_THROUGHPUT_DISTURBANCE;
|
float throughput_disturbance_contrib = expf((-1.0f)*throughput_cv) * (float)ZT_PATH_CONTRIB_THROUGHPUT_DISTURBANCE;
|
||||||
_throughputDisturbanceSamples.push(throughput_cv);
|
_throughputDisturbanceSamples.push(throughput_cv);
|
||||||
_lastComputedThroughputDistCoeff = _throughputDisturbanceSamples.mean();
|
_lastComputedThroughputDistCoeff = _throughputDisturbanceSamples.mean();
|
||||||
|
|
||||||
|
@ -212,10 +212,10 @@ void Peer::received(
|
|||||||
if (pathsToPush.size() > 0) {
|
if (pathsToPush.size() > 0) {
|
||||||
std::vector<InetAddress>::const_iterator p(pathsToPush.begin());
|
std::vector<InetAddress>::const_iterator p(pathsToPush.begin());
|
||||||
while (p != pathsToPush.end()) {
|
while (p != pathsToPush.end()) {
|
||||||
Packet outp(_id.address(),RR->identity.address(),Packet::VERB_PUSH_DIRECT_PATHS);
|
Packet *outp = new Packet(_id.address(),RR->identity.address(),Packet::VERB_PUSH_DIRECT_PATHS);
|
||||||
outp.addSize(2); // leave room for count
|
outp->addSize(2); // leave room for count
|
||||||
unsigned int count = 0;
|
unsigned int count = 0;
|
||||||
while ((p != pathsToPush.end())&&((outp.size() + 24) < 1200)) {
|
while ((p != pathsToPush.end())&&((outp->size() + 24) < 1200)) {
|
||||||
uint8_t addressType = 4;
|
uint8_t addressType = 4;
|
||||||
switch(p->ss_family) {
|
switch(p->ss_family) {
|
||||||
case AF_INET:
|
case AF_INET:
|
||||||
@ -228,22 +228,23 @@ void Peer::received(
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
outp.append((uint8_t)0); // no flags
|
outp->append((uint8_t)0); // no flags
|
||||||
outp.append((uint16_t)0); // no extensions
|
outp->append((uint16_t)0); // no extensions
|
||||||
outp.append(addressType);
|
outp->append(addressType);
|
||||||
outp.append((uint8_t)((addressType == 4) ? 6 : 18));
|
outp->append((uint8_t)((addressType == 4) ? 6 : 18));
|
||||||
outp.append(p->rawIpData(),((addressType == 4) ? 4 : 16));
|
outp->append(p->rawIpData(),((addressType == 4) ? 4 : 16));
|
||||||
outp.append((uint16_t)p->port());
|
outp->append((uint16_t)p->port());
|
||||||
|
|
||||||
++count;
|
++count;
|
||||||
++p;
|
++p;
|
||||||
}
|
}
|
||||||
if (count) {
|
if (count) {
|
||||||
outp.setAt(ZT_PACKET_IDX_PAYLOAD,(uint16_t)count);
|
outp->setAt(ZT_PACKET_IDX_PAYLOAD,(uint16_t)count);
|
||||||
outp.compress();
|
outp->compress();
|
||||||
outp.armor(_key,true);
|
outp->armor(_key,true);
|
||||||
path->send(RR,tPtr,outp.data(),outp.size(),now);
|
path->send(RR,tPtr,outp->data(),outp->size(),now);
|
||||||
}
|
}
|
||||||
|
delete outp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -300,13 +301,13 @@ void Peer::computeAggregateProportionalAllocation(int64_t now)
|
|||||||
float age_contrib = exp((-1)*normalized_ma);
|
float age_contrib = exp((-1)*normalized_ma);
|
||||||
float relScope = ((float)(_paths[i].p->ipScope()+1) / (maxScope + 1));
|
float relScope = ((float)(_paths[i].p->ipScope()+1) / (maxScope + 1));
|
||||||
float relQuality =
|
float relQuality =
|
||||||
(relStability[i] * ZT_PATH_CONTRIB_STABILITY)
|
(relStability[i] * (float)ZT_PATH_CONTRIB_STABILITY)
|
||||||
+ (fmax(1, relThroughput[i]) * ZT_PATH_CONTRIB_THROUGHPUT)
|
+ (fmaxf(1.0f, relThroughput[i]) * (float)ZT_PATH_CONTRIB_THROUGHPUT)
|
||||||
+ relScope * ZT_PATH_CONTRIB_SCOPE;
|
+ relScope * (float)ZT_PATH_CONTRIB_SCOPE;
|
||||||
relQuality *= age_contrib;
|
relQuality *= age_contrib;
|
||||||
// Arbitrary cutoffs
|
// Arbitrary cutoffs
|
||||||
relQuality = relQuality > (1.00 / 100.0) ? relQuality : 0.0;
|
relQuality = relQuality > (1.00f / 100.0f) ? relQuality : 0.0f;
|
||||||
relQuality = relQuality < (99.0 / 100.0) ? relQuality : 1.0;
|
relQuality = relQuality < (99.0f / 100.0f) ? relQuality : 1.0f;
|
||||||
totalRelativeQuality += relQuality;
|
totalRelativeQuality += relQuality;
|
||||||
_paths[i].p->updateRelativeQuality(relQuality);
|
_paths[i].p->updateRelativeQuality(relQuality);
|
||||||
}
|
}
|
||||||
@ -479,8 +480,8 @@ char *Peer::interfaceListStr()
|
|||||||
if (_paths[i].p && _paths[i].p->alive(now)) {
|
if (_paths[i].p && _paths[i].p->alive(now)) {
|
||||||
int ipv = _paths[i].p->address().isV4();
|
int ipv = _paths[i].p->address().isV4();
|
||||||
// If this is acting as an aggregate link, check allocations
|
// If this is acting as an aggregate link, check allocations
|
||||||
float targetAllocation = 1.0 / alivePathCount;
|
float targetAllocation = 1.0f / (float)alivePathCount;
|
||||||
float currentAllocation = 1.0;
|
float currentAllocation = 1.0f;
|
||||||
if (alivePathCount > 1) {
|
if (alivePathCount > 1) {
|
||||||
currentAllocation = (float)_pathChoiceHist.countValue(i) / (float)_pathChoiceHist.count();
|
currentAllocation = (float)_pathChoiceHist.countValue(i) / (float)_pathChoiceHist.count();
|
||||||
if (fabs(targetAllocation - currentAllocation) > ZT_PATH_IMBALANCE_THRESHOLD) {
|
if (fabs(targetAllocation - currentAllocation) > ZT_PATH_IMBALANCE_THRESHOLD) {
|
||||||
|
@ -389,7 +389,7 @@ public:
|
|||||||
_bindings[_bindingCount].udpSock = udps;
|
_bindings[_bindingCount].udpSock = udps;
|
||||||
_bindings[_bindingCount].tcpListenSock = tcps;
|
_bindings[_bindingCount].tcpListenSock = tcps;
|
||||||
_bindings[_bindingCount].address = ii->first;
|
_bindings[_bindingCount].address = ii->first;
|
||||||
phy.setIfName(udps, (char*)ii->second.c_str(), ii->second.length());
|
phy.setIfName(udps,(char*)ii->second.c_str(),(int)ii->second.length());
|
||||||
++_bindingCount;
|
++_bindingCount;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -2449,17 +2449,22 @@ public:
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (len >= 0) {
|
if ((len >= 0)&&(data)) {
|
||||||
// Check to see if we've already written this first. This reduces
|
// Check to see if we've already written this first. This reduces
|
||||||
// redundant writes and I/O overhead on most platforms and has
|
// redundant writes and I/O overhead on most platforms and has
|
||||||
// little effect on others.
|
// little effect on others.
|
||||||
f = fopen(p,"rb");
|
f = fopen(p,"rb");
|
||||||
if (f) {
|
if (f) {
|
||||||
char buf[65535];
|
char *const buf = (char *)malloc(len*4);
|
||||||
long l = (long)fread(buf,1,sizeof(buf),f);
|
if (buf) {
|
||||||
fclose(f);
|
long l = (long)fread(buf,1,(size_t)(len*4),f);
|
||||||
if ((l == (long)len)&&(memcmp(data,buf,l) == 0))
|
fclose(f);
|
||||||
return;
|
if ((l == (long)len)&&(memcmp(data,buf,l) == 0)) {
|
||||||
|
free(buf);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
free(buf);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
f = fopen(p,"wb");
|
f = fopen(p,"wb");
|
||||||
|
@ -106,9 +106,9 @@ Global
|
|||||||
{B00A4957-5977-4AC1-9EF4-571DC27EADA2}.Release|Mixed Platforms.ActiveCfg = Release|Win32
|
{B00A4957-5977-4AC1-9EF4-571DC27EADA2}.Release|Mixed Platforms.ActiveCfg = Release|Win32
|
||||||
{B00A4957-5977-4AC1-9EF4-571DC27EADA2}.Release|Mixed Platforms.Build.0 = Release|Win32
|
{B00A4957-5977-4AC1-9EF4-571DC27EADA2}.Release|Mixed Platforms.Build.0 = Release|Win32
|
||||||
{B00A4957-5977-4AC1-9EF4-571DC27EADA2}.Release|Mixed Platforms.Deploy.0 = Release|Win32
|
{B00A4957-5977-4AC1-9EF4-571DC27EADA2}.Release|Mixed Platforms.Deploy.0 = Release|Win32
|
||||||
{B00A4957-5977-4AC1-9EF4-571DC27EADA2}.Release|Win32.ActiveCfg = Release|x64
|
{B00A4957-5977-4AC1-9EF4-571DC27EADA2}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
{B00A4957-5977-4AC1-9EF4-571DC27EADA2}.Release|Win32.Build.0 = Release|x64
|
{B00A4957-5977-4AC1-9EF4-571DC27EADA2}.Release|Win32.Build.0 = Release|Win32
|
||||||
{B00A4957-5977-4AC1-9EF4-571DC27EADA2}.Release|Win32.Deploy.0 = Release|x64
|
{B00A4957-5977-4AC1-9EF4-571DC27EADA2}.Release|Win32.Deploy.0 = Release|Win32
|
||||||
{B00A4957-5977-4AC1-9EF4-571DC27EADA2}.Release|x64.ActiveCfg = Release|x64
|
{B00A4957-5977-4AC1-9EF4-571DC27EADA2}.Release|x64.ActiveCfg = Release|x64
|
||||||
{B00A4957-5977-4AC1-9EF4-571DC27EADA2}.SingleImage|Any CPU.ActiveCfg = Release|Win32
|
{B00A4957-5977-4AC1-9EF4-571DC27EADA2}.SingleImage|Any CPU.ActiveCfg = Release|Win32
|
||||||
{B00A4957-5977-4AC1-9EF4-571DC27EADA2}.SingleImage|Mixed Platforms.ActiveCfg = Release|Win32
|
{B00A4957-5977-4AC1-9EF4-571DC27EADA2}.SingleImage|Mixed Platforms.ActiveCfg = Release|Win32
|
||||||
|
@ -30,6 +30,8 @@
|
|||||||
<ClCompile Include="..\..\controller\DB.cpp" />
|
<ClCompile Include="..\..\controller\DB.cpp" />
|
||||||
<ClCompile Include="..\..\controller\EmbeddedNetworkController.cpp" />
|
<ClCompile Include="..\..\controller\EmbeddedNetworkController.cpp" />
|
||||||
<ClCompile Include="..\..\controller\FileDB.cpp" />
|
<ClCompile Include="..\..\controller\FileDB.cpp" />
|
||||||
|
<ClCompile Include="..\..\controller\PostgreSQL.cpp" />
|
||||||
|
<ClCompile Include="..\..\controller\RabbitMQ.cpp" />
|
||||||
<ClCompile Include="..\..\ext\http-parser\http_parser.c" />
|
<ClCompile Include="..\..\ext\http-parser\http_parser.c" />
|
||||||
<ClCompile Include="..\..\ext\libnatpmp\getgateway.c" />
|
<ClCompile Include="..\..\ext\libnatpmp\getgateway.c" />
|
||||||
<ClCompile Include="..\..\ext\libnatpmp\natpmp.c" />
|
<ClCompile Include="..\..\ext\libnatpmp\natpmp.c" />
|
||||||
@ -114,6 +116,8 @@
|
|||||||
<ClInclude Include="..\..\controller\DB.hpp" />
|
<ClInclude Include="..\..\controller\DB.hpp" />
|
||||||
<ClInclude Include="..\..\controller\EmbeddedNetworkController.hpp" />
|
<ClInclude Include="..\..\controller\EmbeddedNetworkController.hpp" />
|
||||||
<ClInclude Include="..\..\controller\FileDB.hpp" />
|
<ClInclude Include="..\..\controller\FileDB.hpp" />
|
||||||
|
<ClInclude Include="..\..\controller\PostgreSQL.hpp" />
|
||||||
|
<ClInclude Include="..\..\controller\RabbitMQ.hpp" />
|
||||||
<ClInclude Include="..\..\ext\http-parser\http_parser.h" />
|
<ClInclude Include="..\..\ext\http-parser\http_parser.h" />
|
||||||
<ClInclude Include="..\..\ext\json\json.hpp" />
|
<ClInclude Include="..\..\ext\json\json.hpp" />
|
||||||
<ClInclude Include="..\..\ext\libnatpmp\getgateway.h" />
|
<ClInclude Include="..\..\ext\libnatpmp\getgateway.h" />
|
||||||
|
@ -258,6 +258,12 @@
|
|||||||
<ClCompile Include="..\..\controller\FileDB.cpp">
|
<ClCompile Include="..\..\controller\FileDB.cpp">
|
||||||
<Filter>Source Files\controller</Filter>
|
<Filter>Source Files\controller</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\controller\PostgreSQL.cpp">
|
||||||
|
<Filter>Source Files\controller</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\controller\RabbitMQ.cpp">
|
||||||
|
<Filter>Source Files\controller</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="resource.h">
|
<ClInclude Include="resource.h">
|
||||||
@ -494,6 +500,12 @@
|
|||||||
<ClInclude Include="..\..\node\Membership.hpp">
|
<ClInclude Include="..\..\node\Membership.hpp">
|
||||||
<Filter>Header Files\node</Filter>
|
<Filter>Header Files\node</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\controller\PostgreSQL.hpp">
|
||||||
|
<Filter>Header Files\controller</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\controller\RabbitMQ.hpp">
|
||||||
|
<Filter>Header Files\controller</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ResourceCompile Include="ZeroTierOne.rc">
|
<ResourceCompile Include="ZeroTierOne.rc">
|
||||||
|
Loading…
x
Reference in New Issue
Block a user