Просмотр исходного кода

Circuit tests basically work but need some tweaks, and fix some issues found with valgrind.

Adam Ierymenko 9 лет назад
Родитель
Сommit
a95fa379cc

+ 0 - 2
controller/SqliteNetworkController.cpp

@@ -258,8 +258,6 @@ SqliteNetworkController::~SqliteNetworkController()
 		sqlite3_finalize(_sCreateMember);
 		sqlite3_finalize(_sGetNodeIdentity);
 		sqlite3_finalize(_sCreateOrReplaceNode);
-		sqlite3_finalize(_sUpdateNode);
-		sqlite3_finalize(_sUpdateNode2);
 		sqlite3_finalize(_sGetEtherTypesFromRuleTable);
 		sqlite3_finalize(_sGetActiveBridges);
 		sqlite3_finalize(_sGetIpAssignmentsForNode);

+ 0 - 2
controller/SqliteNetworkController.hpp

@@ -155,8 +155,6 @@ private:
 	sqlite3_stmt *_sCreateMember;
 	sqlite3_stmt *_sGetNodeIdentity;
 	sqlite3_stmt *_sCreateOrReplaceNode;
-	sqlite3_stmt *_sUpdateNode;
-	sqlite3_stmt *_sUpdateNode2;
 	sqlite3_stmt *_sGetEtherTypesFromRuleTable;
 	sqlite3_stmt *_sGetActiveBridges;
 	sqlite3_stmt *_sGetIpAssignmentsForNode;

+ 13 - 0
examples/api/circuit-test-pingpong.json

@@ -0,0 +1,13 @@
+{
+	"hops": [
+		[ "4cbc810d4c" ],
+		[ "868cd1664f" ],
+		[ "4cbc810d4c" ],
+		[ "868cd1664f" ],
+		[ "4cbc810d4c" ],
+		[ "868cd1664f" ],
+		[ "4cbc810d4c" ],
+		[ "868cd1664f" ]
+	],
+	"reportAtEveryHop": true
+}

+ 1 - 1
examples/docker/main.sh

@@ -20,6 +20,6 @@ else
 fi
 
 rm -f /var/lib/zerotier-one/identity.*
-echo "$ZEROTIER_IDENTITY_SECRET" >identity.secret
+echo "$ZEROTIER_IDENTITY_SECRET" >/var/lib/zerotier-one/identity.secret
 
 /var/lib/zerotier-one/zerotier-one

+ 44 - 28
node/InetAddress.hpp

