summaryrefslogtreecommitdiff
path: root/node/Node.hpp
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2016-11-18 12:59:04 -0800
committerAdam Ierymenko <adam.ierymenko@gmail.com>2016-11-18 12:59:04 -0800
commit2ea9f516e121ea6eb344a8d180a739a1d707aecb (patch)
tree5d1e02ed53e797f277de06f18fc64626cebe737e /node/Node.hpp
parentab4021dd0ee37af0af4137dc772911ea8ec52bb2 (diff)
downloadinfinitytier-2ea9f516e121ea6eb344a8d180a739a1d707aecb.tar.gz
infinitytier-2ea9f516e121ea6eb344a8d180a739a1d707aecb.zip
Rate gate expensive validation of new identities in HELLO.
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..ee0d6c4c 100644
--- a/node/Node.hpp
+++ b/node/Node.hpp
@@ -283,6 +283,24 @@ 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();
+ printf("%s %.4lx\n",from.toString().c_str(),iph);
+ 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;