Improved rate limit logic for QoS/ACK packets. Also reduced how often processBackgroundPathMeasurements() is called

This commit is contained in:
Joseph Henry 2018-06-12 15:24:12 -07:00
parent 7c53adbcfe
commit 6fddf31db3
4 changed files with 27 additions and 29 deletions

View file

@ -523,30 +523,34 @@ public:
return false;
}
/**
* Rate limit gate for VERB_QOS_MEASUREMENT
*/
inline bool rateGateQoS(const int64_t now)
{
if ((now - _lastQoSReceive) <= ZT_PATH_QOS_ACK_CUTOFF_TIME)
++_QoSCutoffCount;
else _QoSCutoffCount = 0;
_lastQoSReceive = now;
return (_QoSCutoffCount < ZT_PATH_QOS_ACK_CUTOFF_LIMIT);
}
/**
* Rate limit gate for VERB_ACK
*/
inline bool rateGateACK(const int64_t now)
{
if ((now - _lastACKReceive) <= ZT_PATH_QOS_ACK_CUTOFF_TIME)
if ((now - _lastACKWindowReset) >= ZT_PATH_QOS_ACK_CUTOFF_TIME) {
_lastACKWindowReset = now;
_ACKCutoffCount = 0;
} else {
++_ACKCutoffCount;
else _ACKCutoffCount = 0;
_lastACKReceive = now;
}
return (_ACKCutoffCount < ZT_PATH_QOS_ACK_CUTOFF_LIMIT);
}
/**
* Rate limit gate for VERB_QOS_MEASUREMENT
*/
inline bool rateGateQoS(const int64_t now)
{
if ((now - _lastQoSWindowReset) >= ZT_PATH_QOS_ACK_CUTOFF_TIME) {
_lastQoSWindowReset = now;
_QoSCutoffCount = 0;
} else {
++_QoSCutoffCount;
}
return (_QoSCutoffCount < ZT_PATH_QOS_ACK_CUTOFF_LIMIT);
}
/**
* Serialize a peer for storage in local cache
*
@ -644,10 +648,10 @@ private:
int64_t _lastComRequestSent;
int64_t _lastCredentialsReceived;
int64_t _lastTrustEstablishedPacketReceived;
int64_t _lastQoSReceive;
int64_t _lastACKReceive;
int64_t _lastSentFullHello;
int64_t _lastPathPrune;
int64_t _lastACKWindowReset;
int64_t _lastQoSWindowReset;
uint16_t _vProto;
uint16_t _vMajor;