Selaa lähdekoodia

Netconf support for ARP and NDP caching TTLs.

Adam Ierymenko 11 vuotta sitten
vanhempi
commit
e6eb65be00
3 muutettua tiedostoa jossa 39 lisäystä ja 1 poistoa
  1. 9 1
      netconf-service/netconf.cpp
  2. 6 0
      node/Network.cpp
  3. 24 0
      node/Network.hpp

+ 9 - 1
netconf-service/netconf.cpp

@@ -245,11 +245,13 @@ int main(int argc,char **argv)
 				unsigned int multicastDepth = 0;
 				bool emulateArp = false;
 				bool emulateNdp = false;
+				unsigned int arpCacheTtl = 0;
+				unsigned int ndpCacheTtl = 0;
 				std::string name;
 				std::string desc;
 				{
 					Query q = dbCon->query();
-					q << "SELECT name,`desc`,isOpen,multicastPrefixBits,multicastDepth,emulateArp,emulateNdp FROM Network WHERE id = " << nwid;
+					q << "SELECT name,`desc`,isOpen,multicastPrefixBits,multicastDepth,emulateArp,emulateNdp,arpCacheTtl,ndpCacheTtl FROM Network WHERE id = " << nwid;
 					StoreQueryResult rs = q.store();
 					if (rs.num_rows() > 0) {
 						name = rs[0]["name"].c_str();
@@ -257,6 +259,8 @@ int main(int argc,char **argv)
 						isOpen = ((int)rs[0]["isOpen"] > 0);
 						emulateArp = ((int)rs[0]["emulateArp"] > 0);
 						emulateNdp = ((int)rs[0]["emulateNdp"] > 0);
+						arpCacheTtl = (unsigned int)rs[0]["arpCacheTtl"];
+						ndpCacheTtl = (unsigned int)rs[0]["ndpCacheTtl"];
 						multicastPrefixBits = (unsigned int)rs[0]["multicastPrefixBits"];
 						multicastDepth = (unsigned int)rs[0]["multicastDepth"];
 					} else {
@@ -427,6 +431,10 @@ int main(int argc,char **argv)
 				netconf["ts"] = buf;
 				netconf["eARP"] = (emulateArp ? "1" : "0");
 				netconf["eNDP"] = (emulateNdp ? "1" : "0");
+				sprintf(buf,"%x",arpCacheTtl);
+				netconf["cARP"] = buf;
+				sprintf(buf,"%x",ndpCacheTtl);
+				netconf["cNDP"] = buf;
 				if (multicastPrefixBits) {
 					sprintf(buf,"%x",multicastPrefixBits);
 					netconf["mpb"] = buf;

+ 6 - 0
node/Network.cpp

@@ -91,6 +91,8 @@ SharedPtr<Network> Network::newInstance(const RuntimeEnvironment *renv,uint64_t
 	nw->_isOpen = false;
 	nw->_emulateArp = false;
 	nw->_emulateNdp = false;
+	nw->_arpCacheTtl = 0;
+	nw->_ndpCacheTtl = 0;
 	nw->_multicastPrefixBits = ZT_DEFAULT_MULTICAST_PREFIX_BITS;
 	nw->_multicastDepth = ZT_DEFAULT_MULTICAST_DEPTH;
 	nw->_status = NETWORK_WAITING_FOR_FIRST_AUTOCONF;
@@ -120,6 +122,8 @@ void Network::setConfiguration(const Network::Config &conf,bool saveToDisk)
 			_isOpen = conf.isOpen();
 			_emulateArp = conf.emulateArp();
 			_emulateNdp = conf.emulateNdp();
+			_arpCacheTtl = conf.arpCacheTtl();
+			_ndpCacheTtl = conf.ndpCacheTtl();
 			_multicastPrefixBits = conf.multicastPrefixBits();
 			_multicastDepth = conf.multicastDepth();
 
@@ -153,6 +157,8 @@ void Network::setConfiguration(const Network::Config &conf,bool saveToDisk)
 		_isOpen = false;
 		_emulateArp = false;
 		_emulateNdp = false;
+		_arpCacheTtl = 0;
+		_ndpCacheTtl = 0;
 		_status = NETWORK_WAITING_FOR_FIRST_AUTOCONF;
 
 		_lastConfigUpdate = 0;

+ 24 - 0
node/Network.hpp

@@ -272,6 +272,28 @@ public:
 			else return (e->second == "1");
 		}
 
+		/**
+		 * @return ARP cache TTL in seconds or 0 for no ARP caching
+		 */
+		inline unsigned int arpCacheTtl() const
+		{
+			const_iterator ttl(find("cARP"));
+			if (ttl == end())
+				return 0;
+			return Utils::hexStrToUInt(ttl->second.c_str());
+		}
+
+		/**
+		 * @return NDP cache TTL in seconds or 0 for no NDP caching
+		 */
+		inline unsigned int ndpCacheTtl() const
+		{
+			const_iterator ttl(find("cNDP"));
+			if (ttl == end())
+				return 0;
+			return Utils::hexStrToUInt(ttl->second.c_str());
+		}
+
 		/**
 		 * @return Multicast rates for this network
 		 */
@@ -684,6 +706,8 @@ private:
 	bool _isOpen;
 	bool _emulateArp;
 	bool _emulateNdp;
+	unsigned int _arpCacheTtl;
+	unsigned int _ndpCacheTtl;
 	unsigned int _multicastPrefixBits;
 	unsigned int _multicastDepth;