Rate gate ECHO per Path instead of per Peer

This commit is contained in:
Joseph Henry 2022-02-21 14:37:39 -08:00
parent 1b0c183913
commit 5e13b42abc
No known key found for this signature in database
GPG key ID: C45B33FF5EBC9344
4 changed files with 18 additions and 15 deletions

View file

@ -860,7 +860,7 @@ bool IncomingPacket::_doEXT_FRAME(const RuntimeEnvironment *RR,void *tPtr,const
bool IncomingPacket::_doECHO(const RuntimeEnvironment *RR,void *tPtr,const SharedPtr<Peer> &peer) bool IncomingPacket::_doECHO(const RuntimeEnvironment *RR,void *tPtr,const SharedPtr<Peer> &peer)
{ {
uint64_t now = RR->node->now(); uint64_t now = RR->node->now();
if (!peer->rateGateEchoRequest(now)) { if (!_path->rateGateEchoRequest(now)) {
return true; return true;
} }

View file

@ -83,6 +83,7 @@ public:
_lastOut(0), _lastOut(0),
_lastIn(0), _lastIn(0),
_lastTrustEstablishedPacketReceived(0), _lastTrustEstablishedPacketReceived(0),
_lastEchoRequestReceived(0),
_localSocket(-1), _localSocket(-1),
_latency(0xffff), _latency(0xffff),
_addr(), _addr(),
@ -93,6 +94,7 @@ public:
_lastOut(0), _lastOut(0),
_lastIn(0), _lastIn(0),
_lastTrustEstablishedPacketReceived(0), _lastTrustEstablishedPacketReceived(0),
_lastEchoRequestReceived(0),
_localSocket(localSocket), _localSocket(localSocket),
_latency(0xffff), _latency(0xffff),
_addr(addr), _addr(addr),
@ -266,6 +268,18 @@ public:
*/ */
inline int64_t lastTrustEstablishedPacketReceived() const { return _lastTrustEstablishedPacketReceived; } inline int64_t lastTrustEstablishedPacketReceived() const { return _lastTrustEstablishedPacketReceived; }
/**
* Rate limit gate for inbound ECHO requests
*/
inline bool rateGateEchoRequest(const int64_t now)
{
if ((now - _lastEchoRequestReceived) >= (ZT_PEER_GENERAL_RATE_LIMIT / 16)) {
_lastEchoRequestReceived = now;
return true;
}
return false;
}
void *_bondingMetricPtr; void *_bondingMetricPtr;
private: private:
@ -273,6 +287,9 @@ private:
volatile int64_t _lastOut; volatile int64_t _lastOut;
volatile int64_t _lastIn; volatile int64_t _lastIn;
volatile int64_t _lastTrustEstablishedPacketReceived; volatile int64_t _lastTrustEstablishedPacketReceived;
int64_t _lastEchoRequestReceived;
int64_t _localSocket; int64_t _localSocket;
volatile unsigned int _latency; volatile unsigned int _latency;
InetAddress _addr; InetAddress _addr;

View file

@ -34,7 +34,6 @@ Peer::Peer(const RuntimeEnvironment *renv,const Identity &myIdentity,const Ident
_lastTriedMemorizedPath(0), _lastTriedMemorizedPath(0),
_lastDirectPathPushSent(0), _lastDirectPathPushSent(0),
_lastDirectPathPushReceive(0), _lastDirectPathPushReceive(0),
_lastEchoRequestReceived(0),
_lastCredentialRequestSent(0), _lastCredentialRequestSent(0),
_lastWhoisRequestReceived(0), _lastWhoisRequestReceived(0),
_lastCredentialsReceived(0), _lastCredentialsReceived(0),

View file

@ -418,18 +418,6 @@ public:
return false; return false;
} }
/**
* Rate limit gate for inbound ECHO requests
*/
inline bool rateGateEchoRequest(const int64_t now)
{
if ((now - _lastEchoRequestReceived) >= ZT_PEER_GENERAL_RATE_LIMIT) {
_lastEchoRequestReceived = now;
return true;
}
return false;
}
/** /**
* Serialize a peer for storage in local cache * Serialize a peer for storage in local cache
* *
@ -546,7 +534,6 @@ private:
int64_t _lastTriedMemorizedPath; int64_t _lastTriedMemorizedPath;
int64_t _lastDirectPathPushSent; int64_t _lastDirectPathPushSent;
int64_t _lastDirectPathPushReceive; int64_t _lastDirectPathPushReceive;
int64_t _lastEchoRequestReceived;
int64_t _lastCredentialRequestSent; int64_t _lastCredentialRequestSent;
int64_t _lastWhoisRequestReceived; int64_t _lastWhoisRequestReceived;
int64_t _lastCredentialsReceived; int64_t _lastCredentialsReceived;