@@ -100,74 +100,88 @@ struct InetAddress : public sockaddr_storage
 	inline InetAddress &operator=(const InetAddress &a)
 		throw()
 	{
-		memcpy(this,&a,sizeof(InetAddress));
+		if (&a != this)
+			memcpy(this,&a,sizeof(InetAddress));
 		return *this;
 	}
 
 	inline InetAddress &operator=(const InetAddress *a)
 		throw()
 	{
-		memcpy(this,a,sizeof(InetAddress));
+		if (a != this)
+			memcpy(this,a,sizeof(InetAddress));
 		return *this;
 	}
 
 	inline InetAddress &operator=(const struct sockaddr_storage &ss)
 		throw()
 	{
-		memcpy(this,&ss,sizeof(InetAddress));
+		if (reinterpret_cast<const InetAddress *>(&ss) != this)
+			memcpy(this,&ss,sizeof(InetAddress));
 		return *this;
 	}
 
 	inline InetAddress &operator=(const struct sockaddr_storage *ss)
 		throw()
 	{
-		memcpy(this,ss,sizeof(InetAddress));
+		if (reinterpret_cast<const InetAddress *>(ss) != this)
+			memcpy(this,ss,sizeof(InetAddress));
 		return *this;
 	}
 
 	inline InetAddress &operator=(const struct sockaddr_in &sa)
 		throw()
 	{
-		memset(this,0,sizeof(InetAddress));
-		memcpy(this,&sa,sizeof(struct sockaddr_in));
+		if (reinterpret_cast<const InetAddress *>(&sa) != this) {
+			memset(this,0,sizeof(InetAddress));
+			memcpy(this,&sa,sizeof(struct sockaddr_in));
+		}
 		return *this;
 	}
 
 	inline InetAddress &operator=(const struct sockaddr_in *sa)
 		throw()
 	{
-		memset(this,0,sizeof(InetAddress));
-		memcpy(this,sa,sizeof(struct sockaddr_in));
+		if (reinterpret_cast<const InetAddress *>(sa) != this) {
+			memset(this,0,sizeof(InetAddress));
+			memcpy(this,sa,sizeof(struct sockaddr_in));
+		}
 		return *this;
 	}
 
 	inline InetAddress &operator=(const struct sockaddr_in6 &sa)
 		throw()
 	{
-		memset(this,0,sizeof(InetAddress));
-		memcpy(this,&sa,sizeof(struct sockaddr_in6));
+		if (reinterpret_cast<const InetAddress *>(&sa) != this) {
+			memset(this,0,sizeof(InetAddress));
+			memcpy(this,&sa,sizeof(struct sockaddr_in6));
+		}
 		return *this;
 	}
 
 	inline InetAddress &operator=(const struct sockaddr_in6 *sa)
 		throw()
 	{
-		memset(this,0,sizeof(InetAddress));
-		memcpy(this,sa,sizeof(struct sockaddr_in6));
+		if (reinterpret_cast<const InetAddress *>(sa) != this) {
+			memset(this,0,sizeof(InetAddress));
+			memcpy(this,sa,sizeof(struct sockaddr_in6));
+		}
 		return *this;
 	}
 
 	inline InetAddress &operator=(const struct sockaddr &sa)
 		throw()
 	{
-		memset(this,0,sizeof(InetAddress));
-		switch(sa.sa_family) {
-			case AF_INET:
-				memcpy(this,&sa,sizeof(struct sockaddr_in));
-				break;
-			case AF_INET6:
-				memcpy(this,&sa,sizeof(struct sockaddr_in6));
-				break;
+		if (reinterpret_cast<const InetAddress *>(&sa) != this) {
+			memset(this,0,sizeof(InetAddress));
+			switch(sa.sa_family) {
+				case AF_INET:
+					memcpy(this,&sa,sizeof(struct sockaddr_in));
+					break;
+				case AF_INET6:
+					memcpy(this,&sa,sizeof(struct sockaddr_in6));
+					break;
+			}
 		}
 		return *this;
 	}
@@ -175,14 +189,16 @@ struct InetAddress : public sockaddr_storage
 	inline InetAddress &operator=(const struct sockaddr *sa)
 		throw()
 	{
-		memset(this,0,sizeof(InetAddress));
-		switch(sa->sa_family) {
-			case AF_INET:
-				memcpy(this,sa,sizeof(struct sockaddr_in));
-				break;
-			case AF_INET6:
-				memcpy(this,sa,sizeof(struct sockaddr_in6));
-				break;
+		if (reinterpret_cast<const InetAddress *>(sa) != this) {
+			memset(this,0,sizeof(InetAddress));
+			switch(sa->sa_family) {
+				case AF_INET:
+					memcpy(this,sa,sizeof(struct sockaddr_in));
+					break;
+				case AF_INET6:
+					memcpy(this,sa,sizeof(struct sockaddr_in6));
+					break;
+			}
 		}
 		return *this;
 	}

+ 1 - 1
node/Node.cpp

@@ -491,7 +491,7 @@ ZT_ResultCode Node::circuitTestBegin(ZT_CircuitTest *test,void (*reportCallback)
 			for(unsigned int a=0;a<test->hops[0].breadth;++a) {
 				outp.newInitializationVector();
 				outp.setDestination(Address(test->hops[0].addresses[a]));
-				RR->sw->send(outp,true,test->credentialNetworkId);
+				RR->sw->send(outp,true,0);
 			}
 		} catch ( ... ) {
 			return ZT_RESULT_FATAL_ERROR_INTERNAL; // probably indicates FIFO too big for packet