summaryrefslogtreecommitdiff
path: root/node/Network.cpp
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2013-07-30 11:14:53 -0400
committerAdam Ierymenko <adam.ierymenko@gmail.com>2013-07-30 11:14:53 -0400
commit7e156b262283985cbfe560317ec3d69d1bf19511 (patch)
treea1daa36aa3356b77ee2256845a3d9636f12dcd31 /node/Network.cpp
parente4c5ad9f43f37f3c5cd9feb1035d3b3091820e43 (diff)
downloadinfinitytier-7e156b262283985cbfe560317ec3d69d1bf19511.tar.gz
infinitytier-7e156b262283985cbfe560317ec3d69d1bf19511.zip
Call clean on all networks periodically, generalize Topology clean cycle to an overall clean cycle.
Diffstat (limited to 'node/Network.cpp')
-rw-r--r--node/Network.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/node/Network.cpp b/node/Network.cpp
index 5878a281..a50d56dc 100644
--- a/node/Network.cpp
+++ b/node/Network.cpp
@@ -34,6 +34,7 @@
#include "NodeConfig.hpp"
#include "Network.hpp"
#include "Switch.hpp"
+#include "Packet.hpp"
namespace ZeroTier {
@@ -103,6 +104,7 @@ Network::Network(const RuntimeEnvironment *renv,uint64_t id)
throw(std::runtime_error) :
_r(renv),
_tap(renv,renv->identity.address().toMAC(),ZT_IF_MTU,&_CBhandleTapData,this),
+ _lastConfigUpdate(0),
_id(id)
{
}
@@ -114,16 +116,23 @@ Network::~Network()
void Network::setConfiguration(const Network::Config &conf)
{
Mutex::Lock _l(_lock);
- _configuration = conf;
- _myCertificate = conf.certificateOfMembership();
+ if ((conf.networkId() == _id)&&(conf.peerAddress() == _r->identity.address())) { // sanity check
+ _configuration = conf;
+ _myCertificate = conf.certificateOfMembership();
+ _lastConfigUpdate = Utils::now();
+ }
}
void Network::requestConfiguration()
{
+ Packet outp(controller(),_r->identity.address(),Packet::VERB_NETWORK_CONFIG_REQUEST);
+ outp.append((uint64_t)_id);
+ _r->sw->send(outp,true);
}
bool Network::isAllowed(const Address &peer) const
{
+ // Exceptions can occur if we do not yet have *our* configuration.
try {
Mutex::Lock _l(_lock);
if (_configuration.isOpen())