diff options
author | Adam Ierymenko <adam.ierymenko@gmail.com> | 2013-10-17 16:49:31 -0400 |
---|---|---|
committer | Adam Ierymenko <adam.ierymenko@gmail.com> | 2013-10-17 16:49:31 -0400 |
commit | e6eb65be0041bbf38be38219765bda0f92fae978 (patch) | |
tree | f5b64e18ec49f4b9996ac8f4a9d7ec059c87e154 | |
parent | dd7758e33ef78a91fd0743a05c0741b71281460b (diff) | |
download | infinitytier-e6eb65be0041bbf38be38219765bda0f92fae978.tar.gz infinitytier-e6eb65be0041bbf38be38219765bda0f92fae978.zip |
Netconf support for ARP and NDP caching TTLs.
-rw-r--r-- | netconf-service/netconf.cpp | 10 | ||||
-rw-r--r-- | node/Network.cpp | 6 | ||||
-rw-r--r-- | node/Network.hpp | 24 |
3 files changed, 39 insertions, 1 deletions
diff --git a/netconf-service/netconf.cpp b/netconf-service/netconf.cpp index 71cf38b9..c061c98d 100644 --- a/netconf-service/netconf.cpp +++ b/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; diff --git a/node/Network.cpp b/node/Network.cpp index db84ada0..1c14e9f6 100644 --- a/node/Network.cpp +++ b/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; diff --git a/node/Network.hpp b/node/Network.hpp index 5af16982..e72f9a4e 100644 --- a/node/Network.hpp +++ b/node/Network.hpp @@ -273,6 +273,28 @@ public: } /** + * @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 */ inline MulticastRates multicastRates() const @@ -684,6 +706,8 @@ private: bool _isOpen; bool _emulateArp; bool _emulateNdp; + unsigned int _arpCacheTtl; + unsigned int _ndpCacheTtl; unsigned int _multicastPrefixBits; unsigned int _multicastDepth; |