summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2013-10-17 16:49:31 -0400
committerAdam Ierymenko <adam.ierymenko@gmail.com>2013-10-17 16:49:31 -0400
commite6eb65be0041bbf38be38219765bda0f92fae978 (patch)
treef5b64e18ec49f4b9996ac8f4a9d7ec059c87e154
parentdd7758e33ef78a91fd0743a05c0741b71281460b (diff)
downloadinfinitytier-e6eb65be0041bbf38be38219765bda0f92fae978.tar.gz
infinitytier-e6eb65be0041bbf38be38219765bda0f92fae978.zip
Netconf support for ARP and NDP caching TTLs.
-rw-r--r--netconf-service/netconf.cpp10
-rw-r--r--node/Network.cpp6
-rw-r--r--node/Network.hpp24
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;