summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2014-10-13 11:47:14 -0700
committerAdam Ierymenko <adam.ierymenko@gmail.com>2014-10-13 11:47:14 -0700
commit52314dcdf6e0241a8cc8b06bfbae5e36d4910eef (patch)
tree7a4a6457d47f9607f0e406be12cce658623d11e1
parentd8d4aace4254fb8e00f56950b30a67b03e164f92 (diff)
downloadinfinitytier-52314dcdf6e0241a8cc8b06bfbae5e36d4910eef.tar.gz
infinitytier-52314dcdf6e0241a8cc8b06bfbae5e36d4910eef.zip
GitHub issue #111
-rw-r--r--control/NodeControlService.cpp14
-rw-r--r--include/ZeroTierOne.h9
-rw-r--r--node/Node.cpp1
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();