mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2025-06-05 20:13:44 +02:00
Actually report a meaningful network status instead of always OK
This commit is contained in:
parent
86056fdbd9
commit
5cabb60a6f
3 changed files with 46 additions and 3 deletions
|
@ -104,6 +104,17 @@ bool Network::Certificate::qualifyMembership(const Network::Certificate &mc) con
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *Network::statusString(const Status s)
|
||||||
|
throw()
|
||||||
|
{
|
||||||
|
switch(s) {
|
||||||
|
case NETWORK_WAITING_FOR_FIRST_AUTOCONF: return "WAITING_FOR_FIRST_AUTOCONF";
|
||||||
|
case NETWORK_OK: return "OK";
|
||||||
|
case NETWORK_ACCESS_DENIED: return "ACCESS_DENIED";
|
||||||
|
}
|
||||||
|
return "(invalid)";
|
||||||
|
}
|
||||||
|
|
||||||
Network::~Network()
|
Network::~Network()
|
||||||
{
|
{
|
||||||
delete _tap;
|
delete _tap;
|
||||||
|
@ -202,6 +213,7 @@ void Network::clean()
|
||||||
std::string mcdbPath(_r->homePath + ZT_PATH_SEPARATOR_S + "networks.d" + ZT_PATH_SEPARATOR_S + toString() + ".mcerts");
|
std::string mcdbPath(_r->homePath + ZT_PATH_SEPARATOR_S + "networks.d" + ZT_PATH_SEPARATOR_S + toString() + ".mcerts");
|
||||||
|
|
||||||
Mutex::Lock _l(_lock);
|
Mutex::Lock _l(_lock);
|
||||||
|
|
||||||
if (_configuration.isOpen()) {
|
if (_configuration.isOpen()) {
|
||||||
_membershipCertificates.clear();
|
_membershipCertificates.clear();
|
||||||
Utils::rm(mcdbPath);
|
Utils::rm(mcdbPath);
|
||||||
|
@ -242,6 +254,14 @@ void Network::clean()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Network::Status Network::status() const
|
||||||
|
{
|
||||||
|
Mutex::Lock _l(_lock);
|
||||||
|
if (_configuration.containsAllFields())
|
||||||
|
return NETWORK_OK;
|
||||||
|
return NETWORK_WAITING_FOR_FIRST_AUTOCONF;
|
||||||
|
}
|
||||||
|
|
||||||
void Network::_CBhandleTapData(void *arg,const MAC &from,const MAC &to,unsigned int etherType,const Buffer<4096> &data)
|
void Network::_CBhandleTapData(void *arg,const MAC &from,const MAC &to,unsigned int etherType,const Buffer<4096> &data)
|
||||||
{
|
{
|
||||||
const RuntimeEnvironment *_r = ((Network *)arg)->_r;
|
const RuntimeEnvironment *_r = ((Network *)arg)->_r;
|
||||||
|
|
|
@ -265,6 +265,23 @@ public:
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Status for networks
|
||||||
|
*/
|
||||||
|
enum Status
|
||||||
|
{
|
||||||
|
NETWORK_WAITING_FOR_FIRST_AUTOCONF,
|
||||||
|
NETWORK_OK,
|
||||||
|
NETWORK_ACCESS_DENIED
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param s Status
|
||||||
|
* @return String description
|
||||||
|
*/
|
||||||
|
static const char *statusString(const Status s)
|
||||||
|
throw();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Only NodeConfig can create, only SharedPtr can delete
|
// Only NodeConfig can create, only SharedPtr can delete
|
||||||
|
|
||||||
|
@ -404,6 +421,11 @@ public:
|
||||||
return _lastConfigUpdate;
|
return _lastConfigUpdate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Status of this network
|
||||||
|
*/
|
||||||
|
Status status() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static void _CBhandleTapData(void *arg,const MAC &from,const MAC &to,unsigned int etherType,const Buffer<4096> &data);
|
static void _CBhandleTapData(void *arg,const MAC &from,const MAC &to,unsigned int etherType,const Buffer<4096> &data);
|
||||||
void _restoreState();
|
void _restoreState();
|
||||||
|
|
|
@ -175,11 +175,12 @@ std::vector<std::string> NodeConfig::execute(const char *command)
|
||||||
}
|
}
|
||||||
// TODO: display network status, such as "permission denied to closed
|
// TODO: display network status, such as "permission denied to closed
|
||||||
// network" or "waiting".
|
// network" or "waiting".
|
||||||
_P("200 listnetworks %.16llx OK %s %s %s",
|
_P("200 listnetworks %.16llx %s %s %s %s",
|
||||||
(unsigned long long)nw->first,
|
(unsigned long long)nw->first,
|
||||||
(nw->second->isOpen() ? "public" : "private"),
|
Network::statusString(nw->second->status()),
|
||||||
|
(nw->second->isOpen() ? "open" : "private"),
|
||||||
nw->second->tap().deviceName().c_str(),
|
nw->second->tap().deviceName().c_str(),
|
||||||
tmp.c_str());
|
((tmp.length() > 0) ? tmp.c_str() : "-"));
|
||||||
}
|
}
|
||||||
} else if (cmd[0] == "join") {
|
} else if (cmd[0] == "join") {
|
||||||
if (cmd.size() > 1) {
|
if (cmd.size() > 1) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue