summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/ZeroTierOne.h11
-rw-r--r--node/MAC.hpp11
-rw-r--r--node/MulticastGroup.hpp2
-rw-r--r--node/Network.cpp23
-rw-r--r--node/Network.hpp20
5 files changed, 22 insertions, 45 deletions
diff --git a/include/ZeroTierOne.h b/include/ZeroTierOne.h
index 41efcee5..298b8157 100644
--- a/include/ZeroTierOne.h
+++ b/include/ZeroTierOne.h
@@ -252,12 +252,12 @@ enum ZT1_VirtualNetworkStatus
/**
* Waiting for network configuration (also means revision == 0)
*/
- ZT1_NETWORK_STATUS_WAITING = 0,
+ ZT1_NETWORK_STATUS_REQUESTING_CONFIGURATION = 0,
/**
* Configuration received and we are authorized
*/
- ZT1_NETWORK_STATUS_AUTHORIZED = 1,
+ ZT1_NETWORK_STATUS_OK = 1,
/**
* Netconf master told us 'nope'
@@ -267,7 +267,12 @@ enum ZT1_VirtualNetworkStatus
/**
* Netconf master exists, but this virtual network does not
*/
- ZT1_NETWORK_STATUS_NOT_FOUND = 3
+ ZT1_NETWORK_STATUS_NOT_FOUND = 3,
+
+ /**
+ * Initialization of network failed or other internal error
+ */
+ ZT1_NETWORK_STATUS_INITIALIZATION_FAILED = 4
};
/**
diff --git a/node/MAC.hpp b/node/MAC.hpp
index 3981c77d..a377ddfd 100644
--- a/node/MAC.hpp
+++ b/node/MAC.hpp
@@ -48,17 +48,6 @@ public:
MAC() throw() : _m(0ULL) {}
MAC(const MAC &m) throw() : _m(m._m) {}
- /**
- * @param octet Single octet to fill entire MAC with (e.g. 0xff for broadcast)
- */
- MAC(const unsigned char octet) throw() :
- _m( ((((uint64_t)octet) & 0xffULL) << 40) |
- ((((uint64_t)octet) & 0xffULL) << 32) |
- ((((uint64_t)octet) & 0xffULL) << 24) |
- ((((uint64_t)octet) & 0xffULL) << 16) |
- ((((uint64_t)octet) & 0xffULL) << 8) |
- (((uint64_t)octet) & 0xffULL) ) {}
-
MAC(const unsigned char a,const unsigned char b,const unsigned char c,const unsigned char d,const unsigned char e,const unsigned char f) throw() :
_m( ((((uint64_t)a) & 0xffULL) << 40) |
((((uint64_t)b) & 0xffULL) << 32) |
diff --git a/node/MulticastGroup.hpp b/node/MulticastGroup.hpp
index 85855438..8bc65f1e 100644
--- a/node/MulticastGroup.hpp
+++ b/node/MulticastGroup.hpp
@@ -93,7 +93,7 @@ public:
// the Multicast Group ADI field. Making V4 ARP work is basically why
// ADI was added, as well as handling other things that want mindless
// Ethernet broadcast to all.
- return MulticastGroup(MAC((unsigned char)0xff),Utils::ntoh(*((const uint32_t *)ip.rawIpData())));
+ return MulticastGroup(MAC(0xffffffffffffULL),Utils::ntoh(*((const uint32_t *)ip.rawIpData())));
} else if (ip.isV6()) {
// IPv6 is better designed in this respect. We can compute the IPv6
// multicast address directly from the IP address, and it gives us
diff --git a/node/Network.cpp b/node/Network.cpp
index c8150489..dc6b87a0 100644
--- a/node/Network.cpp
+++ b/node/Network.cpp
@@ -40,7 +40,7 @@
namespace ZeroTier {
-const ZeroTier::MulticastGroup Network::BROADCAST(ZeroTier::MAC(0xff),0);
+const ZeroTier::MulticastGroup Network::BROADCAST(ZeroTier::MAC(0xffffffffffffULL),0);
Network::Network(const RuntimeEnvironment *renv,uint64_t nwid) :
RR(renv),
@@ -113,7 +113,7 @@ Network::~Network()
Utils::snprintf(n,sizeof(n),"networks.d/%.16llx.mcerts",_id);
Mutex::Lock _l(_lock);
- if ((!_config)||(_config.isPublic())||(_membershipCertificates.size() == 0)) {
+ if ((!_config)||(_config->isPublic())||(_membershipCertificates.size() == 0)) {
RR->node->dataStoreDelete(n);
return;
}
@@ -141,8 +141,8 @@ public:
if ( ( (p->hasActiveDirectPath(_now)) && (_network->isAllowed(p->address())) ) || (std::find(_supernodeAddresses.begin(),_supernodeAddresses.end(),p->address()) != _supernodeAddresses.end()) ) {
Packet outp(p->address(),RR->identity.address(),Packet::VERB_MULTICAST_LIKE);
- std::set<MulticastGroup> mgs(_network->multicastGroups());
- for(std::set<MulticastGroup>::iterator mg(mgs.begin());mg!=mgs.end();++mg) {
+ std::vector<MulticastGroup> mgs(_network->multicastGroups());
+ for(std::vector<MulticastGroup>::iterator mg(mgs.begin());mg!=mgs.end();++mg) {
if ((outp.size() + 18) > ZT_UDP_DEFAULT_PAYLOAD_MTU) {
outp.armor(p->key(),true);
p->send(RR,outp.data(),outp.size(),_now);
@@ -194,7 +194,7 @@ bool Network::applyConfiguration(const SharedPtr<NetworkConfig> &conf)
int Network::setConfiguration(const Dictionary &conf,bool saveToDisk)
{
try {
- SharedPtr<NetworkConfig> newConfig(new NetworkConfig(conf)); // throws if invalid
+ const SharedPtr<NetworkConfig> newConfig(new NetworkConfig(conf)); // throws if invalid
{
Mutex::Lock _l(_lock);
if ((_config)&&(*_config == *newConfig))
@@ -368,19 +368,18 @@ void Network::clean()
}
}
-Network::Status Network::status() const
+ZT1_VirtualNetworkStatus Network::status() const
{
Mutex::Lock _l(_lock);
switch(_netconfFailure) {
case NETCONF_FAILURE_ACCESS_DENIED:
- return NETWORK_ACCESS_DENIED;
+ return ZT1_NETWORK_STATUS_ACCESS_DENIED;
case NETCONF_FAILURE_NOT_FOUND:
- return NETWORK_NOT_FOUND;
+ return ZT1_NETWORK_STATUS_NOT_FOUND;
case NETCONF_FAILURE_NONE:
- return ((_lastConfigUpdate > 0) ? ((_tap) ? NETWORK_OK : NETWORK_INITIALIZING) : NETWORK_WAITING_FOR_FIRST_AUTOCONF);
- //case NETCONF_FAILURE_INIT_FAILED:
+ return ((_lastConfigUpdate > 0) ? ZT1_NETWORK_STATUS_OK : ZT1_NETWORK_STATUS_REQUESTING_CONFIGURATION);
default:
- return NETWORK_INITIALIZATION_FAILED;
+ return ZT1_NETWORK_STATUS_INITIALIZATION_FAILED;
}
}
@@ -413,8 +412,6 @@ void Network::setEnabled(bool enabled)
{
Mutex::Lock _l(_lock);
_enabled = enabled;
- if (_tap)
- _tap->setEnabled(enabled);
}
void Network::destroy()
diff --git a/node/Network.hpp b/node/Network.hpp
index c9e62128..5693ff49 100644
--- a/node/Network.hpp
+++ b/node/Network.hpp
@@ -30,6 +30,8 @@
#include <stdint.h>
+#include "../include/ZeroTierOne.h"
+
#include <string>
#include <map>
#include <vector>
@@ -46,8 +48,6 @@
#include "MulticastGroup.hpp"
#include "MAC.hpp"
#include "Dictionary.hpp"
-#include "Identity.hpp"
-#include "InetAddress.hpp"
#include "BandwidthAccount.hpp"
#include "Multicaster.hpp"
#include "NetworkConfig.hpp"
@@ -79,20 +79,6 @@ public:
static const MulticastGroup BROADCAST;
/**
- * Possible network states
- */
- enum Status
- {
- NETWORK_INITIALIZING = 0, // Creating tap device and setting up state
- NETWORK_WAITING_FOR_FIRST_AUTOCONF = 1, // Waiting for initial setup with netconf master
- NETWORK_OK = 2, // Network is up, seems to be working
- NETWORK_ACCESS_DENIED = 3, // Netconf node reported permission denied
- NETWORK_NOT_FOUND = 4, // Netconf node reported network not found
- NETWORK_INITIALIZATION_FAILED = 5, // Cannot initialize device (OS/installation problem?)
- NETWORK_NO_MORE_DEVICES = 6 // OS cannot create any more tap devices (some OSes have a limit)
- };
-
- /**
* @return Network ID
*/
inline uint64_t id() const throw() { return _id; }
@@ -206,7 +192,7 @@ public:
/**
* @return Status of this network
*/
- Status status() const;
+ ZT1_VirtualNetworkStatus status() const;
/**
* Update and check multicast rate balance for a multicast group