|
|
|
|
@ -300,13 +300,13 @@ void Peer::computeAggregateProportionalAllocation(int64_t now)
|
|
|
|
|
float age_contrib = exp((-1)*normalized_ma); |
|
|
|
|
float relScope = ((float)(_paths[i].p->ipScope()+1) / (maxScope + 1)); |
|
|
|
|
float relQuality = |
|
|
|
|
(relStability[i] * ZT_PATH_CONTRIB_STABILITY) |
|
|
|
|
+ (fmax(1, relThroughput[i]) * ZT_PATH_CONTRIB_THROUGHPUT) |
|
|
|
|
+ relScope * ZT_PATH_CONTRIB_SCOPE; |
|
|
|
|
(relStability[i] * (float)ZT_PATH_CONTRIB_STABILITY) |
|
|
|
|
+ (fmaxf(1.0f, relThroughput[i]) * (float)ZT_PATH_CONTRIB_THROUGHPUT) |
|
|
|
|
+ relScope * (float)ZT_PATH_CONTRIB_SCOPE; |
|
|
|
|
relQuality *= age_contrib; |
|
|
|
|
// Arbitrary cutoffs
|
|
|
|
|
relQuality = relQuality > (1.00 / 100.0) ? relQuality : 0.0; |
|
|
|
|
relQuality = relQuality < (99.0 / 100.0) ? relQuality : 1.0; |
|
|
|
|
relQuality = relQuality > (1.00f / 100.0f) ? relQuality : 0.0f; |
|
|
|
|
relQuality = relQuality < (99.0f / 100.0f) ? relQuality : 1.0f; |
|
|
|
|
totalRelativeQuality += relQuality; |
|
|
|
|
_paths[i].p->updateRelativeQuality(relQuality); |
|
|
|
|
} |
|
|
|
|
@ -479,8 +479,8 @@ char *Peer::interfaceListStr()
|
|
|
|
|
if (_paths[i].p && _paths[i].p->alive(now)) { |
|
|
|
|
int ipv = _paths[i].p->address().isV4(); |
|
|
|
|
// If this is acting as an aggregate link, check allocations
|
|
|
|
|
float targetAllocation = 1.0 / alivePathCount; |
|
|
|
|
float currentAllocation = 1.0; |
|
|
|
|
float targetAllocation = 1.0f / (float)alivePathCount; |
|
|
|
|
float currentAllocation = 1.0f; |
|
|
|
|
if (alivePathCount > 1) { |
|
|
|
|
currentAllocation = (float)_pathChoiceHist.countValue(i) / (float)_pathChoiceHist.count(); |
|
|
|
|
if (fabs(targetAllocation - currentAllocation) > ZT_PATH_IMBALANCE_THRESHOLD) { |
|
|
|
|
|