diff options
author | Adam Ierymenko <adam.ierymenko@gmail.com> | 2014-10-13 11:47:14 -0700 |
---|---|---|
committer | Adam Ierymenko <adam.ierymenko@gmail.com> | 2014-10-13 11:47:14 -0700 |
commit | 52314dcdf6e0241a8cc8b06bfbae5e36d4910eef (patch) | |
tree | 7a4a6457d47f9607f0e406be12cce658623d11e1 | |
parent | d8d4aace4254fb8e00f56950b30a67b03e164f92 (diff) | |
download | infinitytier-52314dcdf6e0241a8cc8b06bfbae5e36d4910eef.tar.gz infinitytier-52314dcdf6e0241a8cc8b06bfbae5e36d4910eef.zip |
GitHub issue #111
-rw-r--r-- | control/NodeControlService.cpp | 14 | ||||
-rw-r--r-- | include/ZeroTierOne.h | 9 | ||||
-rw-r--r-- | node/Node.cpp | 1 |
3 files changed, 22 insertions, 2 deletions
diff --git a/control/NodeControlService.cpp b/control/NodeControlService.cpp index ea07634e..08f479f5 100644 --- a/control/NodeControlService.cpp +++ b/control/NodeControlService.cpp @@ -138,7 +138,7 @@ void NodeControlService::_doCommand(IpcConnection *ipcc,const char *commandLine) if (cmd[0] == "info") { ipcc->printf("200 info %.10llx %s %s"ZT_EOL_S,_node->address(),(_node->online() ? "ONLINE" : "OFFLINE"),Node::versionString()); } else if (cmd[0] == "listpeers") { - ipcc->printf("200 listpeers <ztaddr> <paths> <latency> <version>"ZT_EOL_S); + ipcc->printf("200 listpeers <ztaddr> <paths> <latency> <version> <role>"ZT_EOL_S); ZT1_Node_PeerList *pl = _node->listPeers(); if (pl) { for(unsigned int i=0;i<pl->numPeers;++i) { @@ -175,7 +175,17 @@ void NodeControlService::_doCommand(IpcConnection *ipcc,const char *commandLine) (pl->peers[i].paths[j].fixed ? "fixed" : (pl->peers[i].paths[j].active ? "active" : "inactive"))); } } - ipcc->printf(" %u %s"ZT_EOL_S,pl->peers[i].latency,(pl->peers[i].remoteVersion[0]) ? pl->peers[i].remoteVersion : "-"); + const char *rolestr; + switch(pl->peers[i].role) { + case ZT1_Node_Peer_SUPERNODE: rolestr = "SUPERNODE"; break; + case ZT1_Node_Peer_HUB: rolestr = "HUB"; break; + case ZT1_Node_Peer_NODE: rolestr = "NODE"; break; + default: rolestr = "?"; break; + } + ipcc->printf(" %u %s %s"ZT_EOL_S, + pl->peers[i].latency, + ((pl->peers[i].remoteVersion[0]) ? pl->peers[i].remoteVersion : "-"), + rolestr); } _node->freeQueryResult(pl); } diff --git a/include/ZeroTierOne.h b/include/ZeroTierOne.h index 2a00f542..2474a3a0 100644 --- a/include/ZeroTierOne.h +++ b/include/ZeroTierOne.h @@ -204,6 +204,15 @@ struct ZT1_Node_Peer unsigned int latency; /** + * What trust hierarchy role does this device have? + */ + enum { + ZT1_Node_Peer_SUPERNODE = 0, // planetary supernode + ZT1_Node_Peer_HUB = 1, // locally federated hub (coming soon) + ZT1_Node_Peer_NODE = 2 // ordinary node + } role; + + /** * Array of network paths to peer */ struct ZT1_Node_PhysicalPath *paths; diff --git a/node/Node.cpp b/node/Node.cpp index 8ca68a06..34f247b4 100644 --- a/node/Node.cpp +++ b/node/Node.cpp @@ -847,6 +847,7 @@ ZT1_Node_PeerList *Node::listPeers() p->first->address().toString(prec->address,sizeof(prec->address)); prec->rawAddress = p->first->address().toInt(); prec->latency = p->first->latency(); + prec->role = RR->topology->isSupernode(p->first->address()) ? ZT1_Node_Peer_SUPERNODE : ZT1_Node_Peer_NODE; prec->paths = (ZT1_Node_PhysicalPath *)buf; buf += sizeof(ZT1_Node_PhysicalPath) * p->second.size(); |