Browse Source

Remote tracing works.

Adam Ierymenko 8 years ago
parent
commit
1685659e37
6 changed files with 30 additions and 56 deletions
  1. 9 3
      controller/EmbeddedNetworkController.cpp
  2. 3 1
      node/IncomingPacket.cpp
  3. 0 29
      node/NetworkConfig.hpp
  4. 0 4
      node/Packet.hpp
  5. 17 18
      node/Trace.cpp
  6. 1 1
      node/Trace.hpp

+ 9 - 3
controller/EmbeddedNetworkController.cpp

@@ -1089,7 +1089,9 @@ void EmbeddedNetworkController::handleRemoteTrace(const ZT_RemoteTrace &rt)
 {
 	try {
 		std::vector<uint64_t> nw4m(_db.networksForMember(rt.origin));
-		if (nw4m.empty()) // ignore these for unknown members
+
+		// Ignore remote traces from members we don't know about
+		if (nw4m.empty())
 			return;
 
 		// Convert Dictionary into JSON object
@@ -1133,7 +1135,8 @@ void EmbeddedNetworkController::handleRemoteTrace(const ZT_RemoteTrace &rt)
 			}
 		}
 
-		bool accept = false;
+		bool accept = true;
+		/*
 		for(std::vector<uint64_t>::const_iterator nwid(nw4m.begin());nwid!=nw4m.end();++nwid) {
 			json nconf;
 			if (_db.getNetwork(*nwid,nconf)) {
@@ -1153,9 +1156,10 @@ void EmbeddedNetworkController::handleRemoteTrace(const ZT_RemoteTrace &rt)
 				} catch ( ... ) {} // ignore missing fields or other errors, drop trace message
 			}
 		}
+		*/
 		if (accept) {
 			char p[128];
-			OSUtils::ztsnprintf(p,sizeof(p),"trace/%.10llx_%.16llx.json",rt.origin,OSUtils::now());
+			OSUtils::ztsnprintf(p,sizeof(p),"trace/%.10llx-%.10llx-%.16llx",_signingId.address().toInt(),rt.origin,OSUtils::now());
 			_db.writeRaw(p,OSUtils::jsonDump(d));
 		}
 	} catch ( ... ) {
@@ -1419,6 +1423,8 @@ void EmbeddedNetworkController::_request(
 		rtt = OSUtils::jsonString(network["remoteTraceTarget"],"");
 		if (rtt.length() == 10) {
 			nc->remoteTraceTarget = Address(Utils::hexStrToU64(rtt.c_str()));
+		} else {
+			nc->remoteTraceTarget = _signingId.address();
 		}
 	}
 

+ 3 - 1
node/IncomingPacket.cpp

@@ -115,6 +115,7 @@ bool IncomingPacket::tryDecode(const RuntimeEnvironment *RR,void *tPtr)
 				case Packet::VERB_MULTICAST_FRAME:            return _doMULTICAST_FRAME(RR,tPtr,peer);
 				case Packet::VERB_PUSH_DIRECT_PATHS:          return _doPUSH_DIRECT_PATHS(RR,tPtr,peer);
 				case Packet::VERB_USER_MESSAGE:               return _doUSER_MESSAGE(RR,tPtr,peer);
+				case Packet::VERB_REMOTE_TRACE:               return _doREMOTE_TRACE(RR,tPtr,peer);
 			}
 		} else {
 			RR->sw->requestWhois(tPtr,sourceAddress);
@@ -1172,8 +1173,9 @@ bool IncomingPacket::_doREMOTE_TRACE(const RuntimeEnvironment *RR,void *tPtr,con
 	while (ptr < eof) {
 		if (!*ptr) { // end of string
 			rt.len = (unsigned int)(ptr - rt.data);
-			if ((rt.len > 0)&&(rt.len <= ZT_MAX_REMOTE_TRACE_SIZE))
+			if ((rt.len > 0)&&(rt.len <= ZT_MAX_REMOTE_TRACE_SIZE)) {
 				RR->node->postEvent(tPtr,ZT_EVENT_REMOTE_TRACE,&rt);
+			}
 			rt.data = const_cast<char *>(++ptr); // start of next string, if any
 		} else {
 			++ptr;

+ 0 - 29
node/NetworkConfig.hpp

@@ -410,35 +410,6 @@ public:
 		return (Tag *)0;
 	}
 
-	/*
-	inline void dump() const
-	{
-		printf("networkId==%.16llx\n",networkId);
-		printf("timestamp==%llu\n",timestamp);
-		printf("credentialTimeMaxDelta==%llu\n",credentialTimeMaxDelta);
-		printf("revision==%llu\n",revision);
-		printf("issuedTo==%.10llx\n",issuedTo.toInt());
-		printf("multicastLimit==%u\n",multicastLimit);
-		printf("flags=%.8lx\n",(unsigned long)flags);
-		printf("specialistCount==%u\n",specialistCount);
-		for(unsigned int i=0;i<specialistCount;++i)
-			printf("  specialists[%u]==%.16llx\n",i,specialists[i]);
-		printf("routeCount==%u\n",routeCount);
-		for(unsigned int i=0;i<routeCount;++i) {
-			printf("  routes[i].target==%s\n",reinterpret_cast<const InetAddress *>(&(routes[i].target))->toString().c_str());
-			printf("  routes[i].via==%s\n",reinterpret_cast<const InetAddress *>(&(routes[i].via))->toIpString().c_str());
-			printf("  routes[i].flags==%.4x\n",(unsigned int)routes[i].flags);
-			printf("  routes[i].metric==%u\n",(unsigned int)routes[i].metric);
-		}
-		printf("staticIpCount==%u\n",staticIpCount);
-		for(unsigned int i=0;i<staticIpCount;++i)
-			printf("  staticIps[i]==%s\n",staticIps[i].toString().c_str());
-		printf("ruleCount==%u\n",ruleCount);
-		printf("name==%s\n",name);
-		printf("com==%s\n",com.toString().c_str());
-	}
-	*/
-
 	/**
 	 * Network ID that this configuration applies to
 	 */

+ 0 - 4
node/Packet.hpp

@@ -935,10 +935,6 @@ public:
 		 * be used unless they are blacklisted explicitly or unless flag 0x01
 		 * is set.
 		 *
-		 * Only a subset of this functionality is currently implemented: basic
-		 * path pushing and learning. Blacklisting and trust are not fully
-		 * implemented yet (encryption is still always used).
-		 *
 		 * OK and ERROR are not generated.
 		 */
 		VERB_PUSH_DIRECT_PATHS = 0x10,

+ 17 - 18
node/Trace.cpp

@@ -140,7 +140,7 @@ void Trace::incomingNetworkAccessDenied(void *const tPtr,const SharedPtr<Network
 		d.add(ZT_REMOTE_TRACE_FIELD__LOCAL_SOCKET,path->localSocket());
 	}
 	d.add(ZT_REMOTE_TRACE_FIELD__NETWORK_ID,network->id());
-	_send(tPtr,d,network);
+	_send(tPtr,d,*network);
 }
 
 void Trace::incomingNetworkFrameDropped(void *const tPtr,const SharedPtr<Network> &network,const SharedPtr<Path> &path,const uint64_t packetId,const unsigned int packetLength,const Address &source,const Packet::Verb verb,const MAC &sourceMac,const MAC &destMac,const char *reason)
@@ -161,7 +161,7 @@ void Trace::incomingNetworkFrameDropped(void *const tPtr,const SharedPtr<Network
 	d.add(ZT_REMOTE_TRACE_FIELD__DEST_MAC,destMac.toInt());
 	if (reason)
 		d.add(ZT_REMOTE_TRACE_FIELD__REASON,reason);
-	_send(tPtr,d,network);
+	_send(tPtr,d,*network);
 }
 
 void Trace::incomingPacketTrustedPath(void *const tPtr,const SharedPtr<Path> &path,const uint64_t packetId,const Address &source,const uint64_t trustedPathId,bool approved)
@@ -218,7 +218,7 @@ void Trace::networkConfigRequestSent(void *const tPtr,const Network &network,con
 	d.add(ZT_REMOTE_TRACE_FIELD__EVENT,ZT_REMOTE_TRACE_EVENT__NETWORK_CONFIG_REQUEST_SENT_S);
 	d.add(ZT_REMOTE_TRACE_FIELD__NETWORK_ID,network.id());
 	d.add(ZT_REMOTE_TRACE_FIELD__NETWORK_CONTROLLER_ID,controller);
-	_send(tPtr,d,0);
+	_send(tPtr,d,network);
 }
 
 void Trace::networkFilter(
@@ -259,7 +259,7 @@ void Trace::networkFilter(
 	d.add(ZT_REMOTE_TRACE_FIELD__FRAME_LENGTH,(uint64_t)frameLen);
 	if (frameLen > 0)
 		d.add(ZT_REMOTE_TRACE_FIELD__FRAME_DATA,(const char *)frameData,(frameLen > 256) ? (int)256 : (int)frameLen);
-	_send(tPtr,d,network.id());
+	_send(tPtr,d,network);
 }
 
 void Trace::credentialRejected(void *const tPtr,const CertificateOfMembership &c,const char *reason)
@@ -273,7 +273,7 @@ void Trace::credentialRejected(void *const tPtr,const CertificateOfMembership &c
 	d.add(ZT_REMOTE_TRACE_FIELD__CREDENTIAL_ISSUED_TO,c.issuedTo());
 	if (reason)
 		d.add(ZT_REMOTE_TRACE_FIELD__REASON,reason);
-	_send(tPtr,d,0);
+	_send(tPtr,d,c.networkId());
 }
 
 void Trace::credentialRejected(void *const tPtr,const CertificateOfOwnership &c,const char *reason)
@@ -287,7 +287,7 @@ void Trace::credentialRejected(void *const tPtr,const CertificateOfOwnership &c,
 	d.add(ZT_REMOTE_TRACE_FIELD__CREDENTIAL_ISSUED_TO,c.issuedTo());
 	if (reason)
 		d.add(ZT_REMOTE_TRACE_FIELD__REASON,reason);
-	_send(tPtr,d,0);
+	_send(tPtr,d,c.networkId());
 }
 
 void Trace::credentialRejected(void *const tPtr,const CertificateOfRepresentation &c,const char *reason)
@@ -313,7 +313,7 @@ void Trace::credentialRejected(void *const tPtr,const Capability &c,const char *
 	d.add(ZT_REMOTE_TRACE_FIELD__CREDENTIAL_ISSUED_TO,c.issuedTo());
 	if (reason)
 		d.add(ZT_REMOTE_TRACE_FIELD__REASON,reason);
-	_send(tPtr,d,0);
+	_send(tPtr,d,c.networkId());
 }
 
 void Trace::credentialRejected(void *const tPtr,const Tag &c,const char *reason)
@@ -328,7 +328,7 @@ void Trace::credentialRejected(void *const tPtr,const Tag &c,const char *reason)
 	d.add(ZT_REMOTE_TRACE_FIELD__CREDENTIAL_INFO,(uint64_t)c.value());
 	if (reason)
 		d.add(ZT_REMOTE_TRACE_FIELD__REASON,reason);
-	_send(tPtr,d,0);
+	_send(tPtr,d,c.networkId());
 }
 
 void Trace::credentialRejected(void *const tPtr,const Revocation &c,const char *reason)
@@ -341,7 +341,7 @@ void Trace::credentialRejected(void *const tPtr,const Revocation &c,const char *
 	d.add(ZT_REMOTE_TRACE_FIELD__CREDENTIAL_REVOCATION_TARGET,c.target());
 	if (reason)
 		d.add(ZT_REMOTE_TRACE_FIELD__REASON,reason);
-	_send(tPtr,d,0);
+	_send(tPtr,d,c.networkId());
 }
 
 void Trace::credentialAccepted(void *const tPtr,const CertificateOfMembership &c)
@@ -353,7 +353,7 @@ void Trace::credentialAccepted(void *const tPtr,const CertificateOfMembership &c
 	d.add(ZT_REMOTE_TRACE_FIELD__CREDENTIAL_ID,(uint64_t)c.id());
 	d.add(ZT_REMOTE_TRACE_FIELD__CREDENTIAL_TIMESTAMP,c.timestamp());
 	d.add(ZT_REMOTE_TRACE_FIELD__CREDENTIAL_ISSUED_TO,c.issuedTo());
-	_send(tPtr,d,0);
+	_send(tPtr,d,c.networkId());
 }
 
 void Trace::credentialAccepted(void *const tPtr,const CertificateOfOwnership &c)
@@ -365,7 +365,7 @@ void Trace::credentialAccepted(void *const tPtr,const CertificateOfOwnership &c)
 	d.add(ZT_REMOTE_TRACE_FIELD__CREDENTIAL_ID,(uint64_t)c.id());
 	d.add(ZT_REMOTE_TRACE_FIELD__CREDENTIAL_TIMESTAMP,c.timestamp());
 	d.add(ZT_REMOTE_TRACE_FIELD__CREDENTIAL_ISSUED_TO,c.issuedTo());
-	_send(tPtr,d,0);
+	_send(tPtr,d,c.networkId());
 }
 
 void Trace::credentialAccepted(void *const tPtr,const CertificateOfRepresentation &c)
@@ -387,7 +387,7 @@ void Trace::credentialAccepted(void *const tPtr,const Capability &c)
 	d.add(ZT_REMOTE_TRACE_FIELD__CREDENTIAL_ID,(uint64_t)c.id());
 	d.add(ZT_REMOTE_TRACE_FIELD__CREDENTIAL_TIMESTAMP,c.timestamp());
 	d.add(ZT_REMOTE_TRACE_FIELD__CREDENTIAL_ISSUED_TO,c.issuedTo());
-	_send(tPtr,d,0);
+	_send(tPtr,d,c.networkId());
 }
 
 void Trace::credentialAccepted(void *const tPtr,const Tag &c)
