mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2025-06-05 20:13:44 +02:00
Rate gate ECHO per Path instead of per Peer
This commit is contained in:
parent
1b0c183913
commit
5e13b42abc
4 changed files with 18 additions and 15 deletions
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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),
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Add table
Reference in a new issue