summaryrefslogtreecommitdiff
path: root/node/Node.hpp
diff options
context:
space:
mode:
authorGrant Limberg <grant.limberg@zerotier.com>2016-11-18 14:00:25 -0800
committerGrant Limberg <grant.limberg@zerotier.com>2016-11-18 14:00:25 -0800
commit2231e878d5470d86f4c6543cc708dc78661da462 (patch)
tree0bcd8215684b0091d7bd8856f75b4e433edef71e /node/Node.hpp
parent299a7cab200c0af4743ab36d41994fd7a582f900 (diff)
parent673c0c811ea443c217b3a4ca17eeaed3ab596501 (diff)
downloadinfinitytier-2231e878d5470d86f4c6543cc708dc78661da462.tar.gz
infinitytier-2231e878d5470d86f4c6543cc708dc78661da462.zip
Merge branch 'dev' into systemtray
Diffstat (limited to 'node/Node.hpp')
-rw-r--r--node/Node.hpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/node/Node.hpp b/node/Node.hpp
index e616da3d..38303f8c 100644
--- a/node/Node.hpp
+++ b/node/Node.hpp
@@ -105,6 +105,7 @@ public:
void freeQueryResult(void *qr);
int addLocalInterfaceAddress(const struct sockaddr_storage *addr);
void clearLocalInterfaceAddresses();
+ void setRole(uint64_t ztAddress,ZT_PeerRole role);
void setNetconfMaster(void *networkControllerInstance);
ZT_ResultCode circuitTestBegin(ZT_CircuitTest *test,void (*reportCallback)(ZT_Node *,ZT_CircuitTest *,const ZT_CircuitTestReport *));
void circuitTestEnd(ZT_CircuitTest *test);
@@ -283,6 +284,23 @@ public:
return false;
}
+ /**
+ * Check whether we should do potentially expensive identity verification (rate limit)
+ *
+ * @param now Current time
+ * @param from Source address of packet
+ * @return True if within rate limits
+ */
+ inline bool rateGateIdentityVerification(const uint64_t now,const InetAddress &from)
+ {
+ unsigned long iph = from.rateGateHash();
+ if ((now - _lastIdentityVerification[iph]) >= ZT_IDENTITY_VALIDATION_SOURCE_RATE_LIMIT) {
+ _lastIdentityVerification[iph] = now;
+ return true;
+ }
+ return false;
+ }
+
virtual void ncSendConfig(uint64_t nwid,uint64_t requestPacketId,const Address &destination,const NetworkConfig &nc,bool sendLegacyFormatConfig);
virtual void ncSendError(uint64_t nwid,uint64_t requestPacketId,const Address &destination,NetworkController::ErrorCode errorCode);
@@ -302,9 +320,13 @@ private:
void *_uPtr; // _uptr (lower case) is reserved in Visual Studio :P
+ // For tracking packet IDs to filter out OK/ERROR replies to packets we did not send
uint8_t _expectingRepliesToBucketPtr[ZT_EXPECTING_REPLIES_BUCKET_MASK1 + 1];
uint64_t _expectingRepliesTo[ZT_EXPECTING_REPLIES_BUCKET_MASK1 + 1][ZT_EXPECTING_REPLIES_BUCKET_MASK2 + 1];
+ // Time of last identity verification indexed by InetAddress.rateGateHash()
+ uint64_t _lastIdentityVerification[16384];
+
ZT_DataStoreGetFunction _dataStoreGetFunction;
ZT_DataStorePutFunction _dataStorePutFunction;
ZT_WirePacketSendFunction _wirePacketSendFunction;