@@ -400,7 +400,7 @@ void Trace::credentialAccepted(void *const tPtr,const Tag &c)
 	d.add(ZT_REMOTE_TRACE_FIELD__CREDENTIAL_TIMESTAMP,c.timestamp());
 	d.add(ZT_REMOTE_TRACE_FIELD__CREDENTIAL_ISSUED_TO,c.issuedTo());
 	d.add(ZT_REMOTE_TRACE_FIELD__CREDENTIAL_INFO,(uint64_t)c.value());
-	_send(tPtr,d,0);
+	_send(tPtr,d,c.networkId());
 }
 
 void Trace::credentialAccepted(void *const tPtr,const Revocation &c)
@@ -411,7 +411,7 @@ void Trace::credentialAccepted(void *const tPtr,const Revocation &c)
 	d.add(ZT_REMOTE_TRACE_FIELD__CREDENTIAL_TYPE,(uint64_t)c.credentialType());
 	d.add(ZT_REMOTE_TRACE_FIELD__CREDENTIAL_ID,(uint64_t)c.id());
 	d.add(ZT_REMOTE_TRACE_FIELD__CREDENTIAL_REVOCATION_TARGET,c.target());
-	_send(tPtr,d,0);
+	_send(tPtr,d,c.networkId());
 }
 
 void Trace::_send(void *const tPtr,const Dictionary<ZT_MAX_REMOTE_TRACE_SIZE> &d)
