From eb4a78bcc36de37a24a8f9de22f37a104895ff84 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Thu, 16 Jun 2016 17:40:32 -0700 Subject: Report routes in locally joined network JSON. --- service/ControlPlane.cpp | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/service/ControlPlane.cpp b/service/ControlPlane.cpp index 525327e9..df2568a3 100644 --- a/service/ControlPlane.cpp +++ b/service/ControlPlane.cpp @@ -73,6 +73,28 @@ static std::string _jsonEnumerate(const struct sockaddr_storage *ss,unsigned int buf.push_back(']'); return buf; } +static std::string _jsonEnumerate(const ZT_VirtualNetworkRoute *routes,unsigned int count) +{ + std::string buf; + buf.push_back('['); + for(unsigned int i=0;i 0) + buf.push_back(','); + buf.append("{\"target\":\""); + buf.append(_jsonEscape(reinterpret_cast(&(routes[i].target))->toString())); + buf.append("\",\"via\":"); + if (routes[i].via.ss_family == routes[i].target.ss_family) { + buf.push_back('"'); + buf.append(_jsonEscape(reinterpret_cast(&(routes[i].via))->toIpString())); + buf.append("\","); + } else buf.append("null,"); + char tmp[1024]; + Utils::snprintf(tmp,sizeof(tmp),"\"flags\":%u,\"metric\":%u}",(unsigned int)routes[i].flags,(unsigned int)routes[i].metric); + buf.append(tmp); + } + buf.push_back(']'); + return buf; +} static void _jsonAppend(unsigned int depth,std::string &buf,const ZT_VirtualNetworkConfig *nc,const std::string &portDeviceName) { @@ -113,6 +135,7 @@ static void _jsonAppend(unsigned int depth,std::string &buf,const ZT_VirtualNetw "%s\t\"portError\": %d,\n" "%s\t\"netconfRevision\": %lu,\n" "%s\t\"assignedAddresses\": %s,\n" + "%s\t\"routes\": %s,\n" "%s\t\"portDeviceName\": \"%s\"\n" "%s}", prefix, @@ -128,6 +151,7 @@ static void _jsonAppend(unsigned int depth,std::string &buf,const ZT_VirtualNetw prefix,nc->portError, prefix,nc->netconfRevision, prefix,_jsonEnumerate(nc->assignedAddresses,nc->assignedAddressCount).c_str(), + prefix,_jsonEnumerate(nc->routes,nc->routeCount).c_str(), prefix,_jsonEscape(portDeviceName).c_str(), prefix); buf.append(json); -- cgit v1.2.3