@@ -434,7 +434,6 @@ void Trace::_send(void *const tPtr,const Dictionary<ZT_MAX_REMOTE_TRACE_SIZE> &d
 		}
 	}
 	_traceMsgBuf[i] = (char)0;
-	//printf("%s\n",_traceMsgBuf);
 	RR->node->postEvent(tPtr,ZT_EVENT_TRACE,_traceMsgBuf);
 #endif
 
@@ -461,11 +460,11 @@ void Trace::_send(void *const tPtr,const Dictionary<ZT_MAX_REMOTE_TRACE_SIZE> &d
 	}
 }
 
-void Trace::_send(void *const tPtr,const Dictionary<ZT_MAX_REMOTE_TRACE_SIZE> &d,const SharedPtr<Network> &network)
+void Trace::_send(void *const tPtr,const Dictionary<ZT_MAX_REMOTE_TRACE_SIZE> &d,const Network &network)
 {
 	_send(tPtr,d);
-	if ((network)&&(network->config().remoteTraceTarget)) {
-		Packet outp(network->config().remoteTraceTarget,RR->identity.address(),Packet::VERB_REMOTE_TRACE);
+	if (network.config().remoteTraceTarget) {
+		Packet outp(network.config().remoteTraceTarget,RR->identity.address(),Packet::VERB_REMOTE_TRACE);
 		outp.appendCString(d.data());
 		outp.compress();
 		RR->sw->send(tPtr,outp,true);

+ 1 - 1
node/Trace.hpp

@@ -154,7 +154,7 @@ private:
 
 	void _send(void *const tPtr,const Dictionary<ZT_MAX_REMOTE_TRACE_SIZE> &d);
 	void _send(void *const tPtr,const Dictionary<ZT_MAX_REMOTE_TRACE_SIZE> &d,const uint64_t networkId);
-	void _send(void *const tPtr,const Dictionary<ZT_MAX_REMOTE_TRACE_SIZE> &d,const SharedPtr<Network> &network);
+	void _send(void *const tPtr,const Dictionary<ZT_MAX_REMOTE_TRACE_SIZE> &d,const Network &network);
 
 #ifdef ZT_TRACE
 	char _traceMsgBuf[4096];