File name format change and Removed warning messages (Except warning from boost for Logging)
Change-Id: If3a3a5411d377d925527fc3e8809c228a9a81e26
diff --git a/src/adjacent.cpp b/src/adjacent.cpp
new file mode 100644
index 0000000..807eb0b
--- /dev/null
+++ b/src/adjacent.cpp
@@ -0,0 +1,40 @@
+#include <iostream>
+#include <string>
+#include <cmath>
+#include <limits>
+#include "adjacent.hpp"
+
+namespace nlsr {
+
+using namespace std;
+
+Adjacent::Adjacent(const string& an, int cf, double lc, int s, int iton)
+{
+ m_name = an;
+ m_connectingFace = cf;
+ m_linkCost = lc;
+ m_status = s;
+ m_interestTimedOutNo = iton;
+}
+
+bool
+Adjacent::isEqual(Adjacent& adj)
+{
+ return (m_name == adj.getName()) &&
+ (m_connectingFace == adj.getConnectingFace()) &&
+ (std::abs(m_linkCost - adj.getLinkCost()) <
+ std::numeric_limits<double>::epsilon()) ;
+}
+
+std::ostream&
+operator<<(std::ostream& os, Adjacent& adj)
+{
+ os << "Adjacent : " << adj.getName() << endl;
+ os << "Connecting Face: " << adj.getConnectingFace() << endl;
+ os << "Link Cost: " << adj.getLinkCost() << endl;
+ os << "Status: " << adj.getStatus() << endl;
+ os << "Interest Timed out: " << adj.getInterestTimedOutNo() << endl;
+ return os;
+}
+
+} //namespace nlsr
diff --git a/src/adjacent.hpp b/src/adjacent.hpp
new file mode 100644
index 0000000..22066d1
--- /dev/null
+++ b/src/adjacent.hpp
@@ -0,0 +1,107 @@
+#include <string>
+
+#ifndef ADJACENT_HPP
+#define ADJACENT_HPP
+
+namespace nlsr {
+class Adjacent
+{
+
+public:
+ Adjacent()
+ : m_name("")
+ , m_connectingFace(0)
+ , m_linkCost(10.0)
+ , m_status(0)
+ , m_interestTimedOutNo(0)
+ {
+ }
+
+ Adjacent(const std::string& an)
+ : m_connectingFace(0)
+ , m_linkCost(0.0)
+ , m_status(0)
+ , m_interestTimedOutNo(0)
+ {
+ m_name = an;
+ }
+
+ Adjacent(const std::string& an, int cf, double lc, int s, int iton);
+
+ std::string
+ getName()
+ {
+ return m_name;
+ }
+
+ void
+ setName(const std::string& an)
+ {
+ m_name = an;
+ }
+
+ int
+ getConnectingFace()
+ {
+ return m_connectingFace;
+ }
+
+ void
+ setConnectingFace(int cf)
+ {
+ m_connectingFace = cf;
+ }
+
+ double
+ getLinkCost()
+ {
+ return m_linkCost;
+ }
+
+ void
+ setLinkCost(double lc)
+ {
+ m_linkCost = lc;
+ }
+
+ int
+ getStatus()
+ {
+ return m_status;
+ }
+
+ void
+ setStatus(int s)
+ {
+ m_status = s;
+ }
+
+ int
+ getInterestTimedOutNo()
+ {
+ return m_interestTimedOutNo;
+ }
+
+ void
+ setInterestTimedOutNo(int iton)
+ {
+ m_interestTimedOutNo = iton;
+ }
+
+ bool
+ isEqual(Adjacent& adj);
+
+private:
+ std::string m_name;
+ int m_connectingFace;
+ double m_linkCost;
+ int m_status;
+ int m_interestTimedOutNo;
+};
+
+std::ostream&
+operator<<(std::ostream& os, Adjacent& adj);
+
+} // namespace nlsr
+
+#endif //ADJACENT_HPP
diff --git a/src/adl.cpp b/src/adl.cpp
new file mode 100644
index 0000000..57b3307
--- /dev/null
+++ b/src/adl.cpp
@@ -0,0 +1,243 @@
+#include <iostream>
+#include <algorithm>
+
+#include "adl.hpp"
+#include "adjacent.hpp"
+#include "nlsr.hpp"
+
+
+namespace nlsr {
+
+Adl::Adl()
+{
+}
+
+Adl::~Adl()
+{
+}
+
+static bool
+adjacent_compare(Adjacent& adj1, Adjacent& adj2)
+{
+ return adj1.getName() == adj2.getName();
+}
+
+int
+Adl::insert(Adjacent& adj)
+{
+ std::list<Adjacent>::iterator it = find(adj.getName());
+ if (it != m_adjList.end())
+ {
+ return -1;
+ }
+ m_adjList.push_back(adj);
+ return 0;
+}
+
+void
+Adl::addAdjacentsFromAdl(Adl& adl)
+{
+ for (std::list<Adjacent>::iterator it = adl.getAdjList().begin();
+ it != adl.getAdjList().end(); ++it)
+ {
+ insert((*it));
+ }
+}
+
+int
+Adl::updateAdjacentStatus(string adjName, int s)
+{
+ std::list<Adjacent>::iterator it = find(adjName);
+ if (it == m_adjList.end())
+ {
+ return -1;
+ }
+ (*it).setStatus(s);
+ return 0;
+}
+
+Adjacent
+Adl::getAdjacent(string adjName)
+{
+ Adjacent adj(adjName);
+ std::list<Adjacent>::iterator it = find(adjName);
+ if (it != m_adjList.end())
+ {
+ return (*it);
+ }
+ return adj;
+}
+
+
+bool
+Adl::isEqual(Adl& adl)
+{
+ if (getSize() != adl.getSize())
+ {
+ return false;
+ }
+ m_adjList.sort(adjacent_compare);
+ adl.getAdjList().sort(adjacent_compare);
+ int equalAdjCount = 0;
+ std::list<Adjacent> adjList2 = adl.getAdjList();
+ std::list<Adjacent>::iterator it1;
+ std::list<Adjacent>::iterator it2;
+ for (it1 = m_adjList.begin(), it2 = adjList2.begin();
+ it1 != m_adjList.end(); it1++, it2++)
+ {
+ if (!(*it1).isEqual((*it2)))
+ {
+ break;
+ }
+ equalAdjCount++;
+ }
+ return equalAdjCount == getSize();
+}
+
+
+int
+Adl::updateAdjacentLinkCost(string adjName, double lc)
+{
+ std::list<Adjacent>::iterator it = find(adjName);
+ if (it == m_adjList.end())
+ {
+ return -1;
+ }
+ (*it).setLinkCost(lc);
+ return 0;
+}
+
+bool
+Adl::isNeighbor(string adjName)
+{
+ std::list<Adjacent>::iterator it = find(adjName);
+ if (it == m_adjList.end())
+ {
+ return false;
+ }
+ return true;
+}
+
+void
+Adl::incrementTimedOutInterestCount(string& neighbor)
+{
+ std::list<Adjacent>::iterator it = find(neighbor);
+ if (it == m_adjList.end())
+ {
+ return ;
+ }
+ (*it).setInterestTimedOutNo((*it).getInterestTimedOutNo() + 1);
+}
+
+void
+Adl::setTimedOutInterestCount(string& neighbor, int count)
+{
+ std::list<Adjacent>::iterator it = find(neighbor);
+ if (it != m_adjList.end())
+ {
+ (*it).setInterestTimedOutNo(count);
+ }
+}
+
+int
+Adl::getTimedOutInterestCount(string& neighbor)
+{
+ std::list<Adjacent>::iterator it = find(neighbor);
+ if (it == m_adjList.end())
+ {
+ return -1;
+ }
+ return (*it).getInterestTimedOutNo();
+}
+
+int
+Adl::getStatusOfNeighbor(string& neighbor)
+{
+ std::list<Adjacent>::iterator it = find(neighbor);
+ if (it == m_adjList.end())
+ {
+ return -1;
+ }
+ return (*it).getStatus();
+}
+
+void
+Adl::setStatusOfNeighbor(string& neighbor, int status)
+{
+ std::list<Adjacent>::iterator it = find(neighbor);
+ if (it != m_adjList.end())
+ {
+ (*it).setStatus(status);
+ }
+}
+
+std::list<Adjacent>&
+Adl::getAdjList()
+{
+ return m_adjList;
+}
+
+bool
+Adl::isAdjLsaBuildable(Nlsr& pnlsr)
+{
+ uint32_t nbrCount = 0;
+ for (std::list<Adjacent>::iterator it = m_adjList.begin();
+ it != m_adjList.end() ; it++)
+ {
+ if (((*it).getStatus() == 1))
+ {
+ nbrCount++;
+ }
+ else
+ {
+ if ((*it).getInterestTimedOutNo() >=
+ pnlsr.getConfParameter().getInterestRetryNumber())
+ {
+ nbrCount++;
+ }
+ }
+ }
+ if (nbrCount == m_adjList.size())
+ {
+ return true;
+ }
+ return false;
+}
+
+int
+Adl::getNumOfActiveNeighbor()
+{
+ int actNbrCount = 0;
+ for (std::list<Adjacent>::iterator it = m_adjList.begin();
+ it != m_adjList.end(); it++)
+ {
+ if (((*it).getStatus() == 1))
+ {
+ actNbrCount++;
+ }
+ }
+ return actNbrCount;
+}
+
+std::list<Adjacent>::iterator
+Adl::find(std::string adjName)
+{
+ Adjacent adj(adjName);
+ std::list<Adjacent>::iterator it = std::find_if(m_adjList.begin(),
+ m_adjList.end(),
+ bind(&adjacent_compare, _1, adj));
+ return it;
+}
+
+// used for debugging purpose
+void
+Adl::printAdl()
+{
+ for (std::list<Adjacent>::iterator it = m_adjList.begin();
+ it != m_adjList.end(); it++)
+ {
+ cout << (*it) << endl;
+ }
+}
+
+} //namespace nlsr
diff --git a/src/adl.hpp b/src/adl.hpp
new file mode 100644
index 0000000..8a7da9f
--- /dev/null
+++ b/src/adl.hpp
@@ -0,0 +1,90 @@
+#ifndef NLSR_ADL_HPP
+#define NLSR_ADL_HPP
+
+#include <ndn-cpp-dev/face.hpp>
+#include "adjacent.hpp"
+#include <list>
+
+namespace nlsr {
+class Nlsr;
+
+class Adl
+{
+
+public:
+ Adl();
+ ~Adl();
+
+ int
+ insert(Adjacent& adj);
+
+ int
+ updateAdjacentStatus(std::string adjName, int s);
+
+ int
+ updateAdjacentLinkCost(std::string adjName, double lc);
+
+ std::list<Adjacent>&
+ getAdjList();
+
+ bool
+ isNeighbor(std::string adjName);
+
+ void
+ incrementTimedOutInterestCount(std::string& neighbor);
+
+ int
+ getTimedOutInterestCount(std::string& neighbor);
+
+ int
+ getStatusOfNeighbor(std::string& neighbor);
+
+ void
+ setStatusOfNeighbor(std::string& neighbor, int status);
+
+ void
+ setTimedOutInterestCount(std::string& neighbor, int count);
+
+ void
+ addAdjacentsFromAdl(Adl& adl);
+
+ bool
+ isAdjLsaBuildable(Nlsr& pnlsr);
+
+ int
+ getNumOfActiveNeighbor();
+
+ Adjacent
+ getAdjacent(std::string adjName);
+
+ bool
+ isEqual(Adl& adl);
+
+ int
+ getSize()
+ {
+ return m_adjList.size();
+ }
+
+ void
+ reset()
+ {
+ if (m_adjList.size() > 0)
+ {
+ m_adjList.clear();
+ }
+ }
+
+ void
+ printAdl();
+
+private:
+ std::list<Adjacent>::iterator
+ find(std::string adjName);
+
+private:
+ std::list<Adjacent> m_adjList;
+};
+
+} //namespace nlsr
+#endif //NLSR_ADL_HPP
diff --git a/src/communication/data-manager.cpp b/src/communication/data-manager.cpp
new file mode 100644
index 0000000..e4cefe5
--- /dev/null
+++ b/src/communication/data-manager.cpp
@@ -0,0 +1,215 @@
+#include <iostream>
+#include <cstdlib>
+
+#include <ndn-cpp-dev/security/signature-sha256-with-rsa.hpp>
+#include <ndn-cpp-dev/security/identity-certificate.hpp>
+#include <ndn-cpp-dev/util/io.hpp>
+
+#include "nlsr.hpp"
+#include "data-manager.hpp"
+#include "utility/tokenizer.hpp"
+#include "lsdb.hpp"
+#include "security/key-manager.hpp"
+
+namespace nlsr {
+
+using namespace std;
+using namespace ndn;
+
+void
+DataManager::processContent(Nlsr& pnlsr, const ndn::Interest& interest,
+ const ndn::Data& data, InterestManager& im)
+{
+ std::cout << "I: " << interest.toUri() << std::endl;
+ string dataName(data.getName().toUri());
+ Tokenizer nt(dataName, "/");
+ std::string chkString("keys");
+ if (nt.doesTokenExist(chkString))
+ {
+ processContentKeys(pnlsr, data);
+ }
+ else
+ {
+ if (pnlsr.getKeyManager().verify(data))
+ {
+ std::cout << "Verified Data Content" << std::endl;
+ chkString = "info";
+ if (nt.doesTokenExist(chkString))
+ {
+ string dataContent((char*)data.getContent().value());
+ processContentInfo(pnlsr, dataName, dataContent);
+ }
+ chkString = "LSA";
+ if (nt.doesTokenExist(chkString))
+ {
+ string dataContent((char*)data.getContent().value());
+ processContentLsa(pnlsr, dataName, dataContent);
+ }
+ }
+ else
+ {
+ std::cout << "Unverified Data Content. Discarded" << std::endl;
+ }
+ }
+}
+
+void
+DataManager::processContentInfo(Nlsr& pnlsr, string& dataName,
+ string& dataContent)
+{
+ Tokenizer nt(dataName, "/");
+ string chkString("info");
+ string neighbor = nt.getTokenString(0, nt.getTokenPosition(chkString) - 1);
+ int oldStatus = pnlsr.getAdl().getStatusOfNeighbor(neighbor);
+ int infoIntTimedOutCount = pnlsr.getAdl().getTimedOutInterestCount(neighbor);
+ //debugging purpose start
+ std::cout << "Before Updates: " << std::endl;
+ std::cout << "Neighbor : " << neighbor << std::endl;
+ std::cout << "Status: " << oldStatus << std::endl;
+ std::cout << "Info Interest Timed out: " << infoIntTimedOutCount << std::endl;
+ //debugging purpose end
+ pnlsr.getAdl().setStatusOfNeighbor(neighbor, 1);
+ pnlsr.getAdl().setTimedOutInterestCount(neighbor, 0);
+ int newStatus = pnlsr.getAdl().getStatusOfNeighbor(neighbor);
+ infoIntTimedOutCount = pnlsr.getAdl().getTimedOutInterestCount(neighbor);
+ //debugging purpose
+ std::cout << "After Updates: " << std::endl;
+ std::cout << "Neighbor : " << neighbor << std::endl;
+ std::cout << "Status: " << newStatus << std::endl;
+ std::cout << "Info Interest Timed out: " << infoIntTimedOutCount << std::endl;
+ //debugging purpose end
+ if ((oldStatus - newStatus) != 0) // change in Adjacency list
+ {
+ pnlsr.incrementAdjBuildCount();
+ /* Need to schedule event for Adjacency LSA building */
+ if (pnlsr.getIsBuildAdjLsaSheduled() == 0)
+ {
+ pnlsr.setIsBuildAdjLsaSheduled(1);
+ // event here
+ pnlsr.getScheduler().scheduleEvent(ndn::time::seconds(5),
+ ndn::bind(&Lsdb::scheduledAdjLsaBuild, pnlsr.getLsdb(),
+ boost::ref(pnlsr)));
+ }
+ }
+}
+
+void
+DataManager::processContentLsa(Nlsr& pnlsr, string& dataName,
+ string& dataContent)
+{
+ Tokenizer nt(dataName, "/");
+ string chkString("LSA");
+ string origRouter = nt.getTokenString(nt.getTokenPosition(chkString) + 1,
+ nt.getTokenNumber() - 4);
+ string lsTypeString = nt.getToken(nt.getTokenNumber() - 3);
+ string lsSeNoString = nt.getToken(nt.getTokenNumber() - 2);
+ uint32_t interestedLsSeqNo;
+ try
+ {
+ interestedLsSeqNo = boost::lexical_cast<uint32_t>(lsSeNoString);
+ }
+ catch (std::exception& e)
+ {
+ return;
+ }
+ if (lsTypeString == "1") //Name Lsa
+ {
+ processContentNameLsa(pnlsr, origRouter + "/" + lsTypeString,
+ interestedLsSeqNo, dataContent);
+ }
+ else if (lsTypeString == "2") //Adj Lsa
+ {
+ processContentAdjLsa(pnlsr, origRouter + "/" + lsTypeString,
+ interestedLsSeqNo, dataContent);
+ }
+ else if (lsTypeString == "3") //Cor Lsa
+ {
+ processContentCorLsa(pnlsr, origRouter + "/" + lsTypeString,
+ interestedLsSeqNo, dataContent);
+ }
+ else
+ {
+ cout << "Unrecognized LSA Type :(" << endl;
+ }
+}
+
+void
+DataManager::processContentNameLsa(Nlsr& pnlsr, string lsaKey,
+ uint32_t lsSeqNo, string& dataContent)
+{
+ if (pnlsr.getLsdb().isNameLsaNew(lsaKey, lsSeqNo))
+ {
+ NameLsa nameLsa;
+ if (nameLsa.initializeFromContent(dataContent))
+ {
+ pnlsr.getLsdb().installNameLsa(pnlsr, nameLsa);
+ }
+ else
+ {
+ std::cout << "LSA data decoding error :(" << std::endl;
+ }
+ }
+}
+
+void
+DataManager::processContentAdjLsa(Nlsr& pnlsr, string lsaKey,
+ uint32_t lsSeqNo, string& dataContent)
+{
+ if (pnlsr.getLsdb().isAdjLsaNew(lsaKey, lsSeqNo))
+ {
+ AdjLsa adjLsa;
+ if (adjLsa.initializeFromContent(dataContent))
+ {
+ pnlsr.getLsdb().installAdjLsa(pnlsr, adjLsa);
+ }
+ else
+ {
+ std::cout << "LSA data decoding error :(" << std::endl;
+ }
+ }
+}
+
+void
+DataManager::processContentCorLsa(Nlsr& pnlsr, string lsaKey,
+ uint32_t lsSeqNo, string& dataContent)
+{
+ if (pnlsr.getLsdb().isCorLsaNew(lsaKey, lsSeqNo))
+ {
+ CorLsa corLsa;
+ if (corLsa.initializeFromContent(dataContent))
+ {
+ pnlsr.getLsdb().installCorLsa(pnlsr, corLsa);
+ }
+ else
+ {
+ std::cout << "LSA data decoding error :(" << std::endl;
+ }
+ }
+}
+
+void
+DataManager::processContentKeys(Nlsr& pnlsr, const ndn::Data& data)
+{
+ std::cout << " processContentKeys called " << std::endl;
+ ndn::shared_ptr<ndn::IdentityCertificate> cert =
+ ndn::make_shared<ndn::IdentityCertificate>();
+ cert->wireDecode(data.getContent().blockFromValue());
+ std::cout << *(cert) << std::endl;
+ std::string dataName = data.getName().toUri();
+ Tokenizer nt(dataName, "/");
+ std::string certName = nt.getTokenString(0, nt.getTokenNumber() - 3);
+ uint32_t seqNum = boost::lexical_cast<uint32_t>(nt.getToken(
+ nt.getTokenNumber() - 2));
+ std::cout << "Cert Name: " << certName << " Seq Num: " << seqNum << std::endl;
+ if (pnlsr.getKeyManager().verify(pnlsr, *(cert)))
+ {
+ pnlsr.getKeyManager().addCertificate(cert, seqNum, true);
+ }
+ else
+ {
+ pnlsr.getKeyManager().addCertificate(cert, seqNum, false);
+ }
+
+ pnlsr.getKeyManager().printCertStore();
+}
+}//namespace nlsr
diff --git a/src/communication/data-manager.hpp b/src/communication/data-manager.hpp
new file mode 100644
index 0000000..153e0a0
--- /dev/null
+++ b/src/communication/data-manager.hpp
@@ -0,0 +1,48 @@
+#ifndef NLSR_DM_HPP
+#define NLSR_DM_HPP
+
+#include <ndn-cpp-dev/face.hpp>
+#include <ndn-cpp-dev/security/key-chain.hpp>
+#include <ndn-cpp-dev/util/scheduler.hpp>
+
+#include "interest-manager.hpp"
+
+namespace nlsr {
+class Nlsr;
+
+class DataManager
+{
+public:
+ void
+ processContent(Nlsr& pnlsr, const ndn::Interest& interest,
+ const ndn::Data& data, InterestManager& im);
+private:
+ void
+ processContentInfo(Nlsr& pnlsr, std::string& dataName,
+ std::string& dataContent);
+
+ void
+ processContentLsa(Nlsr& pnlsr, std::string& dataName,
+ std::string& dataContent);
+
+ void
+ processContentNameLsa(Nlsr& pnlsr, std::string lsaKey,
+ uint32_t lsSeqNo, std::string& dataContent);
+
+ void
+ processContentAdjLsa(Nlsr& pnlsr, std::string lsaKey,
+ uint32_t lsSeqNo, std::string& dataContent);
+
+ void
+ processContentCorLsa(Nlsr& pnlsr, std::string lsaKey,
+ uint32_t lsSeqNo, std::string& dataContent);
+
+ void
+ processContentKeys(Nlsr& pnlsr, const ndn::Data& data);
+
+
+};
+
+}//namespace nlsr
+
+#endif //NLSR_DM_HPP
diff --git a/src/communication/interest-manager.cpp b/src/communication/interest-manager.cpp
new file mode 100644
index 0000000..73a43e9
--- /dev/null
+++ b/src/communication/interest-manager.cpp
@@ -0,0 +1,339 @@
+#include <iostream>
+#include <cstdlib>
+
+
+#include <ndn-cpp-dev/security/identity-certificate.hpp>
+#include <ndn-cpp-dev/util/io.hpp>
+
+#include "nlsr.hpp"
+#include "interest-manager.hpp"
+#include "data-manager.hpp"
+#include "utility/tokenizer.hpp"
+#include "lsdb.hpp"
+
+namespace nlsr {
+
+using namespace std;
+using namespace ndn;
+
+void
+InterestManager::processInterest(Nlsr& pnlsr,
+ const ndn::Name& name,
+ const ndn::Interest& interest)
+{
+ cout << "<< I: " << interest << endl;
+ string intName = interest.getName().toUri();
+ cout << "Interest Received for Name: " << intName << endl;
+ Tokenizer nt(intName, "/");
+ string chkString("info");
+ if (nt.doesTokenExist(chkString))
+ {
+ string nbr = nt.getTokenString(nt.getTokenPosition(chkString) + 1);
+ cout << "Neighbor: " << nbr << endl;
+ processInterestInfo(pnlsr, nbr, interest);
+ }
+ chkString = "LSA";
+ if (nt.doesTokenExist(chkString))
+ {
+ processInterestLsa(pnlsr, interest);
+ }
+ chkString = "keys";
+ if (nt.doesTokenExist(chkString))
+ {
+ processInterestKeys(pnlsr, interest);
+ }
+}
+
+void
+InterestManager::processInterestInfo(Nlsr& pnlsr, string& neighbor,
+ const ndn::Interest& interest)
+{
+ if (pnlsr.getAdl().isNeighbor(neighbor))
+ {
+ Data data(ndn::Name(interest.getName()).appendVersion());
+ data.setFreshnessPeriod(time::seconds(10)); // 10 sec
+ data.setContent((const uint8_t*)"info", sizeof("info"));
+ pnlsr.getKeyManager().signData(data);
+ cout << ">> D: " << data << endl;
+ pnlsr.getNlsrFace()->put(data);
+ int status = pnlsr.getAdl().getStatusOfNeighbor(neighbor);
+ if (status == 0)
+ {
+ string intName = neighbor + "/" + "info" +
+ pnlsr.getConfParameter().getRouterPrefix();
+ expressInterest(pnlsr, intName, 2,
+ pnlsr.getConfParameter().getInterestResendTime());
+ }
+ }
+}
+
+void
+InterestManager::processInterestLsa(Nlsr& pnlsr, const ndn::Interest& interest)
+{
+ string intName = interest.getName().toUri();
+ Tokenizer nt(intName, "/");
+ string chkString("LSA");
+ string origRouter = nt.getTokenString(nt.getTokenPosition(chkString) + 1,
+ nt.getTokenNumber() - 3);
+ string lsTypeString = nt.getToken(nt.getTokenNumber() - 2);
+ string lsSeqString = nt.getToken(nt.getTokenNumber() - 1);
+ std::cout << "Router Name: " << origRouter << std::endl;
+ std::cout << "Ls Type : " << lsTypeString << std::endl;
+ std::cout << "Ls Seq : " << lsSeqString << endl;
+ uint8_t interestedLsType;
+ uint32_t interestedLsSeqNo;
+ try
+ {
+ interestedLsType = boost::lexical_cast<uint8_t>(lsTypeString);
+ interestedLsSeqNo = boost::lexical_cast<uint32_t>(lsSeqString);
+ }
+ catch (std::exception& e)
+ {
+ return;
+ }
+ std::cout << "Ls Type: " << interestedLsType << std::endl;
+ if (lsTypeString == "1") //Name Lsa
+ {
+ processInterestForNameLsa(pnlsr, interest,
+ origRouter + "/" + lsTypeString, interestedLsSeqNo);
+ }
+ else if (lsTypeString == "2") //Adj Lsa
+ {
+ processInterestForAdjLsa(pnlsr, interest,
+ origRouter + "/" + lsTypeString, interestedLsSeqNo);
+ }
+ else if (lsTypeString == "3") //Cor Lsa
+ {
+ processInterestForCorLsa(pnlsr, interest,
+ origRouter + "/" + lsTypeString, interestedLsSeqNo);
+ }
+ else
+ {
+ cout << "Unrecognized LSA Type :(" << endl;
+ }
+}
+
+void
+InterestManager::processInterestForNameLsa(Nlsr& pnlsr,
+ const ndn::Interest& interest,
+ string lsaKey, uint32_t interestedlsSeqNo)
+{
+ std::pair<NameLsa&, bool> nameLsa = pnlsr.getLsdb().getNameLsa(lsaKey);
+ if (nameLsa.second)
+ {
+ if (nameLsa.first.getLsSeqNo() >= interestedlsSeqNo)
+ {
+ Data data(ndn::Name(interest.getName()).appendVersion());
+ data.setFreshnessPeriod(time::seconds(10)); // 10 sec
+ string content = nameLsa.first.getData();
+ data.setContent((const uint8_t*)content.c_str(), content.size());
+ pnlsr.getKeyManager().signData(data);
+ std::cout << ">> D: " << data << std::endl;
+ pnlsr.getNlsrFace()->put(data);
+ }
+ }
+}
+
+void
+InterestManager::processInterestForAdjLsa(Nlsr& pnlsr,
+ const ndn::Interest& interest,
+ string lsaKey, uint32_t interestedlsSeqNo)
+{
+ std::pair<AdjLsa&, bool> adjLsa = pnlsr.getLsdb().getAdjLsa(lsaKey);
+ if (adjLsa.second)
+ {
+ if (adjLsa.first.getLsSeqNo() >= interestedlsSeqNo)
+ {
+ Data data(ndn::Name(interest.getName()).appendVersion());
+ data.setFreshnessPeriod(time::seconds(10)); // 10 sec
+ string content = adjLsa.first.getData();
+ data.setContent((const uint8_t*)content.c_str(), content.size());
+ pnlsr.getKeyManager().signData(data);
+ std::cout << ">> D: " << data << std::endl;
+ pnlsr.getNlsrFace()->put(data);
+ }
+ }
+}
+
+void
+InterestManager::processInterestForCorLsa(Nlsr& pnlsr,
+ const ndn::Interest& interest,
+ string lsaKey, uint32_t interestedlsSeqNo)
+{
+ std::pair<CorLsa&, bool> corLsa = pnlsr.getLsdb().getCorLsa(lsaKey);
+ if (corLsa.second)
+ {
+ if (corLsa.first.getLsSeqNo() >= interestedlsSeqNo)
+ {
+ Data data(ndn::Name(interest.getName()).appendVersion());
+ data.setFreshnessPeriod(time::seconds(10)); // 10 sec
+ string content = corLsa.first.getData();
+ data.setContent((const uint8_t*)content.c_str(), content.size());
+ pnlsr.getKeyManager().signData(data);
+ std::cout << ">> D: " << data << std::endl;
+ pnlsr.getNlsrFace()->put(data);
+ }
+ }
+}
+
+void
+InterestManager::processInterestKeys(Nlsr& pnlsr, const ndn::Interest& interest)
+{
+ std::cout << "processInterestKeys called " << std::endl;
+ string intName = interest.getName().toUri();
+ std::cout << "Interest Name for Key: " << intName << std::endl;
+ Tokenizer nt(intName, "/");
+ std::string chkString("ID-CERT");
+ std::string certName;
+ uint32_t seqNum;
+ ndn::Name dataName;
+ std::pair<ndn::shared_ptr<ndn::IdentityCertificate>, bool> chkCert;
+ if (nt.getTokenPosition(chkString) == nt.getTokenNumber() - 1)
+ {
+ certName = nt.getTokenString(0, nt.getTokenNumber() - 1);
+ cout << "Cert Name: " << certName << std::endl;
+ chkCert = pnlsr.getKeyManager().getCertificateFromStore(certName);
+ }
+ else
+ {
+ certName = nt.getTokenString(0, nt.getTokenNumber() - 2);
+ seqNum = boost::lexical_cast<uint32_t>(nt.getToken(nt.getTokenNumber() - 1));
+ std::cout << "Cert Name: " << certName << " Seq Num: " << seqNum << std::endl;
+ chkCert = pnlsr.getKeyManager().getCertificateFromStore(certName, seqNum);
+ }
+ if (chkCert.second)
+ {
+ if (nt.getTokenPosition(chkString) == nt.getTokenNumber() - 1)
+ {
+ std::string dn;
+ dataName = ndn::Name(interest.getName()).appendVersion();
+ std::pair<uint32_t, bool> seqChk =
+ pnlsr.getKeyManager().getCertificateSeqNum(certName);
+ if (seqChk.second)
+ {
+ dn = dataName.toUri() + "/" + boost::lexical_cast<std::string>(seqChk.first);
+ dataName = ndn::Name(dn);
+ }
+ else
+ {
+ dn = dataName.toUri() + "/" + boost::lexical_cast<std::string>(10);
+ dataName = ndn::Name(dn);
+ }
+
+ }
+ else
+ {
+ dataName = ndn::Name(interest.getName());
+ }
+ Data data(dataName.appendVersion());
+ data.setFreshnessPeriod(time::seconds(10)); //10 sec
+ data.setContent(chkCert.first->wireEncode());
+ pnlsr.getKeyManager().signData(data);
+ pnlsr.getNlsrFace()->put(data);
+ }
+}
+
+
+void
+InterestManager::processInterestTimedOut(Nlsr& pnlsr,
+ const ndn::Interest& interest)
+{
+ std::cout << "Timed out interest : " << interest.getName().toUri() << std::endl;
+ string intName = interest.getName().toUri();
+ Tokenizer nt(intName, "/");
+ string chkString("info");
+ if (nt.doesTokenExist(chkString))
+ {
+ string nbr = nt.getTokenString(0, nt.getTokenPosition(chkString) - 1);
+ processInterestTimedOutInfo(pnlsr , nbr , interest);
+ }
+ chkString = "LSA";
+ if (nt.doesTokenExist(chkString))
+ {
+ processInterestTimedOutLsa(pnlsr, interest);
+ }
+}
+
+void
+InterestManager::processInterestTimedOutInfo(Nlsr& pnlsr, string& neighbor,
+ const ndn::Interest& interest)
+{
+ pnlsr.getAdl().incrementTimedOutInterestCount(neighbor);
+ int status = pnlsr.getAdl().getStatusOfNeighbor(neighbor);
+ int infoIntTimedOutCount = pnlsr.getAdl().getTimedOutInterestCount(neighbor);
+ std::cout << "Neighbor: " << neighbor << std::endl;
+ std::cout << "Status: " << status << std::endl;
+ std::cout << "Info Interest Timed out: " << infoIntTimedOutCount << std::endl;
+ if ((infoIntTimedOutCount < pnlsr.getConfParameter().getInterestRetryNumber()))
+ {
+ string intName = neighbor + "/" + "info" +
+ pnlsr.getConfParameter().getRouterPrefix();
+ expressInterest(pnlsr, intName, 2,
+ pnlsr.getConfParameter().getInterestResendTime());
+ }
+ else if ((status == 1) &&
+ (infoIntTimedOutCount == pnlsr.getConfParameter().getInterestRetryNumber()))
+ {
+ pnlsr.getAdl().setStatusOfNeighbor(neighbor, 0);
+ pnlsr.incrementAdjBuildCount();
+ if (pnlsr.getIsBuildAdjLsaSheduled() == 0)
+ {
+ pnlsr.setIsBuildAdjLsaSheduled(1);
+ // event here
+ pnlsr.getScheduler().scheduleEvent(ndn::time::seconds(5),
+ ndn::bind(&Lsdb::scheduledAdjLsaBuild,
+ &pnlsr.getLsdb(),
+ boost::ref(pnlsr)));
+ }
+ }
+}
+
+void
+InterestManager::processInterestTimedOutLsa(Nlsr& pnlsr,
+ const ndn::Interest& interest)
+{
+}
+
+void
+InterestManager::expressInterest(Nlsr& pnlsr, const string& interestNamePrefix,
+ int scope, int seconds)
+{
+ std::cout << "Expressing Interest :" << interestNamePrefix << std::endl;
+ ndn::Interest i((ndn::Name(interestNamePrefix)));
+ i.setInterestLifetime(time::seconds(seconds));
+ i.setMustBeFresh(true);
+ pnlsr.getNlsrFace()->expressInterest(i,
+ ndn::func_lib::bind(&DataManager::processContent,
+ &pnlsr.getDm(),
+ boost::ref(pnlsr), _1,
+ _2, boost::ref(*this)),
+ ndn::func_lib::bind(&InterestManager::processInterestTimedOut,
+ this, boost::ref(pnlsr), _1));
+}
+
+
+void
+InterestManager::sendScheduledInfoInterest(Nlsr& pnlsr, int seconds)
+{
+ std::list<Adjacent> adjList = pnlsr.getAdl().getAdjList();
+ for (std::list<Adjacent>::iterator it = adjList.begin(); it != adjList.end();
+ ++it)
+ {
+ string adjName = (*it).getName() + "/" + "info" +
+ pnlsr.getConfParameter().getRouterPrefix();
+ expressInterest(pnlsr, adjName, 2,
+ pnlsr.getConfParameter().getInterestResendTime());
+ }
+ scheduleInfoInterest(pnlsr, pnlsr.getConfParameter().getInfoInterestInterval());
+}
+
+void
+InterestManager::scheduleInfoInterest(Nlsr& pnlsr, int seconds)
+{
+ EventId eid = pnlsr.getScheduler().scheduleEvent(ndn::time::seconds(seconds),
+ ndn::bind(&InterestManager::sendScheduledInfoInterest, this,
+ boost::ref(pnlsr), seconds));
+}
+
+
+} //namespace nlsr
diff --git a/src/communication/interest-manager.hpp b/src/communication/interest-manager.hpp
new file mode 100644
index 0000000..5975e7f
--- /dev/null
+++ b/src/communication/interest-manager.hpp
@@ -0,0 +1,71 @@
+#ifndef NLSR_IM_HPP
+#define NLSR_IM_HPP
+
+#include <ndn-cpp-dev/face.hpp>
+#include <ndn-cpp-dev/security/key-chain.hpp>
+#include <ndn-cpp-dev/util/scheduler.hpp>
+
+namespace nlsr {
+
+class Nlsr;
+
+class InterestManager
+{
+public:
+ InterestManager()
+ {
+ }
+ void
+ processInterest(Nlsr& pnlsr, const ndn::Name& name,
+ const ndn::Interest& interest);
+
+ void
+ processInterestInfo(Nlsr& pnlsr, std::string& neighbor,
+ const ndn::Interest& interest);
+
+ void
+ processInterestLsa(Nlsr& pnlsr, const ndn::Interest& interest);
+
+ void
+ processInterestForNameLsa(Nlsr& pnlsr, const ndn::Interest& interest,
+ std::string lsaKey, uint32_t interestedlsSeqNo);
+
+ void
+ processInterestForAdjLsa(Nlsr& pnlsr, const ndn::Interest& interest,
+ std::string lsaKey, uint32_t interestedlsSeqNo);
+
+ void
+ processInterestForCorLsa(Nlsr& pnlsr, const ndn::Interest& interest,
+ std::string lsaKey, uint32_t interestedlsSeqNo);
+
+ void
+ processInterestKeys(Nlsr& pnlsr, const ndn::Interest& interest);
+
+ void
+ processInterestTimedOut(Nlsr& pnlsr, const ndn::Interest& interest);
+
+ void
+ processInterestTimedOutInfo(Nlsr& pnlsr, std::string& neighbor,
+ const ndn::Interest& interest);
+
+ void
+ processInterestTimedOutLsa(Nlsr& pnlsr, const ndn::Interest& interest);
+
+ void
+ expressInterest(Nlsr& pnlsr,
+ const std::string& interestNamePrefix, int scope, int seconds);
+
+ void
+ sendScheduledInfoInterest(Nlsr& pnlsr, int seconds);
+
+ void
+ scheduleInfoInterest(Nlsr& pnlsr, int seconds);
+
+private:
+
+
+};
+
+}//namespace nlsr
+
+#endif //NLSR_IM_HPP
diff --git a/src/communication/nlsr_dm.cpp b/src/communication/nlsr_dm.cpp
deleted file mode 100644
index 249b5e7..0000000
--- a/src/communication/nlsr_dm.cpp
+++ /dev/null
@@ -1,219 +0,0 @@
-#include<iostream>
-#include<cstdlib>
-
-#include <ndn-cpp-dev/security/signature-sha256-with-rsa.hpp>
-#include <ndn-cpp-dev/security/identity-certificate.hpp>
-#include <ndn-cpp-dev/util/io.hpp>
-
-#include "nlsr.hpp"
-#include "nlsr_dm.hpp"
-#include "utility/nlsr_tokenizer.hpp"
-#include "nlsr_lsdb.hpp"
-#include "security/nlsr_km.hpp"
-#include "utility/nlsr_logger.hpp"
-
-#define THIS_FILE "nlsr_dm.cpp"
-
-namespace nlsr
-{
-
- using namespace std;
- using namespace ndn;
-
- void
- DataManager::processContent(Nlsr& pnlsr, const ndn::Interest &interest,
- const ndn::Data & data, InterestManager& im)
- {
- cout << "I: " << interest.toUri() << endl;
- string dataName(data.getName().toUri());
- nlsrTokenizer nt(dataName,"/");
- std::string chkString("keys");
- if( nt.doesTokenExist(chkString) )
- {
- processContentKeys(pnlsr, data);
- }
- else
- {
- if ( pnlsr.getKeyManager().verify(data))
- {
- std::cout<<"Verified Data Content"<<std::endl;
- chkString="info";
- if( nt.doesTokenExist(chkString) )
- {
- string dataContent((char *)data.getContent().value());
- processContentInfo(pnlsr,dataName,dataContent);
- }
- chkString="LSA";
- if( nt.doesTokenExist(chkString) )
- {
- string dataContent((char *)data.getContent().value());
- processContentLsa(pnlsr, dataName, dataContent);
- }
- }
- else
- {
- std::cout<<"Unverified Data Content. Discarded"<<std::endl;
- }
- }
- }
-
- void
- DataManager::processContentInfo(Nlsr& pnlsr, string& dataName,
- string& dataContent)
- {
- nlsrTokenizer nt(dataName,"/");
- string chkString("info");
- string neighbor=nt.getTokenString(0,nt.getTokenPosition(chkString)-1);
- int oldStatus=pnlsr.getAdl().getStatusOfNeighbor(neighbor);
- int infoIntTimedOutCount=pnlsr.getAdl().getTimedOutInterestCount(neighbor);
- //debugging purpose start
- cout <<"Before Updates: " <<endl;
- cout <<"Neighbor : "<<neighbor<<endl;
- cout<<"Status: "<< oldStatus << endl;
- cout<<"Info Interest Timed out: "<< infoIntTimedOutCount <<endl;
- //debugging purpose end
- pnlsr.getAdl().setStatusOfNeighbor(neighbor,1);
- pnlsr.getAdl().setTimedOutInterestCount(neighbor,0);
- int newStatus=pnlsr.getAdl().getStatusOfNeighbor(neighbor);
- infoIntTimedOutCount=pnlsr.getAdl().getTimedOutInterestCount(neighbor);
- //debugging purpose
- cout <<"After Updates: " <<endl;
- cout <<"Neighbor : "<<neighbor<<endl;
- cout<<"Status: "<< newStatus << endl;
- cout<<"Info Interest Timed out: "<< infoIntTimedOutCount <<endl;
- //debugging purpose end
- if ( ( oldStatus-newStatus)!= 0 ) // change in Adjacency list
- {
- pnlsr.incrementAdjBuildCount();
- /* Need to schedule event for Adjacency LSA building */
- if ( pnlsr.getIsBuildAdjLsaSheduled() == 0 )
- {
- pnlsr.setIsBuildAdjLsaSheduled(1);
- // event here
- pnlsr.getScheduler().scheduleEvent(ndn::time::seconds(5),
- ndn::bind(&Lsdb::scheduledAdjLsaBuild, pnlsr.getLsdb(),
- boost::ref(pnlsr)));
- }
- }
- }
-
- void
- DataManager::processContentLsa(Nlsr& pnlsr, string& dataName,
- string& dataContent)
- {
- nlsrTokenizer nt(dataName,"/");
- string chkString("LSA");
- string origRouter=nt.getTokenString(nt.getTokenPosition(chkString)+1,
- nt.getTokenNumber()-4);
- string lsTypeString=nt.getToken(nt.getTokenNumber()-3);
- string lsSeNoString=nt.getToken(nt.getTokenNumber()-2);
- uint32_t interestedLsSeqNo;
- try
- {
- interestedLsSeqNo=boost::lexical_cast<uint32_t>(lsSeNoString);
- }
- catch(std::exception &e)
- {
- return;
- }
- if( lsTypeString == "1" ) //Name Lsa
- {
- processContentNameLsa(pnlsr, origRouter+"/"+lsTypeString,
- interestedLsSeqNo, dataContent);
- }
- else if( lsTypeString == "2" ) //Adj Lsa
- {
- processContentAdjLsa(pnlsr, origRouter+"/"+lsTypeString,
- interestedLsSeqNo, dataContent);
- }
- else if( lsTypeString == "3" ) //Cor Lsa
- {
- processContentCorLsa(pnlsr, origRouter+"/"+lsTypeString,
- interestedLsSeqNo, dataContent);
- }
- else
- {
- cout<<"Unrecognized LSA Type :("<<endl;
- }
- }
-
- void
- DataManager::processContentNameLsa(Nlsr& pnlsr, string lsaKey,
- uint32_t lsSeqNo, string& dataContent)
- {
- if ( pnlsr.getLsdb().isNameLsaNew(lsaKey,lsSeqNo))
- {
- NameLsa nameLsa;
- if( nameLsa.initializeFromContent(dataContent) )
- {
- pnlsr.getLsdb().installNameLsa(pnlsr, nameLsa);
- }
- else
- {
- cout<<"LSA data decoding error :("<<endl;
- }
- }
- }
-
- void
- DataManager::processContentAdjLsa(Nlsr& pnlsr, string lsaKey,
- uint32_t lsSeqNo, string& dataContent)
- {
- if ( pnlsr.getLsdb().isAdjLsaNew(lsaKey,lsSeqNo))
- {
- AdjLsa adjLsa;
- if( adjLsa.initializeFromContent(dataContent) )
- {
- pnlsr.getLsdb().installAdjLsa(pnlsr, adjLsa);
- }
- else
- {
- cout<<"LSA data decoding error :("<<endl;
- }
- }
- }
-
- void
- DataManager::processContentCorLsa(Nlsr& pnlsr, string lsaKey,
- uint32_t lsSeqNo, string& dataContent)
- {
- if ( pnlsr.getLsdb().isCorLsaNew(lsaKey,lsSeqNo))
- {
- CorLsa corLsa;
- if( corLsa.initializeFromContent(dataContent) )
- {
- pnlsr.getLsdb().installCorLsa(pnlsr, corLsa);
- }
- else
- {
- cout<<"LSA data decoding error :("<<endl;
- }
- }
- }
-
- void
- DataManager::processContentKeys(Nlsr& pnlsr, const ndn::Data& data)
- {
- std::cout<<" processContentKeys called "<<endl;
- ndn::shared_ptr<ndn::IdentityCertificate> cert=
- ndn::make_shared<ndn::IdentityCertificate>();
- cert->wireDecode(data.getContent().blockFromValue());
- std::cout<<*(cert)<<endl;
- std::string dataName=data.getName().toUri();
- nlsrTokenizer nt(dataName,"/");
- std::string certName=nt.getTokenString(0,nt.getTokenNumber()-3);
- uint32_t seqNum=boost::lexical_cast<uint32_t>(nt.getToken(
- nt.getTokenNumber()-2));
- cout<<"Cert Name: "<<certName<<" Seq Num: "<<seqNum<<std::endl;
- if ( pnlsr.getKeyManager().verify(pnlsr, *(cert)))
- {
- pnlsr.getKeyManager().addCertificate(cert, seqNum, true);
- }
- else
- {
- pnlsr.getKeyManager().addCertificate(cert, seqNum, false);
- }
-
- pnlsr.getKeyManager().printCertStore();
- }
-}//namespace nlsr
diff --git a/src/communication/nlsr_dm.hpp b/src/communication/nlsr_dm.hpp
deleted file mode 100644
index fc231d3..0000000
--- a/src/communication/nlsr_dm.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-#ifndef NLSR_DM_HPP
-#define NLSR_DM_HPP
-
-#include <ndn-cpp-dev/face.hpp>
-#include <ndn-cpp-dev/security/key-chain.hpp>
-#include <ndn-cpp-dev/util/scheduler.hpp>
-
-#include "nlsr_im.hpp"
-
-namespace nlsr
-{
-
- using namespace ndn;
- using namespace std;
-
- class Nlsr;
-
- class DataManager
- {
- public:
- void processContent(Nlsr& pnlsr, const ndn::Interest& interest,
- const ndn::Data& data, InterestManager& im);
- private:
- void processContentInfo(Nlsr& pnlsr, string& dataName,
- string& dataContent);
- void processContentLsa(Nlsr& pnlsr, string& dataName,
- string& dataContent);
- void processContentNameLsa(Nlsr& pnlsr, string lsaKey,
- uint32_t lsSeqNo, string& dataContent);
- void processContentAdjLsa(Nlsr& pnlsr, string lsaKey,
- uint32_t lsSeqNo, string& dataContent);
- void processContentCorLsa(Nlsr& pnlsr, string lsaKey,
- uint32_t lsSeqNo, string& dataContent);
- void processContentKeys(Nlsr& pnlsr, const ndn::Data& data);
-
-
- };
-
-}//namespace nlsr
-#endif
diff --git a/src/communication/nlsr_im.cpp b/src/communication/nlsr_im.cpp
deleted file mode 100644
index d708812..0000000
--- a/src/communication/nlsr_im.cpp
+++ /dev/null
@@ -1,340 +0,0 @@
-#include<iostream>
-#include<cstdlib>
-
-
-#include <ndn-cpp-dev/security/identity-certificate.hpp>
-#include <ndn-cpp-dev/util/io.hpp>
-
-#include "nlsr.hpp"
-#include "nlsr_im.hpp"
-#include "nlsr_dm.hpp"
-#include "utility/nlsr_tokenizer.hpp"
-#include "nlsr_lsdb.hpp"
-#include "utility/nlsr_logger.hpp"
-
-#define THIS_FILE "nlsr_im.cpp"
-
-namespace nlsr
-{
-
- using namespace std;
- using namespace ndn;
-
- void
- InterestManager::processInterest( Nlsr& pnlsr,
- const ndn::Name& name,
- const ndn::Interest& interest)
- {
- cout << "<< I: " << interest << endl;
- string intName=interest.getName().toUri();
- cout << "Interest Received for Name: "<< intName <<endl;
- nlsrTokenizer nt(intName,"/");
- string chkString("info");
- if( nt.doesTokenExist(chkString) )
- {
- string nbr=nt.getTokenString(nt.getTokenPosition(chkString)+1);
- cout <<"Neighbor: " << nbr <<endl;
- processInterestInfo(pnlsr,nbr,interest);
- }
- chkString="LSA";
- if( nt.doesTokenExist(chkString) )
- {
- processInterestLsa(pnlsr,interest);
- }
- chkString="keys";
- if( nt.doesTokenExist(chkString) )
- {
- processInterestKeys(pnlsr,interest);
- }
- }
-
- void
- InterestManager::processInterestInfo(Nlsr& pnlsr, string& neighbor,
- const ndn::Interest& interest)
- {
- if ( pnlsr.getAdl().isNeighbor(neighbor) )
- {
- Data data(ndn::Name(interest.getName()).appendVersion());
- data.setFreshnessPeriod(time::seconds(10)); // 10 sec
- data.setContent((const uint8_t*)"info", sizeof("info"));
- pnlsr.getKeyManager().signData(data);
- cout << ">> D: " << data << endl;
- pnlsr.getNlsrFace()->put(data);
- int status=pnlsr.getAdl().getStatusOfNeighbor(neighbor);
- if ( status == 0 )
- {
- string intName=neighbor +"/"+"info"+
- pnlsr.getConfParameter().getRouterPrefix();
- expressInterest( pnlsr,intName,2,
- pnlsr.getConfParameter().getInterestResendTime());
- }
- }
- }
-
- void
- InterestManager::processInterestLsa(Nlsr& pnlsr,const ndn::Interest& interest)
- {
- string intName=interest.getName().toUri();
- nlsrTokenizer nt(intName,"/");
- string chkString("LSA");
- string origRouter=nt.getTokenString(nt.getTokenPosition(chkString)+1,
- nt.getTokenNumber()-3);
- string lsTypeString=nt.getToken(nt.getTokenNumber()-2);
- string lsSeqString=nt.getToken(nt.getTokenNumber()-1);
- cout<<"Router Name: "<<origRouter<<endl;
- cout<<"Ls Type : "<<lsTypeString<<endl;
- cout<<"Ls Seq : "<<lsSeqString<<endl;
- uint8_t interestedLsType;
- uint32_t interestedLsSeqNo;
- try
- {
- interestedLsType=boost::lexical_cast<uint8_t>(lsTypeString);
- interestedLsSeqNo=boost::lexical_cast<uint32_t>(lsSeqString);
- }
- catch(std::exception &e)
- {
- return;
- }
- cout <<"Ls Type: "<<interestedLsType<<endl;
- if( lsTypeString == "1" ) //Name Lsa
- {
- processInterestForNameLsa(pnlsr, interest,
- origRouter+"/"+lsTypeString, interestedLsSeqNo);
- }
- else if( lsTypeString == "2" ) //Adj Lsa
- {
- processInterestForAdjLsa(pnlsr, interest,
- origRouter+"/"+lsTypeString, interestedLsSeqNo);
- }
- else if( lsTypeString == "3" ) //Cor Lsa
- {
- processInterestForCorLsa(pnlsr, interest,
- origRouter+"/"+lsTypeString, interestedLsSeqNo);
- }
- else
- {
- cout<<"Unrecognized LSA Type :("<<endl;
- }
- }
-
- void
- InterestManager::processInterestForNameLsa(Nlsr& pnlsr,
- const ndn::Interest& interest,
- string lsaKey, uint32_t interestedlsSeqNo)
- {
- std::pair<NameLsa&, bool> nameLsa=pnlsr.getLsdb().getNameLsa(lsaKey);
- if( nameLsa.second )
- {
- if ( nameLsa.first.getLsSeqNo() >= interestedlsSeqNo )
- {
- Data data(ndn::Name(interest.getName()).appendVersion());
- data.setFreshnessPeriod(time::seconds(10)); // 10 sec
- string content=nameLsa.first.getData();
- data.setContent((const uint8_t*)content.c_str(),content.size());
- pnlsr.getKeyManager().signData(data);
- cout << ">> D: " << data << endl;
- pnlsr.getNlsrFace()->put(data);
- }
- }
- }
-
- void
- InterestManager::processInterestForAdjLsa(Nlsr& pnlsr,
- const ndn::Interest& interest,
- string lsaKey, uint32_t interestedlsSeqNo)
- {
- std::pair<AdjLsa&, bool> adjLsa=pnlsr.getLsdb().getAdjLsa(lsaKey);
- if( adjLsa.second )
- {
- if ( adjLsa.first.getLsSeqNo() >= interestedlsSeqNo )
- {
- Data data(ndn::Name(interest.getName()).appendVersion());
- data.setFreshnessPeriod(time::seconds(10)); // 10 sec
- string content=adjLsa.first.getData();
- data.setContent((const uint8_t*)content.c_str(),content.size());
- pnlsr.getKeyManager().signData(data);
- cout << ">> D: " << data << endl;
- pnlsr.getNlsrFace()->put(data);
- }
- }
- }
-
- void
- InterestManager::processInterestForCorLsa(Nlsr& pnlsr,
- const ndn::Interest& interest,
- string lsaKey, uint32_t interestedlsSeqNo)
- {
- std::pair<CorLsa&, bool> corLsa=pnlsr.getLsdb().getCorLsa(lsaKey);
- if( corLsa.second )
- {
- if ( corLsa.first.getLsSeqNo() >= interestedlsSeqNo )
- {
- Data data(ndn::Name(interest.getName()).appendVersion());
- data.setFreshnessPeriod(time::seconds(10)); // 10 sec
- string content=corLsa.first.getData();
- data.setContent((const uint8_t*)content.c_str(),content.size());
- pnlsr.getKeyManager().signData(data);
- cout << ">> D: " << data << endl;
- pnlsr.getNlsrFace()->put(data);
- }
- }
- }
-
- void
- InterestManager::processInterestKeys(Nlsr& pnlsr,const ndn::Interest& interest)
- {
- cout<<"processInterestKeys called "<<endl;
- string intName=interest.getName().toUri();
- cout<<"Interest Name for Key: "<<intName<<std::endl;
- nlsrTokenizer nt(intName,"/");
- std::string chkString("ID-CERT");
- std::string certName;
- uint32_t seqNum;
- ndn::Name dataName;
- std::pair<ndn::shared_ptr<ndn::IdentityCertificate>, bool> chkCert;
- if( nt.getTokenPosition(chkString) == nt.getTokenNumber()-1 )
- {
- certName=nt.getTokenString(0,nt.getTokenNumber()-1);
- cout<<"Cert Name: "<<certName<<std::endl;
- chkCert=pnlsr.getKeyManager().getCertificateFromStore(certName);
- }
- else
- {
- certName=nt.getTokenString(0,nt.getTokenNumber()-2);
- seqNum=boost::lexical_cast<uint32_t>(nt.getToken(nt.getTokenNumber()-1));
- cout<<"Cert Name: "<<certName<<" Seq Num: "<<seqNum<<std::endl;
- chkCert=pnlsr.getKeyManager().getCertificateFromStore(certName,seqNum);
- }
- if( chkCert.second )
- {
- if(nt.getTokenPosition(chkString) == nt.getTokenNumber()-1)
- {
- std::string dn;
- dataName=ndn::Name(interest.getName()).appendVersion();
- std::pair<uint32_t, bool> seqChk =
- pnlsr.getKeyManager().getCertificateSeqNum(certName);
- if( seqChk.second )
- {
- dn=dataName.toUri()+"/"+boost::lexical_cast<std::string>(seqChk.first);
- dataName=ndn::Name(dn);
- }
- else
- {
- dn=dataName.toUri()+"/"+boost::lexical_cast<std::string>(10);
- dataName=ndn::Name(dn);
- }
-
- }
- else
- {
- dataName=ndn::Name(interest.getName());
- }
- Data data(dataName.appendVersion());
- data.setFreshnessPeriod(time::seconds(10)); //10 sec
- data.setContent(chkCert.first->wireEncode());
- pnlsr.getKeyManager().signData(data);
- pnlsr.getNlsrFace()->put(data);
- }
- }
-
-
- void
- InterestManager::processInterestTimedOut(Nlsr& pnlsr,
- const ndn::Interest& interest)
- {
- cout << "Timed out interest : " << interest.getName().toUri() << endl;
- string intName= interest.getName().toUri();
- nlsrTokenizer nt(intName,"/");
- string chkString("info");
- if( nt.doesTokenExist(chkString) )
- {
- string nbr=nt.getTokenString(0,nt.getTokenPosition(chkString)-1);
- processInterestTimedOutInfo( pnlsr , nbr , interest);
- }
- chkString="LSA";
- if( nt.doesTokenExist(chkString) )
- {
- processInterestTimedOutLsa(pnlsr, interest);
- }
- }
-
- void
- InterestManager::processInterestTimedOutInfo(Nlsr& pnlsr, string& neighbor,
- const ndn::Interest& interest)
- {
- pnlsr.getAdl().incrementTimedOutInterestCount(neighbor);
- int status=pnlsr.getAdl().getStatusOfNeighbor(neighbor);
- int infoIntTimedOutCount=pnlsr.getAdl().getTimedOutInterestCount(neighbor);
- cout<<"Neighbor: "<< neighbor << endl;
- cout<<"Status: "<< status << endl;
- cout<<"Info Interest Timed out: "<< infoIntTimedOutCount <<endl;
- if((infoIntTimedOutCount < pnlsr.getConfParameter().getInterestRetryNumber()))
- {
- string intName=neighbor +"/"+"info"+
- pnlsr.getConfParameter().getRouterPrefix();
- expressInterest( pnlsr,intName,2,
- pnlsr.getConfParameter().getInterestResendTime());
- }
- else if ( (status == 1) &&
- (infoIntTimedOutCount == pnlsr.getConfParameter().getInterestRetryNumber()))
- {
- pnlsr.getAdl().setStatusOfNeighbor(neighbor,0);
- pnlsr.incrementAdjBuildCount();
- if ( pnlsr.getIsBuildAdjLsaSheduled() == 0 )
- {
- pnlsr.setIsBuildAdjLsaSheduled(1);
- // event here
- pnlsr.getScheduler().scheduleEvent(ndn::time::seconds(5),
- ndn::bind(&Lsdb::scheduledAdjLsaBuild,&pnlsr.getLsdb(),
- boost::ref(pnlsr)));
- }
- }
- }
-
- void
- InterestManager::processInterestTimedOutLsa(Nlsr& pnlsr,
- const ndn::Interest& interest)
- {
- }
-
- void
- InterestManager::expressInterest(Nlsr& pnlsr,const string& interestNamePrefix,
- int scope, int seconds)
- {
- cout<<"Expressing Interest :"<<interestNamePrefix<<endl;
- ndn::Interest i((ndn::Name(interestNamePrefix)));
- //i.setScope(scope);
- i.setInterestLifetime(time::seconds(seconds));
- i.setMustBeFresh(true);
- pnlsr.getNlsrFace()->expressInterest(i,
- ndn::func_lib::bind(&DataManager::processContent,
- &pnlsr.getDm(), boost::ref(pnlsr),_1, _2,boost::ref(*this)),
- ndn::func_lib::bind(&InterestManager::processInterestTimedOut,
- this,boost::ref(pnlsr),_1));
- }
-
-
- void
- InterestManager::sendScheduledInfoInterest(Nlsr& pnlsr, int seconds)
- {
- std::list<Adjacent> adjList=pnlsr.getAdl().getAdjList();
- for(std::list<Adjacent>::iterator it=adjList.begin(); it!=adjList.end(); ++it)
- {
- string adjName=(*it).getName()+"/"+"info"+
- pnlsr.getConfParameter().getRouterPrefix();
- expressInterest( pnlsr,adjName,2,
- pnlsr.getConfParameter().getInterestResendTime());
- }
- scheduleInfoInterest(pnlsr, pnlsr.getConfParameter().getInfoInterestInterval());
- }
-
- void
- InterestManager::scheduleInfoInterest(Nlsr& pnlsr, int seconds)
- {
- EventId eid=pnlsr.getScheduler().scheduleEvent(ndn::time::seconds(seconds),
- ndn::bind(&InterestManager::sendScheduledInfoInterest, this,
- boost::ref(pnlsr),seconds));
- }
-
-
-} //namespace nlsr
diff --git a/src/communication/nlsr_im.hpp b/src/communication/nlsr_im.hpp
deleted file mode 100644
index 5b74174..0000000
--- a/src/communication/nlsr_im.hpp
+++ /dev/null
@@ -1,52 +0,0 @@
-#ifndef NLSR_IM_HPP
-#define NLSR_IM_HPP
-
-#include <ndn-cpp-dev/face.hpp>
-#include <ndn-cpp-dev/security/key-chain.hpp>
-#include <ndn-cpp-dev/util/scheduler.hpp>
-
-namespace nlsr
-{
-
- using namespace ndn;
- using namespace std;
-
- class Nlsr;
-
- class InterestManager
- {
- public:
- InterestManager()
- {
- }
- void processInterest(Nlsr& pnlsr, const ndn::Name& name,
- const ndn::Interest& interest);
- void processInterestInfo(Nlsr& pnlsr, string& neighbor,
- const ndn::Interest& interest);
- void processInterestLsa(Nlsr& pnlsr,const ndn::Interest& interest);
- void processInterestForNameLsa(Nlsr& pnlsr, const ndn::Interest& interest,
- string lsaKey, uint32_t interestedlsSeqNo);
- void processInterestForAdjLsa(Nlsr& pnlsr, const ndn::Interest& interest,
- string lsaKey, uint32_t interestedlsSeqNo);
- void processInterestForCorLsa(Nlsr& pnlsr, const ndn::Interest& interest,
- string lsaKey, uint32_t interestedlsSeqNo);
-
- void processInterestKeys(Nlsr& pnlsr,const ndn::Interest& interest);
-
- void processInterestTimedOut(Nlsr& pnlsr, const ndn::Interest& interest);
- void processInterestTimedOutInfo(Nlsr& pnlsr, string& neighbor,
- const ndn::Interest& interest);
- void processInterestTimedOutLsa(Nlsr& pnlsr,const ndn::Interest& interest);
- void expressInterest(Nlsr& pnlsr,const string& interestNamePrefix, int scope,
- int seconds);
- void sendScheduledInfoInterest(Nlsr& pnlsr, int seconds);
- void scheduleInfoInterest(Nlsr& pnlsr, int seconds);
-
- private:
-
-
- };
-
-}//namespace nlsr
-
-#endif
diff --git a/src/communication/nlsr_slh.cpp b/src/communication/nlsr_slh.cpp
deleted file mode 100644
index 70295aa..0000000
--- a/src/communication/nlsr_slh.cpp
+++ /dev/null
@@ -1,156 +0,0 @@
-#include "nlsr.hpp"
-#include "nlsr_slh.hpp"
-#include "security/nlsr_km.hpp"
-#include "utility/nlsr_tokenizer.hpp"
-#include "utility/nlsr_logger.hpp"
-
-#define THIS_FILE "nlsr_slh.cpp"
-
-
-namespace nlsr
-{
- void
- SyncLogicHandler::createSyncSocket(Nlsr& pnlsr )
- {
- cout<<"Creating Sync socket ......"<<endl;
- cout<<"Sync prefix: "<<m_syncPrefix.toUri()<<endl;
- m_syncSocket=make_shared<SyncSocket>(m_syncPrefix, m_validator, m_syncFace,
- bind(&SyncLogicHandler::nsyncUpdateCallBack,this,
- _1, _2,boost::ref(pnlsr)),
- bind(&SyncLogicHandler::nsyncRemoveCallBack, this,
- _1,boost::ref(pnlsr)));
- }
-
- void
- SyncLogicHandler::nsyncUpdateCallBack(const vector<MissingDataInfo> &v,
- SyncSocket *socket, Nlsr& pnlsr)
- {
- cout<<"nsyncUpdateCallBack called ...."<<endl;
- int n = v.size();
- for(int i=0; i < n; i++)
- {
- std::cout<<"Data Name: "<<v[i].prefix<<" Seq: "<<v[i].high.getSeq()<<endl;
- processUpdateFromSync(v[i].prefix,v[i].high.getSeq(),pnlsr);
- }
- }
-
- void
- SyncLogicHandler::nsyncRemoveCallBack(const string& prefix, Nlsr& pnlsr)
- {
- cout<<"nsyncRemoveCallBack called ...."<<endl;
- }
-
- void
- SyncLogicHandler::removeRouterFromSyncing(string& routerPrefix)
- {
- }
-
- void
- SyncLogicHandler::processUpdateFromSync(std::string updateName,
- uint64_t seqNo, Nlsr& pnlsr)
- {
- nlsrTokenizer nt(updateName,"/");
- string chkString("LSA");
- if( nt.doesTokenExist(chkString) )
- {
- //process LSA Update here
- string routerName=nt.getTokenString(nt.getTokenPosition(chkString)+1);
- processRoutingUpdateFromSync(routerName, seqNo, pnlsr);
- }
- chkString="keys";
- if( nt.doesTokenExist(chkString) )
- {
- //process keys update here
- std::string certName=nt.getTokenString(0);
- processKeysUpdateFromSync(certName,seqNo, pnlsr);
- }
- }
-
- void
- SyncLogicHandler::processRoutingUpdateFromSync(std::string routerName,
- uint64_t seqNo, Nlsr& pnlsr)
- {
- if( routerName != pnlsr.getConfParameter().getRouterPrefix() )
- {
- SequencingManager sm(seqNo);
- cout<<sm;
- cout<<"Router Name: "<<routerName<<endl;
- if ( pnlsr.getLsdb().isNameLsaNew(routerName+"/1",sm.getNameLsaSeq()))
- {
- cout<<"Updated Name LSA. Need to fetch it"<<endl;
- string lsaPrefix=
- pnlsr.getConfParameter().getChronosyncLsaPrefix() +
- routerName + "/1/" +
- boost::lexical_cast<std::string>(sm.getNameLsaSeq());
- pnlsr.getIm().expressInterest(pnlsr, lsaPrefix, 3,
- pnlsr.getConfParameter().getInterestResendTime());
- }
- if ( pnlsr.getLsdb().isAdjLsaNew(routerName+"/2",sm.getAdjLsaSeq()))
- {
- cout<<"Updated Adj LSA. Need to fetch it"<<endl;
- string lsaPrefix=
- pnlsr.getConfParameter().getChronosyncLsaPrefix() +
- routerName + "/2/" +
- boost::lexical_cast<std::string>(sm.getAdjLsaSeq());
- pnlsr.getIm().expressInterest(pnlsr, lsaPrefix, 3,
- pnlsr.getConfParameter().getInterestResendTime());
- }
- if ( pnlsr.getLsdb().isCorLsaNew(routerName+"/3",sm.getCorLsaSeq()))
- {
- cout<<"Updated Cor LSA. Need to fetch it"<<endl;
- string lsaPrefix=
- pnlsr.getConfParameter().getChronosyncLsaPrefix() +
- routerName + "/3/" +
- boost::lexical_cast<std::string>(sm.getCorLsaSeq());
- pnlsr.getIm().expressInterest(pnlsr, lsaPrefix, 3,
- pnlsr.getConfParameter().getInterestResendTime());
- }
- }
- }
-
- void
- SyncLogicHandler::processKeysUpdateFromSync(std::string certName,
- uint64_t seqNo, Nlsr& pnlsr)
- {
- cout<<"Cert Name: "<<certName<<std::endl;
- if ( pnlsr.getKeyManager().isNewCertificate(certName,seqNo) )
- {
- string certNamePrefix=certName + "/" +
- boost::lexical_cast<string>(seqNo);
- pnlsr.getIm().expressInterest(pnlsr, certNamePrefix, 3,
- pnlsr.getConfParameter().getInterestResendTime());
- }
- }
-
- void
- SyncLogicHandler::publishRoutingUpdate(SequencingManager& sm,
- string updatePrefix)
- {
- sm.writeSeqNoToFile();
- publishSyncUpdate(updatePrefix,sm.getCombinedSeqNo());
- }
-
- void
- SyncLogicHandler::publishKeyUpdate(KeyManager& km)
- {
- publishSyncUpdate(km.getProcessCertName().toUri(),km.getCertSeqNo());
- }
-
- void
- SyncLogicHandler::publishIdentityUpdate(string identityName)
- {
- publishSyncUpdate(identityName,0);
- }
-
- void
- SyncLogicHandler::publishSyncUpdate(string updatePrefix, uint64_t seqNo)
- {
- cout<<"Publishing Sync Update ......"<<endl;
- cout<<"Update in prefix: "<<updatePrefix<<endl;
- cout<<"Seq No: "<<seqNo<<endl;
- ndn::Name updateName(updatePrefix);
- string data("NoData");
- m_syncSocket->publishData(updateName,0,data.c_str(),data.size(),1000,seqNo);
- }
-
-}
diff --git a/src/communication/nlsr_slh.hpp b/src/communication/nlsr_slh.hpp
deleted file mode 100644
index 4f90fd6..0000000
--- a/src/communication/nlsr_slh.hpp
+++ /dev/null
@@ -1,65 +0,0 @@
-#ifndef NLSR_SLH_HPP
-#define NLSR_SLH_HPP
-
-#include <iostream>
-
-#include <ndn-cpp-dev/face.hpp>
-#include <nsync/sync-socket.h>
-#include <ndn-cpp-dev/security/validator-null.hpp>
-#include <ndn-cpp-dev/util/scheduler.hpp>
-
-#include "nlsr_sm.hpp"
-
-class KeyManager;
-
-extern "C" {
-#include <unistd.h>
-}
-
-using namespace ndn;
-using namespace Sync;
-using namespace std;
-
-class InterestManager;
-class ConfParameter;
-
-namespace nlsr
-{
- class SyncLogicHandler
- {
- public:
- SyncLogicHandler(ndn::shared_ptr<boost::asio::io_service> ioService)
- : m_validator(new ndn::ValidatorNull())
- , m_syncFace(new ndn::Face(ioService))
- {}
-
-
- void createSyncSocket(Nlsr& pnlsr);
- void nsyncUpdateCallBack(const vector<MissingDataInfo>& v,
- SyncSocket *socket, Nlsr& pnlsr );
- void nsyncRemoveCallBack(const string& prefix, Nlsr& pnlsr);
- void removeRouterFromSyncing(string& routerPrefix);
- void publishRoutingUpdate(SequencingManager& sm, string updatePrefix);
- void publishKeyUpdate(KeyManager& km);
- void publishIdentityUpdate(string identityName);
- void setSyncPrefix(string sp)
- {
- m_syncPrefix.clear();
- m_syncPrefix.set(sp);
- }
- private:
- void processUpdateFromSync(std::string updateName, uint64_t seqNo,
- Nlsr& pnlsr);
- void processRoutingUpdateFromSync(std::string routerName, uint64_t seqNo,
- Nlsr& pnlsr);
- void processKeysUpdateFromSync(std::string certName, uint64_t seqNo,
- Nlsr& pnlsr);
- void publishSyncUpdate(string updatePrefix, uint64_t seqNo);
- private:
- ndn::shared_ptr<ndn::ValidatorNull> m_validator;
- ndn::shared_ptr<ndn::Face> m_syncFace;
- ndn::shared_ptr<SyncSocket> m_syncSocket;
- ndn::Name m_syncPrefix;
- };
-}
-#endif
diff --git a/src/communication/sync-logic-handler.cpp b/src/communication/sync-logic-handler.cpp
new file mode 100644
index 0000000..a38fe98
--- /dev/null
+++ b/src/communication/sync-logic-handler.cpp
@@ -0,0 +1,156 @@
+#include "nlsr.hpp"
+#include "sync-logic-handler.hpp"
+#include "security/key-manager.hpp"
+#include "utility/tokenizer.hpp"
+
+
+namespace nlsr {
+
+void
+SyncLogicHandler::createSyncSocket(Nlsr& pnlsr)
+{
+ std::cout << "Creating Sync socket ......" << std::endl;
+ std::cout << "Sync prefix: " << m_syncPrefix.toUri() << std::endl;
+ m_syncSocket = make_shared<Sync::SyncSocket>(m_syncPrefix, m_validator,
+ m_syncFace,
+ bind(&SyncLogicHandler::nsyncUpdateCallBack, this,
+ _1, _2, boost::ref(pnlsr)),
+ bind(&SyncLogicHandler::nsyncRemoveCallBack, this,
+ _1, boost::ref(pnlsr)));
+}
+
+void
+SyncLogicHandler::nsyncUpdateCallBack(const vector<Sync::MissingDataInfo>& v,
+ Sync::SyncSocket* socket, Nlsr& pnlsr)
+{
+ std::cout << "nsyncUpdateCallBack called ...." << std::endl;
+ int n = v.size();
+ for (int i = 0; i < n; i++)
+ {
+ std::cout << "Data Name: " << v[i].prefix << " Seq: " << v[i].high.getSeq() <<
+ endl;
+ processUpdateFromSync(v[i].prefix, v[i].high.getSeq(), pnlsr);
+ }
+}
+
+void
+SyncLogicHandler::nsyncRemoveCallBack(const string& prefix, Nlsr& pnlsr)
+{
+ std::cout << "nsyncRemoveCallBack called ...." << std::endl;
+}
+
+void
+SyncLogicHandler::removeRouterFromSyncing(string& routerPrefix)
+{
+}
+
+void
+SyncLogicHandler::processUpdateFromSync(std::string updateName,
+ uint64_t seqNo, Nlsr& pnlsr)
+{
+ Tokenizer nt(updateName, "/");
+ string chkString("LSA");
+ if (nt.doesTokenExist(chkString))
+ {
+ //process LSA Update here
+ string routerName = nt.getTokenString(nt.getTokenPosition(chkString) + 1);
+ processRoutingUpdateFromSync(routerName, seqNo, pnlsr);
+ }
+ chkString = "keys";
+ if (nt.doesTokenExist(chkString))
+ {
+ //process keys update here
+ std::string certName = nt.getTokenString(0);
+ processKeysUpdateFromSync(certName, seqNo, pnlsr);
+ }
+}
+
+void
+SyncLogicHandler::processRoutingUpdateFromSync(std::string routerName,
+ uint64_t seqNo, Nlsr& pnlsr)
+{
+ if (routerName != pnlsr.getConfParameter().getRouterPrefix())
+ {
+ SequencingManager sm(seqNo);
+ std::cout << sm;
+ std::cout << "Router Name: " << routerName << endl;
+ if (pnlsr.getLsdb().isNameLsaNew(routerName + "/1", sm.getNameLsaSeq()))
+ {
+ std::cout << "Updated Name LSA. Need to fetch it" << std::endl;
+ string lsaPrefix =
+ pnlsr.getConfParameter().getChronosyncLsaPrefix() +
+ routerName + "/1/" +
+ boost::lexical_cast<std::string>(sm.getNameLsaSeq());
+ pnlsr.getIm().expressInterest(pnlsr, lsaPrefix, 3,
+ pnlsr.getConfParameter().getInterestResendTime());
+ }
+ if (pnlsr.getLsdb().isAdjLsaNew(routerName + "/2", sm.getAdjLsaSeq()))
+ {
+ std::cout << "Updated Adj LSA. Need to fetch it" << std::endl;
+ string lsaPrefix =
+ pnlsr.getConfParameter().getChronosyncLsaPrefix() +
+ routerName + "/2/" +
+ boost::lexical_cast<std::string>(sm.getAdjLsaSeq());
+ pnlsr.getIm().expressInterest(pnlsr, lsaPrefix, 3,
+ pnlsr.getConfParameter().getInterestResendTime());
+ }
+ if (pnlsr.getLsdb().isCorLsaNew(routerName + "/3", sm.getCorLsaSeq()))
+ {
+ std::cout << "Updated Cor LSA. Need to fetch it" << std::endl;
+ string lsaPrefix =
+ pnlsr.getConfParameter().getChronosyncLsaPrefix() +
+ routerName + "/3/" +
+ boost::lexical_cast<std::string>(sm.getCorLsaSeq());
+ pnlsr.getIm().expressInterest(pnlsr, lsaPrefix, 3,
+ pnlsr.getConfParameter().getInterestResendTime());
+ }
+ }
+}
+
+void
+SyncLogicHandler::processKeysUpdateFromSync(std::string certName,
+ uint64_t seqNo, Nlsr& pnlsr)
+{
+ std::cout << "Cert Name: " << certName << std::endl;
+ if (pnlsr.getKeyManager().isNewCertificate(certName, seqNo))
+ {
+ string certNamePrefix = certName + "/" +
+ boost::lexical_cast<string>(seqNo);
+ pnlsr.getIm().expressInterest(pnlsr, certNamePrefix, 3,
+ pnlsr.getConfParameter().getInterestResendTime());
+ }
+}
+
+void
+SyncLogicHandler::publishRoutingUpdate(SequencingManager& sm,
+ string updatePrefix)
+{
+ sm.writeSeqNoToFile();
+ publishSyncUpdate(updatePrefix, sm.getCombinedSeqNo());
+}
+
+void
+SyncLogicHandler::publishKeyUpdate(KeyManager& km)
+{
+ publishSyncUpdate(km.getProcessCertName().toUri(), km.getCertSeqNo());
+}
+
+void
+SyncLogicHandler::publishIdentityUpdate(string identityName)
+{
+ publishSyncUpdate(identityName, 0);
+}
+
+void
+SyncLogicHandler::publishSyncUpdate(string updatePrefix, uint64_t seqNo)
+{
+ std::cout << "Publishing Sync Update ......" << std::endl;
+ std::cout << "Update in prefix: " << updatePrefix << std::endl;
+ std::cout << "Seq No: " << seqNo << std::endl;
+ ndn::Name updateName(updatePrefix);
+ string data("NoData");
+ m_syncSocket->publishData(updateName, 0, data.c_str(), data.size(), 1000,
+ seqNo);
+}
+
+}//namespace nlsr
diff --git a/src/communication/sync-logic-handler.hpp b/src/communication/sync-logic-handler.hpp
new file mode 100644
index 0000000..8fd29fe
--- /dev/null
+++ b/src/communication/sync-logic-handler.hpp
@@ -0,0 +1,85 @@
+#ifndef NLSR_SLH_HPP
+#define NLSR_SLH_HPP
+
+#include <iostream>
+
+#include <ndn-cpp-dev/face.hpp>
+#include <nsync/sync-socket.h>
+#include <ndn-cpp-dev/security/validator-null.hpp>
+#include <ndn-cpp-dev/util/scheduler.hpp>
+
+#include "sequencing-manager.hpp"
+
+class KeyManager;
+
+extern "C" {
+#include <unistd.h>
+}
+
+class InterestManager;
+class ConfParameter;
+
+namespace nlsr {
+
+class SyncLogicHandler
+{
+public:
+ SyncLogicHandler(ndn::shared_ptr<boost::asio::io_service> ioService)
+ : m_validator(new ndn::ValidatorNull())
+ , m_syncFace(new ndn::Face(ioService))
+ {}
+
+
+ void
+ createSyncSocket(Nlsr& pnlsr);
+
+ void
+ nsyncUpdateCallBack(const vector<Sync::MissingDataInfo>& v,
+ Sync::SyncSocket* socket, Nlsr& pnlsr);
+
+ void
+ nsyncRemoveCallBack(const string& prefix, Nlsr& pnlsr);
+
+ void
+ removeRouterFromSyncing(string& routerPrefix);
+
+ void
+ publishRoutingUpdate(SequencingManager& sm, string updatePrefix);
+
+ void
+ publishKeyUpdate(KeyManager& km);
+
+ void
+ publishIdentityUpdate(string identityName);
+
+ void
+ setSyncPrefix(string sp)
+ {
+ m_syncPrefix.clear();
+ m_syncPrefix.set(sp);
+ }
+
+private:
+ void
+ processUpdateFromSync(std::string updateName, uint64_t seqNo, Nlsr& pnlsr);
+
+ void
+ processRoutingUpdateFromSync(std::string routerName, uint64_t seqNo,
+ Nlsr& pnlsr);
+
+ void
+ processKeysUpdateFromSync(std::string certName, uint64_t seqNo, Nlsr& pnlsr);
+
+ void
+ publishSyncUpdate(string updatePrefix, uint64_t seqNo);
+
+private:
+ ndn::shared_ptr<ndn::ValidatorNull> m_validator;
+ ndn::shared_ptr<ndn::Face> m_syncFace;
+ ndn::shared_ptr<Sync::SyncSocket> m_syncSocket;
+ ndn::Name m_syncPrefix;
+};
+
+} //namespace nlsr
+
+#endif //NLSR_SLH_HPP
diff --git a/src/conf-file-processor.cpp b/src/conf-file-processor.cpp
new file mode 100644
index 0000000..a19fa09
--- /dev/null
+++ b/src/conf-file-processor.cpp
@@ -0,0 +1,558 @@
+#include <iostream>
+#include <fstream>
+#include <string>
+#include <cstdlib>
+#include <sstream>
+
+#include "conf-file-processor.hpp"
+#include "conf-parameter.hpp"
+#include "utility/tokenizer.hpp"
+#include "adjacent.hpp"
+
+
+namespace nlsr {
+
+using namespace std;
+
+int
+ConfFileProcessor::processConfFile(Nlsr& pnlsr)
+{
+ int ret = 0;
+ if (!m_confFileName.empty())
+ {
+ std::ifstream inputFile(m_confFileName.c_str());
+ if (inputFile.is_open())
+ {
+ for (string line; getline(inputFile, line);)
+ {
+ if (!line.empty())
+ {
+ if (line[0] != '#' && line[0] != '!')
+ {
+ ret = processConfCommand(pnlsr, line);
+ if (ret == -1)
+ {
+ break;
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ std::cerr << "Configuration file: (" << m_confFileName << ") does not exist :(";
+ std::cerr << endl;
+ ret = -1;
+ }
+ }
+ return ret;
+}
+
+
+int
+ConfFileProcessor::processConfCommand(Nlsr& pnlsr, string command)
+{
+ int ret = 0;
+ Tokenizer nt(command, " ");
+ if ((nt.getFirstToken() == "network"))
+ {
+ ret = processConfCommandNetwork(pnlsr, nt.getRestOfLine());
+ }
+ else if ((nt.getFirstToken() == "site-name"))
+ {
+ ret = processConfCommandSiteName(pnlsr, nt.getRestOfLine());
+ }
+ else if ((nt.getFirstToken() == "root-key-prefix"))
+ {
+ ret = processConfCommandRootKeyPrefix(pnlsr, nt.getRestOfLine());
+ }
+ else if ((nt.getFirstToken() == "router-name"))
+ {
+ ret = processConfCommandRouterName(pnlsr, nt.getRestOfLine());
+ }
+ else if ((nt.getFirstToken() == "ndnneighbor"))
+ {
+ ret = processConfCommandNdnNeighbor(pnlsr, nt.getRestOfLine());
+ }
+ else if ((nt.getFirstToken() == "link-cost"))
+ {
+ ret = processConfCommandLinkCost(pnlsr, nt.getRestOfLine());
+ }
+ else if ((nt.getFirstToken() == "ndnname"))
+ {
+ ret = processConfCommandNdnName(pnlsr, nt.getRestOfLine());
+ }
+ else if ((nt.getFirstToken() == "interest-retry-num"))
+ {
+ processConfCommandInterestRetryNumber(pnlsr, nt.getRestOfLine());
+ }
+ else if ((nt.getFirstToken() == "interest-resend-time"))
+ {
+ processConfCommandInterestResendTime(pnlsr, nt.getRestOfLine());
+ }
+ else if ((nt.getFirstToken() == "lsa-refresh-time"))
+ {
+ processConfCommandLsaRefreshTime(pnlsr, nt.getRestOfLine());
+ }
+ else if ((nt.getFirstToken() == "max-faces-per-prefix"))
+ {
+ processConfCommandMaxFacesPerPrefix(pnlsr, nt.getRestOfLine());
+ }
+ else if ((nt.getFirstToken() == "log-dir"))
+ {
+ processConfCommandLogDir(pnlsr, nt.getRestOfLine());
+ }
+ else if ((nt.getFirstToken() == "cert-dir"))
+ {
+ processConfCommandCertDir(pnlsr, nt.getRestOfLine());
+ }
+ else if ((nt.getFirstToken() == "detailed-logging"))
+ {
+ processConfCommandDetailedLogging(pnlsr, nt.getRestOfLine());
+ }
+ else if ((nt.getFirstToken() == "debugging"))
+ {
+ processConfCommandDebugging(pnlsr, nt.getRestOfLine());
+ }
+ else if ((nt.getFirstToken() == "chronosync-sync-prefix"))
+ {
+ processConfCommandChronosyncSyncPrefix(pnlsr, nt.getRestOfLine());
+ }
+ else if ((nt.getFirstToken() == "hyperbolic-cordinate"))
+ {
+ processConfCommandHyperbolicCordinate(pnlsr, nt.getRestOfLine());
+ }
+ else if ((nt.getFirstToken() == "hyperbolic-routing"))
+ {
+ processConfCommandIsHyperbolicCalc(pnlsr, nt.getRestOfLine());
+ }
+ else if ((nt.getFirstToken() == "tunnel-type"))
+ {
+ processConfCommandTunnelType(pnlsr, nt.getRestOfLine());
+ }
+ else
+ {
+ cout << "Wrong configuration Command: " << nt.getFirstToken() << endl;
+ }
+ return ret;
+}
+
+int
+ConfFileProcessor::processConfCommandNetwork(Nlsr& pnlsr, string command)
+{
+ if (command.empty())
+ {
+ cerr << " Network can not be null or empty :( !" << endl;
+ return -1;
+ }
+ else
+ {
+ if (command[command.size() - 1] == '/')
+ {
+ command.erase(command.size() - 1);
+ }
+ if (command[0] == '/')
+ {
+ command.erase(0, 1);
+ }
+ pnlsr.getConfParameter().setNetwork(command);
+ }
+ return 0;
+}
+
+int
+ConfFileProcessor::processConfCommandSiteName(Nlsr& pnlsr, string command)
+{
+ if (command.empty())
+ {
+ cerr << "Site name can not be null or empty :( !" << endl;
+ return -1;
+ }
+ else
+ {
+ if (command[command.size() - 1] == '/')
+ {
+ command.erase(command.size() - 1);
+ }
+ if (command[0] == '/')
+ {
+ command.erase(0, 1);
+ }
+ pnlsr.getConfParameter().setSiteName(command);
+ }
+ return 0;
+}
+
+int
+ConfFileProcessor::processConfCommandRootKeyPrefix(Nlsr& pnlsr, string command)
+{
+ if (command.empty())
+ {
+ cerr << "Root Key Prefix can not be null or empty :( !" << endl;
+ return -1;
+ }
+ else
+ {
+ if (command[command.size() - 1] == '/')
+ {
+ command.erase(command.size() - 1);
+ }
+ if (command[0] == '/')
+ {
+ command.erase(0, 1);
+ }
+ pnlsr.getConfParameter().setRootKeyPrefix(command);
+ }
+ return 0;
+}
+
+
+int
+ConfFileProcessor::processConfCommandRouterName(Nlsr& pnlsr, string command)
+{
+ if (command.empty())
+ {
+ cerr << " Router name can not be null or empty :( !" << endl;
+ return -1;
+ }
+ else
+ {
+ if (command[command.size() - 1] == '/')
+ {
+ command.erase(command.size() - 1);
+ }
+ if (command[0] == '/')
+ {
+ command.erase(0, 1);
+ }
+ pnlsr.getConfParameter().setRouterName(command);
+ }
+ return 0;
+}
+
+int
+ConfFileProcessor::processConfCommandInterestRetryNumber(Nlsr& pnlsr,
+ string command)
+{
+ if (command.empty())
+ {
+ cerr << " Wrong command format ! [interest-retry-num n]" << endl;
+ }
+ else
+ {
+ int irn;
+ stringstream ss(command.c_str());
+ ss >> irn;
+ if (irn >= 1 && irn <= 5)
+ {
+ pnlsr.getConfParameter().setInterestRetryNumber(irn);
+ }
+ }
+ return 0;
+}
+
+int
+ConfFileProcessor::processConfCommandInterestResendTime(Nlsr& pnlsr,
+ string command)
+{
+ if (command.empty())
+ {
+ cerr << " Wrong command format ! [interest-resend-time s]" << endl;
+ }
+ else
+ {
+ int irt;
+ stringstream ss(command.c_str());
+ ss >> irt;
+ if (irt >= 1 && irt <= 20)
+ {
+ pnlsr.getConfParameter().setInterestResendTime(irt);
+ }
+ }
+ return 0;
+}
+
+int
+ConfFileProcessor::processConfCommandLsaRefreshTime(Nlsr& pnlsr, string command)
+{
+ if (command.empty())
+ {
+ cerr << " Wrong command format ! [interest-resend-time s]" << endl;
+ }
+ else
+ {
+ int lrt;
+ stringstream ss(command.c_str());
+ ss >> lrt;
+ if (lrt >= 240 && lrt <= 7200)
+ {
+ pnlsr.getConfParameter().setLsaRefreshTime(lrt);
+ }
+ }
+ return 0;
+}
+
+int
+ConfFileProcessor::processConfCommandMaxFacesPerPrefix(Nlsr& pnlsr,
+ string command)
+{
+ if (command.empty())
+ {
+ cerr << " Wrong command format ! [max-faces-per-prefix n]" << endl;
+ }
+ else
+ {
+ int mfpp;
+ stringstream ss(command.c_str());
+ ss >> mfpp;
+ if (mfpp >= 0 && mfpp <= 60)
+ {
+ pnlsr.getConfParameter().setMaxFacesPerPrefix(mfpp);
+ }
+ }
+ return 0;
+}
+
+int
+ConfFileProcessor::processConfCommandTunnelType(Nlsr& pnlsr, string command)
+{
+ if (command.empty())
+ {
+ cerr << " Wrong command format ! [tunnel-type tcp/udp]!" << endl;
+ }
+ else
+ {
+ if (command == "tcp" || command == "TCP")
+ {
+ pnlsr.getConfParameter().setTunnelType(1);
+ }
+ else if (command == "udp" || command == "UDP")
+ {
+ pnlsr.getConfParameter().setTunnelType(0);
+ }
+ else
+ {
+ cerr << " Wrong command format ! [tunnel-type tcp/udp]!" << endl;
+ }
+ }
+ return 0;
+}
+
+int
+ConfFileProcessor::processConfCommandChronosyncSyncPrefix(Nlsr& pnlsr,
+ string command)
+{
+ if (command.empty())
+ {
+ cerr << " Wrong command format ! [chronosync-sync-prefix name/prefix]!" << endl;
+ }
+ else
+ {
+ pnlsr.getConfParameter().setChronosyncSyncPrefix(command);
+ }
+ return 0;
+}
+
+
+int
+ConfFileProcessor::processConfCommandLogDir(Nlsr& pnlsr, string command)
+{
+ if (command.empty())
+ {
+ cerr << " Wrong command format ! [log-dir /path/to/log/dir]!" << endl;
+ }
+ else
+ {
+ pnlsr.getConfParameter().setLogDir(command);
+ }
+ return 0;
+}
+
+int
+ConfFileProcessor::processConfCommandCertDir(Nlsr& pnlsr, string command)
+{
+ if (command.empty())
+ {
+ cerr << " Wrong command format ! [cert-dir /path/to/cert/dir]!" << endl;
+ }
+ else
+ {
+ pnlsr.getConfParameter().setCertDir(command);
+ }
+ return 0;
+}
+
+int
+ConfFileProcessor::processConfCommandDebugging(Nlsr& pnlsr, string command)
+{
+ if (command.empty())
+ {
+ cerr << " Wrong command format ! [debugging on/of]!" << endl;
+ }
+ else
+ {
+ if (command == "on" || command == "ON")
+ {
+ pnlsr.getConfParameter().setDebugging(1);
+ }
+ else if (command == "off" || command == "off")
+ {
+ pnlsr.getConfParameter().setDebugging(0);
+ }
+ else
+ {
+ cerr << " Wrong command format ! [debugging on/off]!" << endl;
+ }
+ }
+ return 0;
+}
+
+int
+ConfFileProcessor::processConfCommandDetailedLogging(Nlsr& pnlsr,
+ string command)
+{
+ if (command.empty())
+ {
+ cerr << " Wrong command format ! [detailed-logging on/off]!" << endl;
+ }
+ else
+ {
+ if (command == "on" || command == "ON")
+ {
+ pnlsr.getConfParameter().setDetailedLogging(1);
+ }
+ else if (command == "off" || command == "off")
+ {
+ pnlsr.getConfParameter().setDetailedLogging(0);
+ }
+ else
+ {
+ cerr << " Wrong command format ! [detailed-logging on/off]!" << endl;
+ }
+ }
+ return 0;
+}
+
+int
+ConfFileProcessor::processConfCommandIsHyperbolicCalc(Nlsr& pnlsr,
+ string command)
+{
+ if (command.empty())
+ {
+ cerr << " Wrong command format ! [hyperbolic-routing on/off/dry-run]!" << endl;
+ }
+ else
+ {
+ if (command == "on" || command == "ON")
+ {
+ pnlsr.getConfParameter().setIsHyperbolicCalc(1);
+ }
+ else if (command == "dry-run" || command == "DRY-RUN")
+ {
+ pnlsr.getConfParameter().setIsHyperbolicCalc(2);
+ }
+ else if (command == "off" || command == "off")
+ {
+ pnlsr.getConfParameter().setIsHyperbolicCalc(0);
+ }
+ else
+ {
+ cerr << " Wrong command format ! [hyperbolic-routing on/off/dry-run]!" << endl;
+ }
+ }
+ return 0;
+}
+
+int
+ConfFileProcessor::processConfCommandHyperbolicCordinate(Nlsr& pnlsr,
+ string command)
+{
+ if (command.empty())
+ {
+ cerr << " Wrong command format ! [hyperbolic-cordinate r 0]!" << endl;
+ if (pnlsr.getConfParameter().getIsHyperbolicCalc() > 0)
+ {
+ return -1;
+ }
+ }
+ else
+ {
+ Tokenizer nt(command, " ");
+ stringstream ssr(nt.getFirstToken().c_str());
+ stringstream sst(nt.getRestOfLine().c_str());
+ double r, theta;
+ ssr >> r;
+ sst >> theta;
+ pnlsr.getConfParameter().setCorR(r);
+ pnlsr.getConfParameter().setCorTheta(theta);
+ }
+ return 0;
+}
+
+
+int
+ConfFileProcessor::processConfCommandNdnNeighbor(Nlsr& pnlsr, string command)
+{
+ if (command.empty())
+ {
+ cerr << " Wrong command format ! [ndnneighbor /nbr/name/ FaceId]!" << endl;
+ }
+ else
+ {
+ Tokenizer nt(command, " ");
+ if (nt.getRestOfLine().empty())
+ {
+ cerr << " Wrong command format ! [ndnneighbor /nbr/name/ FaceId]!" << endl;
+ return 0;
+ }
+ else
+ {
+ stringstream sst(nt.getRestOfLine().c_str());
+ int faceId;
+ sst >> faceId;
+ Adjacent adj(nt.getFirstToken(), faceId, 0.0, 0, 0);
+ pnlsr.getAdl().insert(adj);
+ }
+ }
+ return 0;
+}
+
+int
+ConfFileProcessor::processConfCommandNdnName(Nlsr& pnlsr, string command)
+{
+ if (command.empty())
+ {
+ cerr << " Wrong command format ! [ndnname name/prefix]!" << endl;
+ }
+ else
+ {
+ pnlsr.getNpl().insert(command);
+ }
+ return 0;
+}
+
+
+int
+ConfFileProcessor::processConfCommandLinkCost(Nlsr& pnlsr, string command)
+{
+ if (command.empty())
+ {
+ cerr << " Wrong command format ! [link-cost nbr/name cost]!" << endl;
+ if (pnlsr.getConfParameter().getIsHyperbolicCalc() > 0)
+ {
+ return -1;
+ }
+ }
+ else
+ {
+ Tokenizer nt(command, " ");
+ stringstream sst(nt.getRestOfLine().c_str());
+ double cost;
+ sst >> cost;
+ pnlsr.getAdl().updateAdjacentLinkCost(nt.getFirstToken(), cost);
+ }
+ return 0;
+}
+
+} //namespace nlsr
+
diff --git a/src/conf-file-processor.hpp b/src/conf-file-processor.hpp
new file mode 100644
index 0000000..a17ba12
--- /dev/null
+++ b/src/conf-file-processor.hpp
@@ -0,0 +1,89 @@
+#ifndef CONF_PROCESSOR_HPP
+#define CONF_PROCESSOR_HPP
+
+#include "nlsr.hpp"
+
+namespace nlsr {
+class ConfFileProcessor
+{
+public:
+ ConfFileProcessor()
+ : m_confFileName()
+ {
+ }
+
+ ConfFileProcessor(const string& cfile)
+ {
+ m_confFileName = cfile;
+ }
+
+ int processConfFile(Nlsr& pnlsr);
+
+private:
+ int
+ processConfCommand(Nlsr& pnlsr, string command);
+
+ int
+ processConfCommandNetwork(Nlsr& pnlsr, string command);
+
+ int
+ processConfCommandSiteName(Nlsr& pnlsr, string command);
+
+ int
+ processConfCommandRootKeyPrefix(Nlsr& pnlsr, string command);
+
+ int
+ processConfCommandRouterName(Nlsr& pnlsr, string command);
+
+ int
+ processConfCommandInterestRetryNumber(Nlsr& pnlsr, string command);
+
+ int
+ processConfCommandInterestResendTime(Nlsr& pnlsr, string command);
+
+ int
+ processConfCommandLsaRefreshTime(Nlsr& pnlsr, string command);
+
+ int
+ processConfCommandMaxFacesPerPrefix(Nlsr& pnlsr, string command);
+
+ int
+ processConfCommandTunnelType(Nlsr& pnlsr, string command);
+
+ int
+ processConfCommandChronosyncSyncPrefix(Nlsr& pnlsr, string command);
+
+ int
+ processConfCommandLogDir(Nlsr& pnlsr, string command);
+
+ int
+ processConfCommandCertDir(Nlsr& pnlsr, string command);
+
+ int
+ processConfCommandDebugging(Nlsr& pnlsr, string command);
+
+ int
+ processConfCommandDetailedLogging(Nlsr& pnlsr, string command);
+
+ int
+ processConfCommandIsHyperbolicCalc(Nlsr& pnlsr, string command);
+
+ int
+ processConfCommandHyperbolicCordinate(Nlsr& pnlsr, string command);
+
+ int
+ processConfCommandNdnNeighbor(Nlsr& pnlsr, string command);
+
+ int
+ processConfCommandNdnName(Nlsr& pnlsr, string command);
+
+ int
+ processConfCommandLinkCost(Nlsr& pnlsr, string command);
+
+
+private:
+ string m_confFileName;
+};
+
+} //namespace nlsr
+#endif //CONF_PROCESSOR_HPP
diff --git a/src/conf-parameter.cpp b/src/conf-parameter.cpp
new file mode 100644
index 0000000..2bb337f
--- /dev/null
+++ b/src/conf-parameter.cpp
@@ -0,0 +1,31 @@
+#include <iostream>
+#include "conf-parameter.hpp"
+
+namespace nlsr {
+
+using namespace std;
+
+ostream&
+operator<<(ostream& os, ConfParameter& cfp)
+{
+ os << "Router Name: " << cfp.getRouterName() << endl;
+ os << "Site Name: " << cfp.getSiteName() << endl;
+ os << "Network: " << cfp.getNetwork() << endl;
+ os << "Router Prefix: " << cfp.getRouterPrefix() << endl;
+ os << "ChronoSync sync Prifex: " << cfp.getChronosyncSyncPrefix() << endl;
+ os << "Interest Retry number: " << cfp.getInterestRetryNumber() << endl;
+ os << "Interest Resend second: " << cfp.getInterestResendTime() << endl;
+ os << "Info Interest Interval: " << cfp.getInfoInterestInterval() << endl;
+ os << "LSA refresh time: " << cfp.getLsaRefreshTime() << endl;
+ os << "Max Faces Per Prefix: " << cfp.getMaxFacesPerPrefix() << endl;
+ os << "Log Dir: " << cfp.getLogDir() << endl;
+ os << "Detalied logging: " << cfp.getDetailedLogging() << endl;
+ os << "Debugging: " << cfp.getDebugging() << endl;
+ os << "Hyperbolic ROuting: " << cfp.getIsHyperbolicCalc() << endl;
+ os << "Hyp R: " << cfp.getCorR() << endl;
+ os << "Hyp theta: " << cfp.getCorTheta() << endl;
+ os << "Tunnel Type: " << cfp.getTunnelType() << endl;
+ return os;
+}
+
+} //namespace nlsr
diff --git a/src/conf-parameter.hpp b/src/conf-parameter.hpp
new file mode 100644
index 0000000..7dc8c76
--- /dev/null
+++ b/src/conf-parameter.hpp
@@ -0,0 +1,336 @@
+#ifndef CONF_PARAM_HPP
+#define CONF_PARAM_HPP
+
+#include <iostream>
+
+namespace nlsr {
+class ConfParameter
+{
+
+public:
+ ConfParameter()
+ : m_chronosyncSyncPrefix("ndn/nlsr/sync")
+ , m_chronosyncLsaPrefix("/ndn/nlsr/LSA")
+ , m_rootKeyPrefix("/ndn/keys")
+ , m_interestRetryNumber(3)
+ , m_interestResendTime(5)
+ , m_infoInterestInterval(60)
+ , m_lsaRefreshTime(1800)
+ , m_routerDeadInterval(3600)
+ , m_maxFacesPerPrefix(0)
+ , m_tunnelType(0)
+ , m_detailedLogging(0)
+ , m_certDir()
+ , m_debugging(0)
+ , m_seqFileDir()
+ , m_isHyperbolicCalc(0)
+ , m_corR(0)
+ , m_corTheta(0)
+ {}
+
+ void
+ setRouterName(const std::string& rn)
+ {
+ m_routerName = rn;
+ }
+
+ std::string
+ getRouterName()
+ {
+ return m_routerName;
+ }
+
+ void
+ setSiteName(const std::string& sn)
+ {
+ m_siteName = sn;
+ }
+
+ std::string
+ getSiteName()
+ {
+ return m_siteName;
+ }
+
+ void
+ setNetwork(const std::string& nn)
+ {
+ m_network = nn;
+ }
+
+ std::string
+ getNetwork()
+ {
+ return m_network;
+ }
+
+ void
+ buildRouterPrefix()
+ {
+ m_routerPrefix = "/" + m_network + "/" + m_siteName + "/" + m_routerName;
+ }
+
+ std::string
+ getRouterPrefix()
+ {
+ return m_routerPrefix;
+ }
+
+ std::string
+ getRootKeyPrefix()
+ {
+ return m_rootKeyPrefix;
+ }
+
+ void
+ setRootKeyPrefix(std::string rkp)
+ {
+ m_rootKeyPrefix = rkp;
+ }
+
+ void
+ setInterestRetryNumber(int irn)
+ {
+ m_interestRetryNumber = irn;
+ }
+
+ int
+ getInterestRetryNumber()
+ {
+ return m_interestRetryNumber;
+ }
+
+ void
+ setInterestResendTime(int irt)
+ {
+ m_interestResendTime = irt;
+ }
+
+ int
+ getInterestResendTime()
+ {
+ return m_interestResendTime;
+ }
+
+ void
+ setLsaRefreshTime(int lrt)
+ {
+ m_lsaRefreshTime = lrt;
+ m_routerDeadInterval = 2 * m_lsaRefreshTime;
+ }
+
+ int
+ getLsaRefreshTime()
+ {
+ return m_lsaRefreshTime;
+ }
+
+ void
+ setRouterDeadInterval(int rdt)
+ {
+ m_routerDeadInterval = rdt;
+ }
+
+ long int
+ getRouterDeadInterval()
+ {
+ return m_routerDeadInterval;
+ }
+
+ void
+ setMaxFacesPerPrefix(int mfpp)
+ {
+ m_maxFacesPerPrefix = mfpp;
+ }
+
+ int
+ getMaxFacesPerPrefix()
+ {
+ return m_maxFacesPerPrefix;
+ }
+
+ void
+ setLogDir(std::string ld)
+ {
+ m_logDir = ld;
+ }
+
+ std::string
+ getLogDir()
+ {
+ return m_logDir;
+ }
+
+ void
+ setCertDir(std::string cd)
+ {
+ m_certDir = cd;
+ }
+
+ std::string
+ getCertDir()
+ {
+ return m_certDir;
+ }
+
+ void
+ setSeqFileDir(std::string ssfd)
+ {
+ m_seqFileDir = ssfd;
+ }
+
+ std::string
+ getSeqFileDir()
+ {
+ return m_seqFileDir;
+ }
+
+ void
+ setDetailedLogging(int dl)
+ {
+ m_detailedLogging = dl;
+ }
+
+ int
+ getDetailedLogging()
+ {
+ return m_detailedLogging;
+ }
+
+ void
+ setDebugging(int d)
+ {
+ m_debugging = d;
+ }
+
+ int
+ getDebugging()
+ {
+ return m_debugging;
+ }
+
+ void
+ setIsHyperbolicCalc(int ihc)
+ {
+ m_isHyperbolicCalc = ihc;
+ }
+
+ int
+ getIsHyperbolicCalc()
+ {
+ return m_isHyperbolicCalc;
+ }
+
+ void
+ setCorR(double cr)
+ {
+ m_corR = cr;
+ }
+
+ double
+ getCorR()
+ {
+ return m_corR;
+ }
+
+ void
+ setCorTheta(double ct)
+ {
+ m_corTheta = ct;
+ }
+
+ double
+ getCorTheta()
+ {
+ return m_corTheta;
+ }
+
+ void
+ setTunnelType(int tt)
+ {
+ m_tunnelType = tt;
+ }
+
+ int
+ getTunnelType()
+ {
+ return m_tunnelType;
+ }
+
+ void
+ setChronosyncSyncPrefix(const std::string& csp)
+ {
+ m_chronosyncSyncPrefix = csp;
+ }
+
+ std::string
+ getChronosyncSyncPrefix()
+ {
+ return m_chronosyncSyncPrefix;
+ }
+
+ void
+ setChronosyncLsaPrefix(std::string clp)
+ {
+ m_chronosyncLsaPrefix = clp;
+ }
+
+ std::string
+ getChronosyncLsaPrefix()
+ {
+ return m_chronosyncLsaPrefix;
+ }
+
+ int
+ getInfoInterestInterval()
+ {
+ return m_infoInterestInterval;
+ }
+
+ void
+ setInfoInterestInterval(int iii)
+ {
+ m_infoInterestInterval = iii;
+ }
+
+private:
+ std::string m_routerName;
+ std::string m_siteName;
+ std::string m_network;
+
+ std::string m_routerPrefix;
+ std::string m_lsaRouterPrefix;
+
+ std::string m_chronosyncSyncPrefix;
+ std::string m_chronosyncLsaPrefix;
+ std::string m_rootKeyPrefix;
+
+ int m_interestRetryNumber;
+ int m_interestResendTime;
+ int m_infoInterestInterval;
+ int m_lsaRefreshTime;
+ int m_routerDeadInterval;
+
+ int m_maxFacesPerPrefix;
+ int m_tunnelType;
+ int m_detailedLogging;
+
+ std::string m_certDir;
+ int m_debugging;
+ std::string m_seqFileDir;
+
+ int m_isHyperbolicCalc;
+ double m_corR;
+ double m_corTheta;
+
+ std::string m_logFile;
+ std::string m_logDir;
+
+};
+
+std::ostream&
+operator<<(std::ostream& os, ConfParameter& cfp);
+
+} // namespace nlsr
+
+#endif //CONF_PARAM_HPP
diff --git a/src/lsa.cpp b/src/lsa.cpp
new file mode 100644
index 0000000..0bd450c
--- /dev/null
+++ b/src/lsa.cpp
@@ -0,0 +1,330 @@
+#include <string>
+#include <iostream>
+#include <sstream>
+#include <algorithm>
+#include <cmath>
+#include <limits>
+
+#include "nlsr.hpp"
+#include "lsa.hpp"
+#include "npl.hpp"
+#include "adjacent.hpp"
+#include "utility/tokenizer.hpp"
+
+
+namespace nlsr {
+
+using namespace std;
+
+
+string
+NameLsa::getKey()
+{
+ string key;
+ key = m_origRouter + "/" + boost::lexical_cast<std::string>(1);
+ return key;
+}
+
+NameLsa::NameLsa(string origR, uint8_t lst, uint32_t lsn, uint32_t lt, Npl npl)
+{
+ m_origRouter = origR;
+ m_lsType = lst;
+ m_lsSeqNo = lsn;
+ m_lifeTime = lt;
+ std::list<string> nl = npl.getNameList();
+ for (std::list<string>::iterator it = nl.begin(); it != nl.end(); it++)
+ {
+ addName((*it));
+ }
+}
+
+string
+NameLsa::getData()
+{
+ string nameLsaData;
+ nameLsaData = m_origRouter + "|" + boost::lexical_cast<std::string>(1) + "|"
+ + boost::lexical_cast<std::string>(m_lsSeqNo) + "|"
+ + boost::lexical_cast<std::string>(m_lifeTime);
+ nameLsaData += "|";
+ nameLsaData += boost::lexical_cast<std::string>(m_npl.getSize());
+ std::list<string> nl = m_npl.getNameList();
+ for (std::list<string>::iterator it = nl.begin(); it != nl.end(); it++)
+ {
+ nameLsaData += "|";
+ nameLsaData += (*it);
+ }
+ return nameLsaData + "|";
+}
+
+bool
+NameLsa::initializeFromContent(string content)
+{
+ uint32_t numName = 0;
+ Tokenizer nt(content, "|");
+ m_origRouter = nt.getNextToken();
+ if (m_origRouter.empty())
+ {
+ return false;
+ }
+ try
+ {
+ m_lsType = boost::lexical_cast<uint8_t>(nt.getNextToken());
+ m_lsSeqNo = boost::lexical_cast<uint32_t>(nt.getNextToken());
+ m_lifeTime = boost::lexical_cast<uint32_t>(nt.getNextToken());
+ numName = boost::lexical_cast<uint32_t>(nt.getNextToken());
+ }
+ catch (std::exception& e)
+ {
+ return false;
+ }
+ for (uint32_t i = 0; i < numName; i++)
+ {
+ string name = nt.getNextToken();
+ addName(name);
+ }
+ return true;
+}
+
+void
+NameLsa::writeLog()
+{
+}
+
+std::ostream&
+operator<<(std::ostream& os, NameLsa& nLsa)
+{
+ os << "Name Lsa: " << endl;
+ os << " Origination Router: " << nLsa.getOrigRouter() << endl;
+ os << " Ls Type: " << (unsigned short)nLsa.getLsType() << endl;
+ os << " Ls Seq No: " << (unsigned int)nLsa.getLsSeqNo() << endl;
+ os << " Ls Lifetime: " << (unsigned int)nLsa.getLifeTime() << endl;
+ os << " Names: " << endl;
+ int i = 1;
+ std::list<string> nl = nLsa.getNpl().getNameList();
+ for (std::list<string>::iterator it = nl.begin(); it != nl.end(); it++)
+ {
+ os << " Name " << i << ": " << (*it) << endl;
+ }
+ return os;
+}
+
+
+
+CorLsa::CorLsa(string origR, uint8_t lst, uint32_t lsn, uint32_t lt
+ , double r, double theta)
+{
+ m_origRouter = origR;
+ m_lsType = lst;
+ m_lsSeqNo = lsn;
+ m_lifeTime = lt;
+ m_corRad = r;
+ m_corTheta = theta;
+}
+
+string
+CorLsa::getKey()
+{
+ string key;
+ key = m_origRouter + "/" + boost::lexical_cast<std::string>(3);
+ return key;
+}
+
+bool
+CorLsa::isEqual(CorLsa& clsa)
+{
+ return (std::abs(m_corRad - clsa.getCorRadius()) <
+ std::numeric_limits<double>::epsilon()) &&
+ (std::abs(m_corTheta - clsa.getCorTheta()) <
+ std::numeric_limits<double>::epsilon());
+}
+
+string
+CorLsa::getData()
+{
+ string corLsaData;
+ corLsaData = m_origRouter + "|";
+ corLsaData += (boost::lexical_cast<std::string>(3) + "|");
+ corLsaData += (boost::lexical_cast<std::string>(m_lsSeqNo) + "|");
+ corLsaData += (boost::lexical_cast<std::string>(m_lifeTime) + "|");
+ corLsaData += (boost::lexical_cast<std::string>(m_corRad) + "|");
+ corLsaData += (boost::lexical_cast<std::string>(m_corTheta) + "|");
+ return corLsaData;
+}
+
+bool
+CorLsa::initializeFromContent(string content)
+{
+ Tokenizer nt(content, "|");
+ m_origRouter = nt.getNextToken();
+ if (m_origRouter.empty())
+ {
+ return false;
+ }
+ try
+ {
+ m_lsType = boost::lexical_cast<uint8_t>(nt.getNextToken());
+ m_lsSeqNo = boost::lexical_cast<uint32_t>(nt.getNextToken());
+ m_lifeTime = boost::lexical_cast<uint32_t>(nt.getNextToken());
+ m_corRad = boost::lexical_cast<double>(nt.getNextToken());
+ m_corTheta = boost::lexical_cast<double>(nt.getNextToken());
+ }
+ catch (std::exception& e)
+ {
+ return false;
+ }
+ return true;
+}
+
+std::ostream&
+operator<<(std::ostream& os, CorLsa& cLsa)
+{
+ os << "Cor Lsa: " << endl;
+ os << " Origination Router: " << cLsa.getOrigRouter() << endl;
+ os << " Ls Type: " << (unsigned short)cLsa.getLsType() << endl;
+ os << " Ls Seq No: " << (unsigned int)cLsa.getLsSeqNo() << endl;
+ os << " Ls Lifetime: " << (unsigned int)cLsa.getLifeTime() << endl;
+ os << " Hyperbolic Radius: " << cLsa.getCorRadius() << endl;
+ os << " Hyperbolic Theta: " << cLsa.getCorTheta() << endl;
+ return os;
+}
+
+
+AdjLsa::AdjLsa(string origR, uint8_t lst, uint32_t lsn, uint32_t lt,
+ uint32_t nl , Adl padl)
+{
+ m_origRouter = origR;
+ m_lsType = lst;
+ m_lsSeqNo = lsn;
+ m_lifeTime = lt;
+ m_noLink = nl;
+ std::list<Adjacent> al = padl.getAdjList();
+ for (std::list<Adjacent>::iterator it = al.begin(); it != al.end(); it++)
+ {
+ if ((*it).getStatus() == 1)
+ {
+ addAdjacent((*it));
+ }
+ }
+}
+
+string
+AdjLsa::getKey()
+{
+ string key;
+ key = m_origRouter + "/" + boost::lexical_cast<std::string>(2);
+ return key;
+}
+
+bool
+AdjLsa::isEqual(AdjLsa& alsa)
+{
+ return m_adl.isEqual(alsa.getAdl());
+}
+
+
+string
+AdjLsa::getData()
+{
+ string adjLsaData;
+ adjLsaData = m_origRouter + "|" + boost::lexical_cast<std::string>(2) + "|"
+ + boost::lexical_cast<std::string>(m_lsSeqNo) + "|"
+ + boost::lexical_cast<std::string>(m_lifeTime);
+ adjLsaData += "|";
+ adjLsaData += boost::lexical_cast<std::string>(m_adl.getSize());
+ std::list<Adjacent> al = m_adl.getAdjList();
+ for (std::list<Adjacent>::iterator it = al.begin(); it != al.end(); it++)
+ {
+ adjLsaData += "|";
+ adjLsaData += (*it).getName();
+ adjLsaData += "|";
+ adjLsaData += boost::lexical_cast<std::string>((*it).getConnectingFace());
+ adjLsaData += "|";
+ adjLsaData += boost::lexical_cast<std::string>((*it).getLinkCost());
+ }
+ return adjLsaData + "|";
+}
+
+bool
+AdjLsa::initializeFromContent(string content)
+{
+ uint32_t numLink = 0;
+ Tokenizer nt(content, "|");
+ m_origRouter = nt.getNextToken();
+ if (m_origRouter.empty())
+ {
+ return false;
+ }
+ try
+ {
+ m_lsType = boost::lexical_cast<uint8_t>(nt.getNextToken());
+ m_lsSeqNo = boost::lexical_cast<uint32_t>(nt.getNextToken());
+ m_lifeTime = boost::lexical_cast<uint32_t>(nt.getNextToken());
+ numLink = boost::lexical_cast<uint32_t>(nt.getNextToken());
+ }
+ catch (std::exception& e)
+ {
+ return false;
+ }
+ for (uint32_t i = 0; i < numLink; i++)
+ {
+ try
+ {
+ string adjName = nt.getNextToken();
+ int connectingFace = boost::lexical_cast<int>(nt.getNextToken());
+ double linkCost = boost::lexical_cast<double>(nt.getNextToken());
+ Adjacent adjacent(adjName, connectingFace, linkCost, 0, 0);
+ addAdjacent(adjacent);
+ }
+ catch (std::exception& e)
+ {
+ return false;
+ }
+ }
+ return true;
+}
+
+
+void
+AdjLsa::addNptEntries(Nlsr& pnlsr)
+{
+ if (getOrigRouter() != pnlsr.getConfParameter().getRouterPrefix())
+ {
+ pnlsr.getNpt().addNpteByDestName(getOrigRouter(), getOrigRouter(), pnlsr);
+ }
+}
+
+
+void
+AdjLsa::removeNptEntries(Nlsr& pnlsr)
+{
+ if (getOrigRouter() != pnlsr.getConfParameter().getRouterPrefix())
+ {
+ pnlsr.getNpt().removeNpte(getOrigRouter(), getOrigRouter(), pnlsr);
+ }
+}
+
+
+
+std::ostream&
+operator<<(std::ostream& os, AdjLsa& aLsa)
+{
+ os << "Adj Lsa: " << endl;
+ os << " Origination Router: " << aLsa.getOrigRouter() << endl;
+ os << " Ls Type: " << (unsigned short)aLsa.getLsType() << endl;
+ os << " Ls Seq No: " << (unsigned int)aLsa.getLsSeqNo() << endl;
+ os << " Ls Lifetime: " << (unsigned int)aLsa.getLifeTime() << endl;
+ os << " No Link: " << (unsigned int)aLsa.getNoLink() << endl;
+ os << " Adjacents: " << endl;
+ int i = 1;
+ std::list<Adjacent> al = aLsa.getAdl().getAdjList();
+ for (std::list<Adjacent>::iterator it = al.begin(); it != al.end(); it++)
+ {
+ os << " Adjacent " << i << ": " << endl;
+ os << " Adjacent Name: " << (*it).getName() << endl;
+ os << " Connecting Face: " << (*it).getConnectingFace() << endl;
+ os << " Link Cost: " << (*it).getLinkCost() << endl;
+ }
+ return os;
+}
+
+}//namespace nlsr
diff --git a/src/lsa.hpp b/src/lsa.hpp
new file mode 100644
index 0000000..23ff395
--- /dev/null
+++ b/src/lsa.hpp
@@ -0,0 +1,266 @@
+#ifndef NLSR_LSA_HPP
+#define NLSR_LSA_HPP
+
+#include <ndn-cpp-dev/util/scheduler.hpp>
+#include "adjacent.hpp"
+#include "npl.hpp"
+#include "adl.hpp"
+
+namespace nlsr {
+class Lsa
+{
+public:
+ Lsa()
+ : m_origRouter()
+ , m_lsSeqNo()
+ , m_lifeTime()
+ , m_expiringEventId()
+ {
+ }
+
+
+ void
+ setLsType(uint8_t lst)
+ {
+ m_lsType = lst;
+ }
+
+ uint8_t
+ getLsType() const
+ {
+ return m_lsType;
+ }
+
+ void
+ setLsSeqNo(uint32_t lsn)
+ {
+ m_lsSeqNo = lsn;
+ }
+
+ uint32_t
+ getLsSeqNo() const
+ {
+ return m_lsSeqNo;
+ }
+
+ std::string
+ getOrigRouter() const
+ {
+ return m_origRouter;
+ }
+
+ void
+ setOrigRouter(const std::string& org)
+ {
+ m_origRouter = org;
+ }
+
+ uint32_t
+ getLifeTime() const
+ {
+ return m_lifeTime;
+ }
+
+ void
+ setLifeTime(uint32_t lt)
+ {
+ m_lifeTime = lt;
+ }
+
+ void
+ setExpiringEventId(const ndn::EventId leei)
+ {
+ m_expiringEventId = leei;
+ }
+
+ ndn::EventId
+ getExpiringEventId() const
+ {
+ return m_expiringEventId;
+ }
+
+protected:
+ std::string m_origRouter;
+ uint8_t m_lsType;
+ uint32_t m_lsSeqNo;
+ uint32_t m_lifeTime;
+ ndn::EventId m_expiringEventId;
+};
+
+class NameLsa: public Lsa
+{
+public:
+ NameLsa()
+ : Lsa()
+ , m_npl()
+ {
+ setLsType(1);
+ }
+
+ NameLsa(std::string origR, uint8_t lst, uint32_t lsn, uint32_t lt, Npl npl);
+
+ Npl&
+ getNpl()
+ {
+ return m_npl;
+ }
+
+ void
+ addName(std::string& name)
+ {
+ m_npl.insert(name);
+ }
+
+ void
+ removeName(std::string& name)
+ {
+ m_npl.remove(name);
+ }
+
+ std::string
+ getKey();
+
+ std::string
+ getData();
+
+ bool
+ initializeFromContent(std::string content);
+
+ void
+ writeLog();
+
+private:
+ Npl m_npl;
+
+};
+
+std::ostream&
+operator<<(std::ostream& os, NameLsa& nLsa);
+
+class AdjLsa: public Lsa
+{
+public:
+ AdjLsa()
+ : Lsa()
+ , m_adl()
+ {
+ setLsType(2);
+ }
+
+ AdjLsa(std::string origR, uint8_t lst, uint32_t lsn, uint32_t lt,
+ uint32_t nl , Adl padl);
+
+ Adl&
+ getAdl()
+ {
+ return m_adl;
+ }
+
+ void
+ addAdjacent(Adjacent adj)
+ {
+ m_adl.insert(adj);
+ }
+
+ std::string
+ getKey();
+
+ std::string
+ getData();
+
+ bool
+ initializeFromContent(std::string content);
+
+ uint32_t
+ getNoLink()
+ {
+ return m_noLink;
+ }
+
+ bool
+ isEqual(AdjLsa& alsa);
+
+ void
+ addNptEntries(Nlsr& pnlsr);
+
+ void
+ removeNptEntries(Nlsr& pnlsr);
+
+private:
+ uint32_t m_noLink;
+ Adl m_adl;
+};
+
+std::ostream&
+operator<<(std::ostream& os, AdjLsa& aLsa);
+
+class CorLsa: public Lsa
+{
+public:
+ CorLsa()
+ : Lsa()
+ , m_corRad(0)
+ , m_corTheta(0)
+ {
+ setLsType(3);
+ }
+
+ CorLsa(std::string origR, uint8_t lst, uint32_t lsn, uint32_t lt
+ , double r, double theta);
+
+ std::string
+ getKey();
+
+ std::string
+ getData();
+
+ bool
+ initializeFromContent(std::string content);
+
+ double
+ getCorRadius()
+ {
+ if (m_corRad >= 0)
+ {
+ return m_corRad;
+ }
+ else
+ {
+ return -1;
+ }
+ }
+
+ void
+ setCorRadius(double cr)
+ {
+ m_corRad = cr;
+ }
+
+ double
+ getCorTheta()
+ {
+ return m_corTheta;
+ }
+
+ void
+ setCorTheta(double ct)
+ {
+ m_corTheta = ct;
+ }
+
+ bool
+ isEqual(CorLsa& clsa);
+
+private:
+ double m_corRad;
+ double m_corTheta;
+
+};
+
+std::ostream&
+operator<<(std::ostream& os, CorLsa& cLsa);
+
+
+}//namespace nlsr
+
+#endif //NLSR_LSA_HPP
diff --git a/src/lsdb.cpp b/src/lsdb.cpp
new file mode 100644
index 0000000..de65646
--- /dev/null
+++ b/src/lsdb.cpp
@@ -0,0 +1,750 @@
+#include <string>
+#include <utility>
+#include "lsdb.hpp"
+#include "nlsr.hpp"
+
+namespace nlsr {
+
+using namespace std;
+
+void
+Lsdb::cancelScheduleLsaExpiringEvent(Nlsr& pnlsr, EventId eid)
+{
+ pnlsr.getScheduler().cancelEvent(eid);
+}
+
+static bool
+nameLsaCompareByKey(NameLsa& nlsa1, string& key)
+{
+ return nlsa1.getKey() == key;
+}
+
+
+bool
+Lsdb::buildAndInstallOwnNameLsa(Nlsr& pnlsr)
+{
+ NameLsa nameLsa(pnlsr.getConfParameter().getRouterPrefix()
+ , 1
+ , pnlsr.getSm().getNameLsaSeq() + 1
+ , pnlsr.getConfParameter().getRouterDeadInterval()
+ , pnlsr.getNpl());
+ pnlsr.getSm().setNameLsaSeq(pnlsr.getSm().getNameLsaSeq() + 1);
+ return installNameLsa(pnlsr, nameLsa);
+}
+
+std::pair<NameLsa&, bool>
+Lsdb::getNameLsa(string key)
+{
+ std::list<NameLsa>::iterator it = std::find_if(m_nameLsdb.begin(),
+ m_nameLsdb.end(),
+ bind(nameLsaCompareByKey, _1, key));
+ if (it != m_nameLsdb.end())
+ {
+ return std::make_pair(boost::ref((*it)), true);
+ }
+ NameLsa nlsa;
+ return std::make_pair(boost::ref(nlsa), false);
+}
+
+bool
+Lsdb::isNameLsaNew(string key, uint64_t seqNo)
+{
+ std::pair<NameLsa&, bool> nameLsaCheck = getNameLsa(key);
+ if (nameLsaCheck.second)
+ {
+ if (nameLsaCheck.first.getLsSeqNo() < seqNo)
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+ return true;
+}
+
+ndn::EventId
+Lsdb::scheduleNameLsaExpiration(Nlsr& pnlsr, string key, int seqNo, int expTime)
+{
+ return pnlsr.getScheduler().scheduleEvent(ndn::time::seconds(expTime),
+ ndn::bind(&Lsdb::exprireOrRefreshNameLsa,
+ this, boost::ref(pnlsr), key, seqNo));
+}
+
+bool
+Lsdb::installNameLsa(Nlsr& pnlsr, NameLsa& nlsa)
+{
+ int timeToExpire = m_lsaRefreshTime;
+ std::pair<NameLsa&, bool> chkNameLsa = getNameLsa(nlsa.getKey());
+ if (!chkNameLsa.second)
+ {
+ addNameLsa(nlsa);
+ nlsa.writeLog();
+ printNameLsdb();
+ if (nlsa.getOrigRouter() != pnlsr.getConfParameter().getRouterPrefix())
+ {
+ pnlsr.getNpt().addNpteByDestName(nlsa.getOrigRouter(), nlsa.getOrigRouter(),
+ pnlsr);
+ std::list<string> nameList = nlsa.getNpl().getNameList();
+ for (std::list<string>::iterator it = nameList.begin(); it != nameList.end();
+ it++)
+ {
+ if ((*it) != pnlsr.getConfParameter().getRouterPrefix())
+ {
+ pnlsr.getNpt().addNpteByDestName((*it), nlsa.getOrigRouter(), pnlsr);
+ }
+ }
+ }
+ if (nlsa.getOrigRouter() != pnlsr.getConfParameter().getRouterPrefix())
+ {
+ timeToExpire = nlsa.getLifeTime();
+ }
+ nlsa.setExpiringEventId(scheduleNameLsaExpiration(pnlsr,
+ nlsa.getKey(),
+ nlsa.getLsSeqNo(),
+ timeToExpire));
+ }
+ else
+ {
+ if (chkNameLsa.first.getLsSeqNo() < nlsa.getLsSeqNo())
+ {
+ chkNameLsa.first.writeLog();
+ chkNameLsa.first.setLsSeqNo(nlsa.getLsSeqNo());
+ chkNameLsa.first.setLifeTime(nlsa.getLifeTime());
+ chkNameLsa.first.getNpl().sort();
+ nlsa.getNpl().sort();
+ std::list<string> nameToAdd;
+ std::set_difference(nlsa.getNpl().getNameList().begin(),
+ nlsa.getNpl().getNameList().end(),
+ chkNameLsa.first.getNpl().getNameList().begin(),
+ chkNameLsa.first.getNpl().getNameList().end(),
+ std::inserter(nameToAdd, nameToAdd.begin()));
+ for (std::list<string>::iterator it = nameToAdd.begin(); it != nameToAdd.end();
+ ++it)
+ {
+ chkNameLsa.first.addName((*it));
+ if (nlsa.getOrigRouter() != pnlsr.getConfParameter().getRouterPrefix())
+ {
+ if ((*it) != pnlsr.getConfParameter().getRouterPrefix())
+ {
+ pnlsr.getNpt().addNpteByDestName((*it), nlsa.getOrigRouter(), pnlsr);
+ }
+ }
+ }
+ std::list<string> nameToRemove;
+ std::set_difference(chkNameLsa.first.getNpl().getNameList().begin(),
+ chkNameLsa.first.getNpl().getNameList().end(),
+ nlsa.getNpl().getNameList().begin(),
+ nlsa.getNpl().getNameList().end(),
+ std::inserter(nameToRemove, nameToRemove.begin()));
+ for (std::list<string>::iterator it = nameToRemove.begin();
+ it != nameToRemove.end(); ++it)
+ {
+ chkNameLsa.first.removeName((*it));
+ if (nlsa.getOrigRouter() != pnlsr.getConfParameter().getRouterPrefix())
+ {
+ if ((*it) != pnlsr.getConfParameter().getRouterPrefix())
+ {
+ pnlsr.getNpt().removeNpte((*it), nlsa.getOrigRouter(), pnlsr);
+ }
+ }
+ }
+ if (nlsa.getOrigRouter() != pnlsr.getConfParameter().getRouterPrefix())
+ {
+ timeToExpire = nlsa.getLifeTime();
+ }
+ cancelScheduleLsaExpiringEvent(pnlsr,
+ chkNameLsa.first.getExpiringEventId());
+ chkNameLsa.first.setExpiringEventId(scheduleNameLsaExpiration(pnlsr,
+ nlsa.getKey(),
+ nlsa.getLsSeqNo(),
+ timeToExpire));
+ chkNameLsa.first.writeLog();
+ }
+ }
+ return true;
+}
+
+bool
+Lsdb::addNameLsa(NameLsa& nlsa)
+{
+ std::list<NameLsa>::iterator it = std::find_if(m_nameLsdb.begin(),
+ m_nameLsdb.end(),
+ bind(nameLsaCompareByKey, _1,
+ nlsa.getKey()));
+ if (it == m_nameLsdb.end())
+ {
+ m_nameLsdb.push_back(nlsa);
+ return true;
+ }
+ return false;
+}
+
+bool
+Lsdb::removeNameLsa(Nlsr& pnlsr, string& key)
+{
+ std::list<NameLsa>::iterator it = std::find_if(m_nameLsdb.begin(),
+ m_nameLsdb.end(),
+ bind(nameLsaCompareByKey, _1, key));
+ if (it != m_nameLsdb.end())
+ {
+ (*it).writeLog();
+ if ((*it).getOrigRouter() != pnlsr.getConfParameter().getRouterPrefix())
+ {
+ pnlsr.getNpt().removeNpte((*it).getOrigRouter(), (*it).getOrigRouter(), pnlsr);
+ for (std::list<string>::iterator nit = (*it).getNpl().getNameList().begin();
+ nit != (*it).getNpl().getNameList().end(); ++nit)
+ {
+ if ((*nit) != pnlsr.getConfParameter().getRouterPrefix())
+ {
+ pnlsr.getNpt().removeNpte((*nit), (*it).getOrigRouter(), pnlsr);
+ }
+ }
+ }
+ m_nameLsdb.erase(it);
+ return true;
+ }
+ return false;
+}
+
+bool
+Lsdb::doesNameLsaExist(string key)
+{
+ std::list<NameLsa>::iterator it = std::find_if(m_nameLsdb.begin(),
+ m_nameLsdb.end(),
+ bind(nameLsaCompareByKey, _1, key));
+ if (it == m_nameLsdb.end())
+ {
+ return false;
+ }
+ return true;
+}
+
+void
+Lsdb::printNameLsdb()
+{
+ cout << "---------------Name LSDB-------------------" << endl;
+ for (std::list<NameLsa>::iterator it = m_nameLsdb.begin();
+ it != m_nameLsdb.end() ; it++)
+ {
+ cout << (*it) << endl;
+ }
+}
+
+// Cor LSA and LSDB related Functions start here
+
+
+static bool
+corLsaCompareByKey(CorLsa& clsa, string& key)
+{
+ return clsa.getKey() == key;
+}
+
+bool
+Lsdb::buildAndInstallOwnCorLsa(Nlsr& pnlsr)
+{
+ CorLsa corLsa(pnlsr.getConfParameter().getRouterPrefix()
+ , 3
+ , pnlsr.getSm().getCorLsaSeq() + 1
+ , pnlsr.getConfParameter().getRouterDeadInterval()
+ , pnlsr.getConfParameter().getCorR()
+ , pnlsr.getConfParameter().getCorTheta());
+ pnlsr.getSm().setCorLsaSeq(pnlsr.getSm().getCorLsaSeq() + 1);
+ installCorLsa(pnlsr, corLsa);
+ return true;
+}
+
+std::pair<CorLsa&, bool>
+Lsdb::getCorLsa(string key)
+{
+ std::list<CorLsa>::iterator it = std::find_if(m_corLsdb.begin(),
+ m_corLsdb.end(),
+ bind(corLsaCompareByKey, _1, key));
+ if (it != m_corLsdb.end())
+ {
+ return std::make_pair(boost::ref((*it)), true);
+ }
+ CorLsa clsa;
+ return std::make_pair(boost::ref(clsa), false);
+}
+
+bool
+Lsdb::isCorLsaNew(string key, uint64_t seqNo)
+{
+ std::pair<CorLsa&, bool> corLsaCheck = getCorLsa(key);
+ if (corLsaCheck.second)
+ {
+ if (corLsaCheck.first.getLsSeqNo() < seqNo)
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+ return true;
+}
+
+ndn::EventId
+Lsdb::scheduleCorLsaExpiration(Nlsr& pnlsr, string key, int seqNo, int expTime)
+{
+ return pnlsr.getScheduler().scheduleEvent(ndn::time::seconds(expTime),
+ ndn::bind(&Lsdb::exprireOrRefreshCorLsa,
+ this, boost::ref(pnlsr),
+ key, seqNo));
+}
+
+bool
+Lsdb::installCorLsa(Nlsr& pnlsr, CorLsa& clsa)
+{
+ int timeToExpire = m_lsaRefreshTime;
+ std::pair<CorLsa&, bool> chkCorLsa = getCorLsa(clsa.getKey());
+ if (!chkCorLsa.second)
+ {
+ addCorLsa(clsa);
+ printCorLsdb(); //debugging purpose
+ if (clsa.getOrigRouter() != pnlsr.getConfParameter().getRouterPrefix())
+ {
+ pnlsr.getNpt().addNpteByDestName(clsa.getOrigRouter(), clsa.getOrigRouter(),
+ pnlsr);
+ }
+ if (pnlsr.getConfParameter().getIsHyperbolicCalc() >= 1)
+ {
+ pnlsr.getRoutingTable().scheduleRoutingTableCalculation(pnlsr);
+ }
+ if (clsa.getOrigRouter() != pnlsr.getConfParameter().getRouterPrefix())
+ {
+ timeToExpire = clsa.getLifeTime();
+ }
+ scheduleCorLsaExpiration(pnlsr, clsa.getKey(),
+ clsa.getLsSeqNo(), timeToExpire);
+ }
+ else
+ {
+ if (chkCorLsa.first.getLsSeqNo() < clsa.getLsSeqNo())
+ {
+ chkCorLsa.first.setLsSeqNo(clsa.getLsSeqNo());
+ chkCorLsa.first.setLifeTime(clsa.getLifeTime());
+ if (!chkCorLsa.first.isEqual(clsa))
+ {
+ chkCorLsa.first.setCorRadius(clsa.getCorRadius());
+ chkCorLsa.first.setCorTheta(clsa.getCorTheta());
+ if (pnlsr.getConfParameter().getIsHyperbolicCalc() >= 1)
+ {
+ pnlsr.getRoutingTable().scheduleRoutingTableCalculation(pnlsr);
+ }
+ }
+ if (clsa.getOrigRouter() != pnlsr.getConfParameter().getRouterPrefix())
+ {
+ timeToExpire = clsa.getLifeTime();
+ }
+ cancelScheduleLsaExpiringEvent(pnlsr,
+ chkCorLsa.first.getExpiringEventId());
+ chkCorLsa.first.setExpiringEventId(scheduleCorLsaExpiration(pnlsr,
+ clsa.getKey(),
+ clsa.getLsSeqNo(),
+ timeToExpire));
+ }
+ }
+ return true;
+}
+
+bool
+Lsdb::addCorLsa(CorLsa& clsa)
+{
+ std::list<CorLsa>::iterator it = std::find_if(m_corLsdb.begin(),
+ m_corLsdb.end(),
+ bind(corLsaCompareByKey, _1,
+ clsa.getKey()));
+ if (it == m_corLsdb.end())
+ {
+ m_corLsdb.push_back(clsa);
+ return true;
+ }
+ return false;
+}
+
+bool
+Lsdb::removeCorLsa(Nlsr& pnlsr, string& key)
+{
+ std::list<CorLsa>::iterator it = std::find_if(m_corLsdb.begin(),
+ m_corLsdb.end(),
+ bind(corLsaCompareByKey, _1, key));
+ if (it != m_corLsdb.end())
+ {
+ if ((*it).getOrigRouter() != pnlsr.getConfParameter().getRouterPrefix())
+ {
+ pnlsr.getNpt().removeNpte((*it).getOrigRouter(), (*it).getOrigRouter(), pnlsr);
+ }
+ m_corLsdb.erase(it);
+ return true;
+ }
+ return false;
+}
+
+bool
+Lsdb::doesCorLsaExist(string key)
+{
+ std::list<CorLsa>::iterator it = std::find_if(m_corLsdb.begin(),
+ m_corLsdb.end(),
+ bind(corLsaCompareByKey, _1, key));
+ if (it == m_corLsdb.end())
+ {
+ return false;
+ }
+ return true;
+}
+
+void
+Lsdb::printCorLsdb() //debugging
+{
+ cout << "---------------Cor LSDB-------------------" << endl;
+ for (std::list<CorLsa>::iterator it = m_corLsdb.begin();
+ it != m_corLsdb.end() ; it++)
+ {
+ cout << (*it) << endl;
+ }
+}
+
+
+// Adj LSA and LSDB related function starts here
+
+static bool
+adjLsaCompareByKey(AdjLsa& alsa, string& key)
+{
+ return alsa.getKey() == key;
+}
+
+
+void
+Lsdb::scheduledAdjLsaBuild(Nlsr& pnlsr)
+{
+ cout << "scheduledAdjLsaBuild Called" << endl;
+ pnlsr.setIsBuildAdjLsaSheduled(0);
+ if (pnlsr.getAdl().isAdjLsaBuildable(pnlsr))
+ {
+ int adjBuildCount = pnlsr.getAdjBuildCount();
+ if (adjBuildCount > 0)
+ {
+ if (pnlsr.getAdl().getNumOfActiveNeighbor() > 0)
+ {
+ buildAndInstallOwnAdjLsa(pnlsr);
+ }
+ else
+ {
+ string key = pnlsr.getConfParameter().getRouterPrefix() + "/2";
+ removeAdjLsa(pnlsr, key);
+ pnlsr.getRoutingTable().scheduleRoutingTableCalculation(pnlsr);
+ }
+ pnlsr.setAdjBuildCount(pnlsr.getAdjBuildCount() - adjBuildCount);
+ }
+ }
+ else
+ {
+ pnlsr.setIsBuildAdjLsaSheduled(1);
+ int schedulingTime = pnlsr.getConfParameter().getInterestRetryNumber() *
+ pnlsr.getConfParameter().getInterestResendTime();
+ pnlsr.getScheduler().scheduleEvent(ndn::time::seconds(schedulingTime),
+ ndn::bind(&Lsdb::scheduledAdjLsaBuild,
+ pnlsr.getLsdb(), boost::ref(pnlsr)));
+ }
+}
+
+
+bool
+Lsdb::addAdjLsa(AdjLsa& alsa)
+{
+ std::list<AdjLsa>::iterator it = std::find_if(m_adjLsdb.begin(),
+ m_adjLsdb.end(),
+ bind(adjLsaCompareByKey, _1,
+ alsa.getKey()));
+ if (it == m_adjLsdb.end())
+ {
+ m_adjLsdb.push_back(alsa);
+ return true;
+ }
+ return false;
+}
+
+std::pair<AdjLsa&, bool>
+Lsdb::getAdjLsa(string key)
+{
+ std::list<AdjLsa>::iterator it = std::find_if(m_adjLsdb.begin(),
+ m_adjLsdb.end(),
+ bind(adjLsaCompareByKey, _1, key));
+ if (it != m_adjLsdb.end())
+ {
+ return std::make_pair(boost::ref((*it)), true);
+ }
+ AdjLsa alsa;
+ return std::make_pair(boost::ref(alsa), false);
+}
+
+
+bool
+Lsdb::isAdjLsaNew(string key, uint64_t seqNo)
+{
+ std::pair<AdjLsa&, bool> adjLsaCheck = getAdjLsa(key);
+ if (adjLsaCheck.second)
+ {
+ if (adjLsaCheck.first.getLsSeqNo() < seqNo)
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+ return true;
+}
+
+
+ndn::EventId
+Lsdb::scheduleAdjLsaExpiration(Nlsr& pnlsr, string key, int seqNo, int expTime)
+{
+ return pnlsr.getScheduler().scheduleEvent(ndn::time::seconds(expTime),
+ ndn::bind(&Lsdb::exprireOrRefreshAdjLsa,
+ this, boost::ref(pnlsr),
+ key, seqNo));
+}
+
+bool
+Lsdb::installAdjLsa(Nlsr& pnlsr, AdjLsa& alsa)
+{
+ int timeToExpire = m_lsaRefreshTime;
+ std::pair<AdjLsa&, bool> chkAdjLsa = getAdjLsa(alsa.getKey());
+ if (!chkAdjLsa.second)
+ {
+ addAdjLsa(alsa);
+ alsa.addNptEntries(pnlsr);
+ pnlsr.getRoutingTable().scheduleRoutingTableCalculation(pnlsr);
+ if (alsa.getOrigRouter() != pnlsr.getConfParameter().getRouterPrefix())
+ {
+ timeToExpire = alsa.getLifeTime();
+ }
+ scheduleAdjLsaExpiration(pnlsr, alsa.getKey(),
+ alsa.getLsSeqNo(), timeToExpire);
+ }
+ else
+ {
+ if (chkAdjLsa.first.getLsSeqNo() < alsa.getLsSeqNo())
+ {
+ chkAdjLsa.first.setLsSeqNo(alsa.getLsSeqNo());
+ chkAdjLsa.first.setLifeTime(alsa.getLifeTime());
+ if (!chkAdjLsa.first.isEqual(alsa))
+ {
+ chkAdjLsa.first.getAdl().reset();
+ chkAdjLsa.first.getAdl().addAdjacentsFromAdl(alsa.getAdl());
+ pnlsr.getRoutingTable().scheduleRoutingTableCalculation(pnlsr);
+ }
+ if (alsa.getOrigRouter() != pnlsr.getConfParameter().getRouterPrefix())
+ {
+ timeToExpire = alsa.getLifeTime();
+ }
+ cancelScheduleLsaExpiringEvent(pnlsr,
+ chkAdjLsa.first.getExpiringEventId());
+ chkAdjLsa.first.setExpiringEventId(scheduleAdjLsaExpiration(pnlsr,
+ alsa.getKey(),
+ alsa.getLsSeqNo(),
+ timeToExpire));
+ }
+ }
+ return true;
+}
+
+bool
+Lsdb::buildAndInstallOwnAdjLsa(Nlsr& pnlsr)
+{
+ AdjLsa adjLsa(pnlsr.getConfParameter().getRouterPrefix()
+ , 2
+ , pnlsr.getSm().getAdjLsaSeq() + 1
+ , pnlsr.getConfParameter().getRouterDeadInterval()
+ , pnlsr.getAdl().getNumOfActiveNeighbor()
+ , pnlsr.getAdl());
+ pnlsr.getSm().setAdjLsaSeq(pnlsr.getSm().getAdjLsaSeq() + 1);
+ string lsaPrefix = pnlsr.getConfParameter().getChronosyncLsaPrefix()
+ + pnlsr.getConfParameter().getRouterPrefix();
+ pnlsr.getSlh().publishRoutingUpdate(pnlsr.getSm(), lsaPrefix);
+ return pnlsr.getLsdb().installAdjLsa(pnlsr, adjLsa);
+}
+
+bool
+Lsdb::removeAdjLsa(Nlsr& pnlsr, string& key)
+{
+ std::list<AdjLsa>::iterator it = std::find_if(m_adjLsdb.begin(),
+ m_adjLsdb.end(),
+ bind(adjLsaCompareByKey, _1, key));
+ if (it != m_adjLsdb.end())
+ {
+ (*it).removeNptEntries(pnlsr);
+ m_adjLsdb.erase(it);
+ return true;
+ }
+ return false;
+}
+
+bool
+Lsdb::doesAdjLsaExist(string key)
+{
+ std::list<AdjLsa>::iterator it = std::find_if(m_adjLsdb.begin(),
+ m_adjLsdb.end(),
+ bind(adjLsaCompareByKey, _1, key));
+ if (it == m_adjLsdb.end())
+ {
+ return false;
+ }
+ return true;
+}
+
+std::list<AdjLsa>&
+Lsdb::getAdjLsdb()
+{
+ return m_adjLsdb;
+}
+
+void
+Lsdb::setLsaRefreshTime(int lrt)
+{
+ m_lsaRefreshTime = lrt;
+}
+
+void
+Lsdb::setThisRouterPrefix(string trp)
+{
+ m_thisRouterPrefix = trp;
+}
+
+void
+Lsdb::exprireOrRefreshNameLsa(Nlsr& pnlsr, string lsaKey, uint64_t seqNo)
+{
+ cout << "Lsdb::exprireOrRefreshNameLsa Called " << endl;
+ cout << "LSA Key : " << lsaKey << " Seq No: " << seqNo << endl;
+ std::pair<NameLsa&, bool> chkNameLsa = getNameLsa(lsaKey);
+ if (chkNameLsa.second)
+ {
+ cout << " LSA Exists with seq no: " << chkNameLsa.first.getLsSeqNo() << endl;
+ if (chkNameLsa.first.getLsSeqNo() == seqNo)
+ {
+ if (chkNameLsa.first.getOrigRouter() == m_thisRouterPrefix)
+ {
+ chkNameLsa.first.writeLog();
+ cout << "Own Name LSA, so refreshing name LSA" << endl;
+ chkNameLsa.first.setLsSeqNo(chkNameLsa.first.getLsSeqNo() + 1);
+ pnlsr.getSm().setNameLsaSeq(chkNameLsa.first.getLsSeqNo());
+ chkNameLsa.first.writeLog();
+ // publish routing update
+ string lsaPrefix = pnlsr.getConfParameter().getChronosyncLsaPrefix()
+ + pnlsr.getConfParameter().getRouterPrefix();
+ pnlsr.getSlh().publishRoutingUpdate(pnlsr.getSm(), lsaPrefix);
+ }
+ else
+ {
+ cout << "Other's Name LSA, so removing form LSDB" << endl;
+ removeNameLsa(pnlsr, lsaKey);
+ }
+ }
+ }
+}
+
+void
+Lsdb::exprireOrRefreshAdjLsa(Nlsr& pnlsr, string lsaKey, uint64_t seqNo)
+{
+ cout << "Lsdb::exprireOrRefreshAdjLsa Called " << endl;
+ cout << "LSA Key : " << lsaKey << " Seq No: " << seqNo << endl;
+ std::pair<AdjLsa&, bool> chkAdjLsa = getAdjLsa(lsaKey);
+ if (chkAdjLsa.second)
+ {
+ cout << " LSA Exists with seq no: " << chkAdjLsa.first.getLsSeqNo() << endl;
+ if (chkAdjLsa.first.getLsSeqNo() == seqNo)
+ {
+ if (chkAdjLsa.first.getOrigRouter() == m_thisRouterPrefix)
+ {
+ cout << "Own Adj LSA, so refreshing Adj LSA" << endl;
+ chkAdjLsa.first.setLsSeqNo(chkAdjLsa.first.getLsSeqNo() + 1);
+ pnlsr.getSm().setAdjLsaSeq(chkAdjLsa.first.getLsSeqNo());
+ // publish routing update
+ string lsaPrefix = pnlsr.getConfParameter().getChronosyncLsaPrefix()
+ + pnlsr.getConfParameter().getRouterPrefix();
+ pnlsr.getSlh().publishRoutingUpdate(pnlsr.getSm(), lsaPrefix);
+ }
+ else
+ {
+ cout << "Other's Adj LSA, so removing form LSDB" << endl;
+ removeAdjLsa(pnlsr, lsaKey);
+ }
+ // schedule Routing table calculaiton
+ pnlsr.getRoutingTable().scheduleRoutingTableCalculation(pnlsr);
+ }
+ }
+}
+
+void
+Lsdb::exprireOrRefreshCorLsa(Nlsr& pnlsr, string lsaKey, uint64_t seqNo)
+{
+ cout << "Lsdb::exprireOrRefreshCorLsa Called " << endl;
+ cout << "LSA Key : " << lsaKey << " Seq No: " << seqNo << endl;
+ std::pair<CorLsa&, bool> chkCorLsa = getCorLsa(lsaKey);
+ if (chkCorLsa.second)
+ {
+ cout << " LSA Exists with seq no: " << chkCorLsa.first.getLsSeqNo() << endl;
+ if (chkCorLsa.first.getLsSeqNo() == seqNo)
+ {
+ if (chkCorLsa.first.getOrigRouter() == m_thisRouterPrefix)
+ {
+ cout << "Own Cor LSA, so refreshing Cor LSA" << endl;
+ chkCorLsa.first.setLsSeqNo(chkCorLsa.first.getLsSeqNo() + 1);
+ pnlsr.getSm().setCorLsaSeq(chkCorLsa.first.getLsSeqNo());
+ // publish routing update
+ string lsaPrefix = pnlsr.getConfParameter().getChronosyncLsaPrefix()
+ + pnlsr.getConfParameter().getRouterPrefix();
+ pnlsr.getSlh().publishRoutingUpdate(pnlsr.getSm(), lsaPrefix);
+ }
+ else
+ {
+ cout << "Other's Cor LSA, so removing form LSDB" << endl;
+ removeCorLsa(pnlsr, lsaKey);
+ }
+ if (pnlsr.getConfParameter().getIsHyperbolicCalc() >= 1)
+ {
+ pnlsr.getRoutingTable().scheduleRoutingTableCalculation(pnlsr);
+ }
+ }
+ }
+}
+
+
+void
+Lsdb::printAdjLsdb()
+{
+ cout << "---------------Adj LSDB-------------------" << endl;
+ for (std::list<AdjLsa>::iterator it = m_adjLsdb.begin();
+ it != m_adjLsdb.end() ; it++)
+ {
+ cout << (*it) << endl;
+ }
+}
+
+//-----utility function -----
+bool
+Lsdb::doesLsaExist(string key, int lsType)
+{
+ if (lsType == 1)
+ {
+ return doesNameLsaExist(key);
+ }
+ else if (lsType == 2)
+ {
+ return doesAdjLsaExist(key);
+ }
+ else if (lsType == 3)
+ {
+ return doesCorLsaExist(key);
+ }
+ return false;
+}
+
+}//namespace nlsr
+
diff --git a/src/lsdb.hpp b/src/lsdb.hpp
new file mode 100644
index 0000000..96f0ff1
--- /dev/null
+++ b/src/lsdb.hpp
@@ -0,0 +1,145 @@
+#ifndef NLSR_LSDB_HPP
+#define NLSR_LSDB_HPP
+
+#include <utility>
+#include "lsa.hpp"
+
+namespace nlsr {
+class Nlsr;
+
+class Lsdb
+{
+public:
+ Lsdb()
+ : m_lsaRefreshTime(0)
+ {
+ }
+
+
+ bool
+ doesLsaExist(std::string key, int lsType);
+ // function related to Name LSDB
+
+ bool
+ buildAndInstallOwnNameLsa(Nlsr& pnlsr);
+
+ std::pair<NameLsa&, bool>
+ getNameLsa(std::string key);
+
+ bool
+ installNameLsa(Nlsr& pnlsr, NameLsa& nlsa);
+
+ bool
+ removeNameLsa(Nlsr& pnlsr, std::string& key);
+
+ bool
+ isNameLsaNew(std::string key, uint64_t seqNo);
+
+ void
+ printNameLsdb(); //debugging
+
+ //function related to Cor LSDB
+ bool
+ buildAndInstallOwnCorLsa(Nlsr& pnlsr);
+
+ std::pair<CorLsa&, bool>
+ getCorLsa(std::string key);
+
+ bool
+ installCorLsa(Nlsr& pnlsr, CorLsa& clsa);
+
+ bool
+ removeCorLsa(Nlsr& pnlsr, std::string& key);
+
+ bool
+ isCorLsaNew(std::string key, uint64_t seqNo);
+
+ void
+ printCorLsdb(); //debugging
+
+ //function related to Adj LSDB
+ void
+ scheduledAdjLsaBuild(Nlsr& pnlsr);
+
+ bool
+ buildAndInstallOwnAdjLsa(Nlsr& pnlsr);
+
+ bool
+ removeAdjLsa(Nlsr& pnlsr, std::string& key);
+
+ bool
+ isAdjLsaNew(std::string key, uint64_t seqNo);
+ bool
+ installAdjLsa(Nlsr& pnlsr, AdjLsa& alsa);
+
+ std::pair<AdjLsa&, bool>
+ getAdjLsa(std::string key);
+
+ std::list<AdjLsa>&
+ getAdjLsdb();
+
+ void
+ printAdjLsdb();
+
+ //void scheduleRefreshLsdb(Nlsr& pnlsr, int interval);
+ void
+ setLsaRefreshTime(int lrt);
+
+ void
+ setThisRouterPrefix(std::string trp);
+
+private:
+ bool
+ addNameLsa(NameLsa& nlsa);
+
+ bool
+ doesNameLsaExist(std::string key);
+
+
+ bool
+ addCorLsa(CorLsa& clsa);
+
+ bool
+ doesCorLsaExist(std::string key);
+
+ bool
+ addAdjLsa(AdjLsa& alsa);
+
+ bool
+ doesAdjLsaExist(std::string key);
+
+ ndn::EventId
+ scheduleNameLsaExpiration(Nlsr& pnlsr, std::string key, int seqNo, int expTime);
+
+ void
+ exprireOrRefreshNameLsa(Nlsr& pnlsr, std::string lsaKey, uint64_t seqNo);
+
+ ndn::EventId
+ scheduleAdjLsaExpiration(Nlsr& pnlsr, std::string key, int seqNo, int expTime);
+
+ void
+ exprireOrRefreshAdjLsa(Nlsr& pnlsr, std::string lsaKey, uint64_t seqNo);
+
+ ndn::EventId
+ scheduleCorLsaExpiration(Nlsr& pnlsr, std::string key, int seqNo, int expTime);
+
+ void
+ exprireOrRefreshCorLsa(Nlsr& pnlsr, std::string lsaKey, uint64_t seqNo);
+
+
+private:
+ void
+ cancelScheduleLsaExpiringEvent(Nlsr& pnlsr, ndn::EventId eid);
+
+ std::list<NameLsa> m_nameLsdb;
+ std::list<AdjLsa> m_adjLsdb;
+ std::list<CorLsa> m_corLsdb;
+
+ int m_lsaRefreshTime;
+ std::string m_thisRouterPrefix;
+
+};
+
+}//namespace nlsr
+
+#endif //NLSR_LSDB_HPP
diff --git a/src/main.cpp b/src/main.cpp
index 6556816..20c132e 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -19,14 +19,13 @@
**/
#include "nlsr.hpp"
-#include "nlsr_conf_processor.hpp"
+#include "conf-file-processor.hpp"
using namespace nlsr;
int
-main(int argc, char **argv)
+main(int argc, char** argv)
{
- src::logger lg;
nlsr::Nlsr nlsr_;
string programName(argv[0]);
nlsr_.setConfFileName("nlsr.conf");
@@ -42,24 +41,26 @@
nlsr_.setIsDaemonProcess(optarg);
break;
case 'p':
- {
- stringstream sst(optarg);
- int ap;
- sst>>ap;
- nlsr_.setApiPort(ap);
- }
- break;
+ {
+ stringstream sst(optarg);
+ int ap;
+ sst >> ap;
+ nlsr_.setApiPort(ap);
+ }
+ break;
case 'h':
+
default:
nlsr_.usage(programName);
return EXIT_FAILURE;
}
}
ConfFileProcessor cfp(nlsr_.getConfFileName());
- int res=cfp.processConfFile(nlsr_);
- if ( res < 0 )
+ int res = cfp.processConfFile(nlsr_);
+ if (res < 0)
{
- std::cerr<<"Error in configuration file processing! Exiting from NLSR"<<std::endl;
+ std::cerr << "Error in configuration file processing! Exiting from NLSR" <<
+ std::endl;
return EXIT_FAILURE;
}
nlsr_.initialize();
@@ -67,7 +68,7 @@
{
nlsr_.startEventLoop();
}
- catch(std::exception &e)
+ catch (std::exception& e)
{
std::cerr << "ERROR: " << e.what() << std::endl;
}
diff --git a/src/nlsr.cpp b/src/nlsr.cpp
index 726c53a..00bd510 100644
--- a/src/nlsr.cpp
+++ b/src/nlsr.cpp
@@ -9,88 +9,77 @@
#include "nlsr.hpp"
-#include "nlsr_conf_processor.hpp"
-#include "utility/nlsr_logger.hpp"
-#include "security/nlsr_km.hpp"
-#include "security/nlsr_cert_store.hpp"
-#include "security/nlsr_cse.hpp"
-#define THIS_FILE "nlsr.cpp"
-namespace nlsr
+namespace nlsr {
+
+using namespace ndn;
+using namespace std;
+
+void
+Nlsr::registrationFailed(const ndn::Name& name)
{
+ cerr << "ERROR: Failed to register prefix in local hub's daemon" << endl;
+ getNlsrFace()->shutdown();
+}
- using namespace ndn;
- using namespace std;
- void
- Nlsr::nlsrRegistrationFailed(const ndn::Name& name)
+void
+Nlsr::setInterestFilterNlsr(const string& name)
+{
+ getNlsrFace()->setInterestFilter(name,
+ func_lib::bind(&InterestManager::processInterest, &m_im,
+ boost::ref(*this), _1, _2),
+ func_lib::bind(&Nlsr::registrationFailed, this, _1));
+}
+
+void
+Nlsr::initialize()
+{
+ m_confParam.buildRouterPrefix();
+ m_nlsrLsdb.setLsaRefreshTime(m_confParam.getLsaRefreshTime());
+ m_nlsrLsdb.setThisRouterPrefix(m_confParam.getRouterPrefix());
+ m_fib.setEntryRefreshTime(2 * m_confParam.getLsaRefreshTime());
+ if (!m_km.initialize(m_confParam))
{
- cerr << "ERROR: Failed to register prefix in local hub's daemon" << endl;
- getNlsrFace()->shutdown();
+ std::cerr << "Can not initiate/load certificate" << endl;
}
+ m_sm.setSeqFileName(m_confParam.getSeqFileDir());
+ m_sm.initiateSeqNoFromFile();
+ /* debugging purpose start */
+ cout << m_confParam;
+ m_adl.printAdl();
+ m_npl.print();
+ /* debugging purpose end */
+ m_nlsrLsdb.buildAndInstallOwnNameLsa(boost::ref(*this));
+ m_nlsrLsdb.buildAndInstallOwnCorLsa(boost::ref(*this));
+ setInterestFilterNlsr(m_confParam.getRouterPrefix());
+ setInterestFilterNlsr(m_confParam.getChronosyncLsaPrefix() +
+ m_confParam.getRouterPrefix());
+ setInterestFilterNlsr(m_confParam.getRootKeyPrefix());
+ m_slh.setSyncPrefix(m_confParam.getChronosyncSyncPrefix());
+ m_slh.createSyncSocket(boost::ref(*this));
+ m_slh.publishKeyUpdate(m_km);
+ m_im.scheduleInfoInterest(boost::ref(*this), 10);
+}
+void
+Nlsr::startEventLoop()
+{
+ m_io->run();
+}
- void
- Nlsr::setInterestFilterNlsr(const string& name)
- {
- getNlsrFace()->setInterestFilter(name,
- func_lib::bind(&InterestManager::processInterest, &m_im,
- boost::ref(*this), _1, _2),
- func_lib::bind(&Nlsr::nlsrRegistrationFailed, this, _1));
- }
-
- void
- Nlsr::initialize()
- {
- src::logger lg;
- m_confParam.buildRouterPrefix();
- m_nlsrLogger.initNlsrLogger(m_confParam.getLogDir());
- m_nlsrLsdb.setLsaRefreshTime(m_confParam.getLsaRefreshTime());
- m_nlsrLsdb.setThisRouterPrefix(m_confParam.getRouterPrefix());
- m_fib.setEntryRefreshTime(2*m_confParam.getLsaRefreshTime());
- if( ! m_km.initialize(m_confParam) )
- {
- std::cerr<<"Can not initiate/load certificate"<<endl;
- BOOST_LOG(lg)<<" "<<THIS_FILE<<" "<<__LINE__<<": "<<"Certificate initiation"
- <<" error";
- }
- m_sm.setSeqFileName(m_confParam.getSeqFileDir());
- m_sm.initiateSeqNoFromFile();
- /* debugging purpose start */
- cout << m_confParam;
- m_adl.printAdl();
- m_npl.print();
- /* debugging purpose end */
- m_nlsrLsdb.buildAndInstallOwnNameLsa(boost::ref(*this));
- m_nlsrLsdb.buildAndInstallOwnCorLsa(boost::ref(*this));
- setInterestFilterNlsr(m_confParam.getRouterPrefix());
- setInterestFilterNlsr(m_confParam.getChronosyncLsaPrefix()+
- m_confParam.getRouterPrefix());
- setInterestFilterNlsr(m_confParam.getRootKeyPrefix());
- m_slh.setSyncPrefix(m_confParam.getChronosyncSyncPrefix());
- m_slh.createSyncSocket(boost::ref(*this));
- m_slh.publishKeyUpdate(m_km);
- m_im.scheduleInfoInterest(boost::ref(*this),10);
- }
-
- void
- Nlsr::startEventLoop()
- {
- m_io->run();
- }
-
- int
- Nlsr::usage(const string& progname)
- {
- cout << "Usage: " << progname << " [OPTIONS...]"<<endl;
- cout << " NDN routing...." << endl;
- cout << " -d, --daemon Run in daemon mode" << endl;
- cout << " -f, --config_file Specify configuration file name" <<endl;
- cout << " -p, --api_port port where api client will connect" <<endl;
- cout << " -h, --help Display this help message" << endl;
- exit(EXIT_FAILURE);
- }
+int
+Nlsr::usage(const string& progname)
+{
+ cout << "Usage: " << progname << " [OPTIONS...]" << endl;
+ cout << " NDN routing...." << endl;
+ cout << " -d, --daemon Run in daemon mode" << endl;
+ cout << " -f, --config_file Specify configuration file name" << endl;
+ cout << " -p, --api_port port where api client will connect" << endl;
+ cout << " -h, --help Display this help message" << endl;
+ exit(EXIT_FAILURE);
+}
} // namespace nlsr
diff --git a/src/nlsr.hpp b/src/nlsr.hpp
index 40a7de0..bef8189 100644
--- a/src/nlsr.hpp
+++ b/src/nlsr.hpp
@@ -5,258 +5,286 @@
#include <ndn-cpp-dev/security/key-chain.hpp>
#include <ndn-cpp-dev/util/scheduler.hpp>
-#include "nlsr_conf_param.hpp"
-#include "nlsr_adl.hpp"
-#include "nlsr_npl.hpp"
-#include "communication/nlsr_im.hpp"
-#include "communication/nlsr_dm.hpp"
-#include "nlsr_lsdb.hpp"
-#include "nlsr_sm.hpp"
-#include "route/nlsr_rt.hpp"
-#include "route/nlsr_npt.hpp"
-#include "route/nlsr_fib.hpp"
-#include "utility/nlsr_logger.hpp"
-#include "security/nlsr_km.hpp"
-#include "communication/nlsr_slh.hpp"
+#include "conf-parameter.hpp"
+#include "adl.hpp"
+#include "npl.hpp"
+#include "communication/interest-manager.hpp"
+#include "communication/data-manager.hpp"
+#include "lsdb.hpp"
+#include "sequencing-manager.hpp"
+#include "route/routing-table.hpp"
+#include "route/npt.hpp"
+#include "route/fib.hpp"
+#include "security/key-manager.hpp"
+#include "communication/sync-logic-handler.hpp"
-namespace nlsr
+namespace nlsr {
+
+inline static void
+NullDeleter(boost::asio::io_service* variable)
{
+ // do nothing
+}
- using namespace ndn;
- using namespace std;
+class Nlsr
+{
+public:
+ Nlsr()
+ : m_io(new boost::asio::io_service)
+ , m_nlsrFace(new Face(ndn::shared_ptr<boost::asio::io_service>(&*m_io,
+ &NullDeleter)))
+ , m_scheduler(*m_io)
+ , m_confParam()
+ , m_adl()
+ , m_npl()
+ , m_im()
+ , m_dm()
+ , m_sm()
+ , m_km()
+ , m_isDaemonProcess(false)
+ , m_configFileName("nlsr.conf")
+ , m_nlsrLsdb()
+ , m_adjBuildCount(0)
+ , m_isBuildAdjLsaSheduled(false)
+ , m_isRouteCalculationScheduled(false)
+ , m_isRoutingTableCalculating(false)
+ , m_routingTable()
+ , m_npt()
+ , m_fib()
+ , m_slh(m_io)
+ {}
- inline static void
- NullDeleter(boost::asio::io_service* variable)
+ void
+ registrationFailed(const ndn::Name& name);
+
+ void
+ setInterestFilterNlsr(const string& name);
+
+ void
+ startEventLoop();
+
+ int
+ usage(const string& progname);
+
+ std::string
+ getConfFileName()
{
- // do nothing
+ return m_configFileName;
}
- class Nlsr
+ void
+ setConfFileName(const string& fileName)
{
- public:
- Nlsr()
- : m_io(new boost::asio::io_service)
- , m_nlsrFace(new Face(shared_ptr<boost::asio::io_service>(&*m_io, &NullDeleter)))
- , m_scheduler(*m_io)
- , m_confParam()
- , m_adl()
- , m_npl()
- , m_im()
- , m_dm()
- , m_sm()
- , m_km()
- , isDaemonProcess(false)
- , m_configFileName("nlsr.conf")
- , m_nlsrLsdb()
- , m_adjBuildCount(0)
- , isBuildAdjLsaSheduled(0)
- , isRouteCalculationScheduled(0)
- , isRoutingTableCalculating(0)
- , m_routingTable()
- , m_npt()
- , m_fib()
- , m_slh(m_io)
- , m_nlsrLogger()
- {}
+ m_configFileName = fileName;
+ }
- void nlsrRegistrationFailed(const ndn::Name& name);
+ bool
+ getIsSetDaemonProcess()
+ {
+ return m_isDaemonProcess;
+ }
- void setInterestFilterNlsr(const string& name);
- void startEventLoop();
+ void
+ setIsDaemonProcess(bool value)
+ {
+ m_isDaemonProcess = value;
+ }
- int usage(const string& progname);
+ ConfParameter&
+ getConfParameter()
+ {
+ return m_confParam;
+ }
- string getConfFileName()
- {
- return m_configFileName;
- }
+ Adl&
+ getAdl()
+ {
+ return m_adl;
+ }
- void setConfFileName(const string& fileName)
- {
- m_configFileName=fileName;
- }
+ Npl&
+ getNpl()
+ {
+ return m_npl;
+ }
- bool getIsSetDaemonProcess()
- {
- return isDaemonProcess;
- }
+ ndn::shared_ptr<boost::asio::io_service>&
+ getIo()
+ {
+ return m_io;
+ }
- void setIsDaemonProcess(bool value)
- {
- isDaemonProcess=value;
- }
+ ndn::Scheduler&
+ getScheduler()
+ {
+ return m_scheduler;
+ }
- ConfParameter& getConfParameter()
- {
- return m_confParam;
- }
+ ndn::shared_ptr<ndn::Face>
+ getNlsrFace()
+ {
+ return m_nlsrFace;
+ }
- Adl& getAdl()
- {
- return m_adl;
- }
-
- Npl& getNpl()
- {
- return m_npl;
- }
-
- ndn::shared_ptr<boost::asio::io_service>& getIo()
- {
- return m_io;
- }
-
- ndn::Scheduler& getScheduler()
- {
- return m_scheduler;
- }
-
- ndn::shared_ptr<ndn::Face> getNlsrFace()
- {
- return m_nlsrFace;
- }
-
- KeyManager& getKeyManager()
- {
- return m_km;
- }
+ KeyManager&
+ getKeyManager()
+ {
+ return m_km;
+ }
- InterestManager& getIm()
- {
- return m_im;
- }
+ InterestManager&
+ getIm()
+ {
+ return m_im;
+ }
- DataManager& getDm()
- {
- return m_dm;
- }
+ DataManager&
+ getDm()
+ {
+ return m_dm;
+ }
- SequencingManager& getSm()
- {
- return m_sm;
- }
+ SequencingManager&
+ getSm()
+ {
+ return m_sm;
+ }
- Lsdb& getLsdb()
- {
- return m_nlsrLsdb;
- }
+ Lsdb&
+ getLsdb()
+ {
+ return m_nlsrLsdb;
+ }
- RoutingTable& getRoutingTable()
- {
- return m_routingTable;
- }
+ RoutingTable&
+ getRoutingTable()
+ {
+ return m_routingTable;
+ }
- Npt& getNpt()
- {
- return m_npt;
- }
+ Npt&
+ getNpt()
+ {
+ return m_npt;
+ }
- Fib& getFib()
- {
- return m_fib;
- }
+ Fib&
+ getFib()
+ {
+ return m_fib;
+ }
- long int getAdjBuildCount()
- {
- return m_adjBuildCount;
- }
+ long int
+ getAdjBuildCount()
+ {
+ return m_adjBuildCount;
+ }
- void incrementAdjBuildCount()
- {
- m_adjBuildCount++;
- }
+ void
+ incrementAdjBuildCount()
+ {
+ m_adjBuildCount++;
+ }
- void setAdjBuildCount(long int abc)
- {
- m_adjBuildCount=abc;
- }
+ void
+ setAdjBuildCount(long int abc)
+ {
+ m_adjBuildCount = abc;
+ }
- int getIsBuildAdjLsaSheduled()
- {
- return isBuildAdjLsaSheduled;
- }
+ int
+ getIsBuildAdjLsaSheduled()
+ {
+ return m_isBuildAdjLsaSheduled;
+ }
- void setIsBuildAdjLsaSheduled(bool iabls)
- {
- isBuildAdjLsaSheduled=iabls;
- }
+ void
+ setIsBuildAdjLsaSheduled(bool iabls)
+ {
+ m_isBuildAdjLsaSheduled = iabls;
+ }
- void setApiPort(int ap)
- {
- m_apiPort=ap;
- }
+ void
+ setApiPort(int ap)
+ {
+ m_apiPort = ap;
+ }
- int getApiPort()
- {
- return m_apiPort;
- }
+ int
+ getApiPort()
+ {
+ return m_apiPort;
+ }
- bool getIsRoutingTableCalculating()
- {
- return isRoutingTableCalculating;
- }
+ bool
+ getIsRoutingTableCalculating()
+ {
+ return m_isRoutingTableCalculating;
+ }
- void setIsRoutingTableCalculating(bool irtc)
- {
- isRoutingTableCalculating=irtc;
- }
+ void
+ setIsRoutingTableCalculating(bool irtc)
+ {
+ m_isRoutingTableCalculating = irtc;
+ }
- bool getIsRouteCalculationScheduled()
- {
- return isRouteCalculationScheduled;
- }
+ bool
+ getIsRouteCalculationScheduled()
+ {
+ return m_isRouteCalculationScheduled;
+ }
- void setIsRouteCalculationScheduled(bool ircs)
- {
- isRouteCalculationScheduled=ircs;
- }
+ void
+ setIsRouteCalculationScheduled(bool ircs)
+ {
+ m_isRouteCalculationScheduled = ircs;
+ }
- SyncLogicHandler& getSlh()
- {
- return m_slh;
- }
+ SyncLogicHandler&
+ getSlh()
+ {
+ return m_slh;
+ }
- NlsrLogger& getNlsrLogger()
- {
- return m_nlsrLogger;
- }
+ void
+ initialize();
- void initialize();
-
- private:
- ConfParameter m_confParam;
- Adl m_adl;
- Npl m_npl;
- ndn::shared_ptr<boost::asio::io_service> m_io;
- ndn::Scheduler m_scheduler;
- ndn::shared_ptr<ndn::Face> m_nlsrFace;
- InterestManager m_im;
- DataManager m_dm;
- SequencingManager m_sm;
- KeyManager m_km;
- bool isDaemonProcess;
- string m_configFileName;
- int m_apiPort;
-
- Lsdb m_nlsrLsdb;
- RoutingTable m_routingTable;
- Npt m_npt;
- Fib m_fib;
- SyncLogicHandler m_slh;
- NlsrLogger m_nlsrLogger;
-
- long int m_adjBuildCount;
- bool isBuildAdjLsaSheduled;
- bool isRouteCalculationScheduled;
- bool isRoutingTableCalculating;
+private:
+ ndn::shared_ptr<boost::asio::io_service> m_io;
+ ndn::shared_ptr<ndn::Face> m_nlsrFace;
+ ndn::Scheduler m_scheduler;
+ ConfParameter m_confParam;
+ Adl m_adl;
+ Npl m_npl;
+ InterestManager m_im;
+ DataManager m_dm;
+ SequencingManager m_sm;
+ KeyManager m_km;
+ bool m_isDaemonProcess;
+ string m_configFileName;
+ Lsdb m_nlsrLsdb;
- };
+
+ long int m_adjBuildCount;
+ bool m_isBuildAdjLsaSheduled;
+ bool m_isRouteCalculationScheduled;
+ bool m_isRoutingTableCalculating;
+
+ RoutingTable m_routingTable;
+ Npt m_npt;
+ Fib m_fib;
+ SyncLogicHandler m_slh;
+
+ int m_apiPort;
+
+
+};
} //namespace nlsr
-#endif
+#endif //NLSR_HPP
diff --git a/src/nlsr_adjacent.cpp b/src/nlsr_adjacent.cpp
deleted file mode 100644
index 6ef9c0b..0000000
--- a/src/nlsr_adjacent.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-#include<iostream>
-#include<string>
-#include<cmath>
-#include<limits>
-#include "nlsr_adjacent.hpp"
-#include "utility/nlsr_logger.hpp"
-
-#define THIS_FILE "nlsr_adjacent.cpp"
-
-namespace nlsr
-{
-
- using namespace std;
-
- Adjacent::Adjacent(const string& an, int cf, double lc, int s, int iton)
- {
- m_name=an;
- m_connectingFace=cf;
- m_linkCost=lc;
- m_status=s;
- m_interestTimedOutNo=iton;
- }
-
- bool
- Adjacent::isEqual(Adjacent& adj)
- {
- return ( m_name == adj.getName() ) &&
- ( m_connectingFace == adj.getConnectingFace() ) &&
- (std::abs(m_linkCost - adj.getLinkCost()) <
- std::numeric_limits<double>::epsilon()) ;
- }
-
- std::ostream&
- operator << (std::ostream &os, Adjacent &adj)
- {
- cout<<"Adjacent : "<< adj.getName() << endl;
- cout<<"Connecting Face: "<<adj.getConnectingFace()<<endl;
- cout<<"Link Cost: "<<adj.getLinkCost()<<endl;
- cout<<"Status: "<<adj.getStatus()<<endl;
- cout<<"Interest Timed out: "<<adj.getInterestTimedOutNo()<<endl;
- return os;
- }
-
-} //namespace nlsr
diff --git a/src/nlsr_adjacent.hpp b/src/nlsr_adjacent.hpp
deleted file mode 100644
index f9a789a..0000000
--- a/src/nlsr_adjacent.hpp
+++ /dev/null
@@ -1,97 +0,0 @@
-#ifndef ADJACENT_HPP
-#define ADJACENT_HPP
-
-namespace nlsr
-{
-
- using namespace std;
-
- class Adjacent
- {
-
- public:
- Adjacent()
- :m_name()
- ,m_connectingFace(0)
- ,m_linkCost(10.0)
- ,m_status(0)
- ,m_interestTimedOutNo(0)
- {
- }
-
- Adjacent(const string& an)
- :m_connectingFace(0)
- ,m_linkCost(0.0)
- ,m_status(0)
- ,m_interestTimedOutNo(0)
- {
- m_name=an;
- }
-
- Adjacent(const string& an, int cf, double lc, int s, int iton);
-
- string getName()
- {
- return m_name;
- }
-
- void setName(const string& an)
- {
- m_name=an;
- }
-
- int getConnectingFace()
- {
- return m_connectingFace;
- }
-
- void setConnectingFace(int cf)
- {
- m_connectingFace=cf;
- }
-
- double getLinkCost()
- {
- return m_linkCost;
- }
-
- void setLinkCost(double lc)
- {
- m_linkCost=lc;
- }
-
- int getStatus()
- {
- return m_status;
- }
-
- void setStatus(int s)
- {
- m_status=s;
- }
-
- int getInterestTimedOutNo()
- {
- return m_interestTimedOutNo;
- }
-
- void setInterestTimedOutNo(int iton)
- {
- m_interestTimedOutNo=iton;
- }
-
- bool isEqual(Adjacent& adj);
- private:
- string m_name;
- int m_connectingFace;
- double m_linkCost;
- int m_status;
- int m_interestTimedOutNo;
- };
-
- std::ostream&
- operator << (std::ostream &os, Adjacent &adj);
-
-} // namespace nlsr
-
-#endif
diff --git a/src/nlsr_adl.cpp b/src/nlsr_adl.cpp
deleted file mode 100644
index fd84f9e..0000000
--- a/src/nlsr_adl.cpp
+++ /dev/null
@@ -1,264 +0,0 @@
-#include<iostream>
-#include<algorithm>
-
-#include "nlsr_adl.hpp"
-#include "nlsr_adjacent.hpp"
-#include "nlsr.hpp"
-#include "utility/nlsr_logger.hpp"
-
-#define THIS_FILE "nlsr_adl.cpp"
-
-namespace nlsr
-{
-
- Adl::Adl()
- {
- }
-
- Adl::~Adl()
- {
- }
-
- static bool
- adjacent_compare(Adjacent& adj1, Adjacent& adj2)
- {
- return adj1.getName()==adj2.getName();
- }
-
- int
- Adl::insert(Adjacent& adj)
- {
- std::list<Adjacent >::iterator it = std::find_if( m_adjList.begin(),
- m_adjList.end(),
- bind(&adjacent_compare, _1, adj));
- if ( it != m_adjList.end() )
- {
- return -1;
- }
- m_adjList.push_back(adj);
- return 0;
- }
-
- void
- Adl::addAdjacentsFromAdl(Adl& adl)
- {
- for(std::list<Adjacent >::iterator it=adl.getAdjList().begin();
- it!=adl.getAdjList().end(); ++it)
- {
- insert((*it));
- }
- }
-
- int
- Adl::updateAdjacentStatus(string adjName, int s)
- {
- Adjacent adj(adjName);
- std::list<Adjacent >::iterator it = std::find_if( m_adjList.begin(),
- m_adjList.end(),
- bind(&adjacent_compare, _1, adj));
- if( it == m_adjList.end())
- {
- return -1;
- }
- (*it).setStatus(s);
- return 0;
- }
-
- Adjacent
- Adl::getAdjacent(string adjName)
- {
- Adjacent adj(adjName);
- std::list<Adjacent >::iterator it = std::find_if( m_adjList.begin(),
- m_adjList.end(),
- bind(&adjacent_compare, _1, adj));
- if( it != m_adjList.end())
- {
- return (*it);
- }
- return adj;
- }
-
-
- bool
- Adl::isEqual(Adl& adl)
- {
- if ( getSize() != adl.getSize() )
- {
- return false;
- }
- m_adjList.sort(adjacent_compare);
- adl.getAdjList().sort(adjacent_compare);
- int equalAdjCount=0;
- std::list< Adjacent > adjList2=adl.getAdjList();
- std::list<Adjacent>::iterator it1;
- std::list<Adjacent>::iterator it2;
- for(it1=m_adjList.begin() , it2=adjList2.begin() ;
- it1!=m_adjList.end(); it1++,it2++)
- {
- if ( !(*it1).isEqual((*it2)) )
- {
- break;
- }
- equalAdjCount++;
- }
- return equalAdjCount==getSize();
- }
-
-
- int
- Adl::updateAdjacentLinkCost(string adjName, double lc)
- {
- Adjacent adj(adjName);
- std::list<Adjacent >::iterator it = std::find_if( m_adjList.begin(),
- m_adjList.end(),
- bind(&adjacent_compare, _1, adj));
- if( it == m_adjList.end())
- {
- return -1;
- }
- (*it).setLinkCost(lc);
- return 0;
- }
-
- bool
- Adl::isNeighbor(string adjName)
- {
- Adjacent adj(adjName);
- std::list<Adjacent >::iterator it = std::find_if( m_adjList.begin(),
- m_adjList.end(),
- bind(&adjacent_compare, _1, adj));
- if( it == m_adjList.end())
- {
- return false;
- }
- return true;
- }
-
- void
- Adl::incrementTimedOutInterestCount(string& neighbor)
- {
- Adjacent adj(neighbor);
- std::list<Adjacent >::iterator it = std::find_if( m_adjList.begin(),
- m_adjList.end(),
- bind(&adjacent_compare, _1, adj));
- if( it == m_adjList.end())
- {
- return ;
- }
- (*it).setInterestTimedOutNo((*it).getInterestTimedOutNo()+1);
- }
-
- void
- Adl::setTimedOutInterestCount(string& neighbor, int count)
- {
- Adjacent adj(neighbor);
- std::list<Adjacent >::iterator it = std::find_if( m_adjList.begin(),
- m_adjList.end(),
- bind(&adjacent_compare, _1, adj));
- if( it != m_adjList.end())
- {
- (*it).setInterestTimedOutNo(count);
- }
- }
-
- int
- Adl::getTimedOutInterestCount(string& neighbor)
- {
- Adjacent adj(neighbor);
- std::list<Adjacent >::iterator it = std::find_if( m_adjList.begin(),
- m_adjList.end(),
- bind(&adjacent_compare, _1, adj));
- if( it == m_adjList.end())
- {
- return -1;
- }
- return (*it).getInterestTimedOutNo();
- }
-
- int
- Adl::getStatusOfNeighbor(string& neighbor)
- {
- Adjacent adj(neighbor);
- std::list<Adjacent >::iterator it = std::find_if( m_adjList.begin(),
- m_adjList.end(),
- bind(&adjacent_compare, _1, adj));
- if( it == m_adjList.end())
- {
- return -1;
- }
- return (*it).getStatus();
- }
-
- void
- Adl::setStatusOfNeighbor(string& neighbor, int status)
- {
- Adjacent adj(neighbor);
- std::list<Adjacent >::iterator it = std::find_if( m_adjList.begin(),
- m_adjList.end(),
- bind(&adjacent_compare, _1, adj));
- if( it != m_adjList.end())
- {
- (*it).setStatus(status);
- }
- }
-
- std::list<Adjacent>&
- Adl::getAdjList()
- {
- return m_adjList;
- }
-
- bool
- Adl::isAdjLsaBuildable(Nlsr& pnlsr)
- {
- int nbrCount=0;
- for( std::list<Adjacent>::iterator it=m_adjList.begin();
- it!= m_adjList.end() ; it++)
- {
- if ( ((*it).getStatus() == 1 ) )
- {
- nbrCount++;
- }
- else
- {
- if ( (*it).getInterestTimedOutNo() >=
- pnlsr.getConfParameter().getInterestRetryNumber())
- {
- nbrCount++;
- }
- }
- }
- if( nbrCount == m_adjList.size())
- {
- return true;
- }
- return false;
- }
-
- int
- Adl::getNumOfActiveNeighbor()
- {
- int actNbrCount=0;
- for( std::list<Adjacent>::iterator it=m_adjList.begin();
- it!= m_adjList.end() ; it++)
- {
- if ( ((*it).getStatus() == 1 ) )
- {
- actNbrCount++;
- }
- }
- return actNbrCount;
- }
-
-// used for debugging purpose
- void
- Adl::printAdl()
- {
- for( std::list<Adjacent>::iterator it=m_adjList.begin(); it!= m_adjList.end() ;
- it++)
- {
- cout<< (*it) <<endl;
- }
- }
-
-} //namespace nlsr
diff --git a/src/nlsr_adl.hpp b/src/nlsr_adl.hpp
deleted file mode 100644
index ad85f01..0000000
--- a/src/nlsr_adl.hpp
+++ /dev/null
@@ -1,59 +0,0 @@
-#ifndef NLSR_ADL_HPP
-#define NLSR_ADL_HPP
-
-#include <ndn-cpp-dev/face.hpp>
-#include "nlsr_adjacent.hpp"
-#include<list>
-
-namespace nlsr
-{
-
- class Nlsr;
-
- using namespace std;
-
- class Adl
- {
-
- public:
- Adl();
- ~Adl();
- int insert(Adjacent& adj);
- int updateAdjacentStatus(string adjName, int s);
- int updateAdjacentLinkCost(string adjName, double lc);
- std::list<Adjacent>& getAdjList();
- bool isNeighbor(string adjName);
- void incrementTimedOutInterestCount(string& neighbor);
- int getTimedOutInterestCount(string& neighbor);
- int getStatusOfNeighbor(string& neighbor);
- void setStatusOfNeighbor(string& neighbor, int status);
- void setTimedOutInterestCount(string& neighbor, int count);
- void addAdjacentsFromAdl(Adl& adl);
-
- bool isAdjLsaBuildable(Nlsr& pnlsr);
- int getNumOfActiveNeighbor();
- Adjacent getAdjacent(string adjName);
-
- bool isEqual(Adl& adl);
-
- int getSize()
- {
- return m_adjList.size();
- }
-
- void reset()
- {
- if( m_adjList.size() > 0 )
- {
- m_adjList.clear();
- }
- }
-
- void printAdl();
-
- private:
- std::list< Adjacent > m_adjList;
- };
-
-} //namespace nlsr
-#endif
diff --git a/src/nlsr_conf_param.cpp b/src/nlsr_conf_param.cpp
deleted file mode 100644
index 84f0f74..0000000
--- a/src/nlsr_conf_param.cpp
+++ /dev/null
@@ -1,34 +0,0 @@
-#include<iostream>
-#include "nlsr_conf_param.hpp"
-#include "utility/nlsr_logger.hpp"
-#define THIS_FILE "nlsr_conf_param.cpp"
-
-namespace nlsr
-{
-
- using namespace std;
-
- ostream&
- operator << (ostream& os, ConfParameter& cfp)
- {
- os <<"Router Name: "<< cfp.getRouterName()<<endl;
- os <<"Site Name: "<< cfp.getSiteName()<<endl;
- os <<"Network: "<< cfp.getNetwork()<<endl;
- os <<"Router Prefix: "<< cfp.getRouterPrefix()<<endl;
- os <<"ChronoSync sync Prifex: "<< cfp.getChronosyncSyncPrefix()<<endl;
- os <<"Interest Retry number: "<< cfp.getInterestRetryNumber()<<endl;
- os <<"Interest Resend second: "<< cfp.getInterestResendTime()<<endl;
- os <<"Info Interest Interval: "<<cfp.getInfoInterestInterval()<<endl;
- os <<"LSA refresh time: "<< cfp.getLsaRefreshTime()<<endl;
- os <<"Max Faces Per Prefix: "<< cfp.getMaxFacesPerPrefix()<<endl;
- os <<"Log Dir: "<< cfp.getLogDir()<<endl;
- os <<"Detalied logging: "<< cfp.getDetailedLogging()<<endl;
- os <<"Debugging: "<< cfp.getDebugging()<<endl;
- os <<"Hyperbolic ROuting: "<< cfp.getIsHyperbolicCalc()<<endl;
- os <<"Hyp R: "<< cfp.getCorR()<<endl;
- os <<"Hyp theta: "<< cfp.getCorTheta()<<endl;
- os <<"Tunnel Type: "<< cfp.getTunnelType()<<endl;
- return os;
- }
-
-} //namespace nlsr
diff --git a/src/nlsr_conf_param.hpp b/src/nlsr_conf_param.hpp
deleted file mode 100644
index ddfa1a0..0000000
--- a/src/nlsr_conf_param.hpp
+++ /dev/null
@@ -1,298 +0,0 @@
-#ifndef CONF_PARAM_HPP
-#define CONF_PARAM_HPP
-
-#include<iostream>
-
-namespace nlsr
-{
-
- using namespace std;
-
- class ConfParameter
- {
-
- public:
- ConfParameter()
- : m_chronosyncSyncPrefix("ndn/nlsr/sync")
- , m_chronosyncLsaPrefix("/ndn/nlsr/LSA")
- , m_rootKeyPrefix("/ndn/keys")
- , isStrictHierchicalKeyCheck(0)
- , m_interestRetryNumber(3)
- , m_interestResendTime(5)
- , m_infoInterestInterval(60)
- , m_lsaRefreshTime(1800)
- , m_routerDeadInterval(3600)
- , m_maxFacesPerPrefix(0)
- , m_tunnelType(0)
- , m_detailedLogging(0)
- , m_certDir()
- , m_debugging(0)
- , isHyperbolicCalc(0)
- , m_seqFileDir()
- , m_corR(0)
- , m_corTheta(0)
- {}
-
- void setRouterName(const string& rn)
- {
- m_routerName=rn;
- }
-
- string getRouterName()
- {
- return m_routerName;
- }
-
- void setSiteName(const string& sn)
- {
- m_siteName=sn;
- }
-
- string getSiteName()
- {
- return m_siteName;
- }
-
- void setNetwork(const string& nn)
- {
- m_network=nn;
- }
-
- string getNetwork()
- {
- return m_network;
- }
-
- void buildRouterPrefix()
- {
- m_routerPrefix="/"+m_network+"/"+m_siteName+"/"+m_routerName;
- }
-
- string getRouterPrefix()
- {
- return m_routerPrefix;
- }
-
- string getRootKeyPrefix()
- {
- return m_rootKeyPrefix;
- }
-
- void setRootKeyPrefix(string rkp)
- {
- m_rootKeyPrefix=rkp;
- }
-
- void setInterestRetryNumber(int irn)
- {
- m_interestRetryNumber=irn;
- }
-
- int getInterestRetryNumber()
- {
- return m_interestRetryNumber;
- }
-
- void setInterestResendTime(int irt)
- {
- m_interestResendTime=irt;
- }
-
- int getInterestResendTime()
- {
- return m_interestResendTime;
- }
-
- void setLsaRefreshTime(int lrt)
- {
- m_lsaRefreshTime=lrt;
- m_routerDeadInterval=2*m_lsaRefreshTime;
- }
-
- int getLsaRefreshTime()
- {
- return m_lsaRefreshTime;
- }
-
- void setRouterDeadInterval(int rdt)
- {
- m_routerDeadInterval=rdt;
- }
-
- long int getRouterDeadInterval()
- {
- return m_routerDeadInterval;
- }
-
- void setMaxFacesPerPrefix(int mfpp)
- {
- m_maxFacesPerPrefix=mfpp;
- }
-
- int getMaxFacesPerPrefix()
- {
- return m_maxFacesPerPrefix;
- }
-
- void setLogDir(string ld)
- {
- m_logDir=ld;
- }
-
- string getLogDir()
- {
- return m_logDir;
- }
-
- void setCertDir(std::string cd)
- {
- m_certDir=cd;
- }
-
- std::string getCertDir()
- {
- return m_certDir;
- }
-
- void setSeqFileDir(string ssfd)
- {
- m_seqFileDir=ssfd;
- }
-
- string getSeqFileDir()
- {
- return m_seqFileDir;
- }
-
- void setDetailedLogging(int dl)
- {
- m_detailedLogging=dl;
- }
-
- int getDetailedLogging()
- {
- return m_detailedLogging;
- }
-
- void setDebugging(int d)
- {
- m_debugging=d;
- }
-
- int getDebugging()
- {
- return m_debugging;
- }
-
- void setIsHyperbolicCalc(bool ihc)
- {
- isHyperbolicCalc=ihc;
- }
-
- bool getIsHyperbolicCalc()
- {
- return isHyperbolicCalc;
- }
-
- void setCorR(double cr)
- {
- m_corR=cr;
- }
-
- double getCorR()
- {
- return m_corR;
- }
-
- void setCorTheta(double ct)
- {
- m_corTheta=ct;
- }
-
- double getCorTheta()
- {
- return m_corTheta;
- }
-
- void setTunnelType(int tt)
- {
- m_tunnelType=tt;
- }
-
- int getTunnelType()
- {
- return m_tunnelType;
- }
-
- void setChronosyncSyncPrefix(const string& csp)
- {
- m_chronosyncSyncPrefix=csp;
- }
-
- string getChronosyncSyncPrefix()
- {
- return m_chronosyncSyncPrefix;
- }
-
- void setChronosyncLsaPrefix(string clp)
- {
- m_chronosyncLsaPrefix=clp;
- }
-
- string getChronosyncLsaPrefix()
- {
- return m_chronosyncLsaPrefix;
- }
-
- int getInfoInterestInterval()
- {
- return m_infoInterestInterval;
- }
-
- void setInfoInterestInterval(int iii)
- {
- m_infoInterestInterval=iii;
- }
-
- private:
- string m_routerName;
- string m_siteName;
- string m_network;
-
- string m_routerPrefix;
- string m_lsaRouterPrefix;
-
- string m_chronosyncSyncPrefix;
- string m_chronosyncLsaPrefix;
-
- string m_rootKeyPrefix;
-
- int m_interestRetryNumber;
- int m_interestResendTime;
- int m_infoInterestInterval;
- int m_lsaRefreshTime;
- int m_routerDeadInterval;
-
- int m_maxFacesPerPrefix;
- string m_logDir;
- string m_certDir;
- string m_seqFileDir;
- string m_logFile;
- int m_detailedLogging;
- int m_debugging;
-
- bool isHyperbolicCalc;
- double m_corR;
- double m_corTheta;
-
- int m_tunnelType;
- bool isStrictHierchicalKeyCheck;
-
- };
-
- std::ostream&
- operator << (std::ostream& os, ConfParameter& cfp);
-
-} // namespace nlsr
-
-#endif
diff --git a/src/nlsr_conf_processor.cpp b/src/nlsr_conf_processor.cpp
deleted file mode 100644
index fd3c9ef..0000000
--- a/src/nlsr_conf_processor.cpp
+++ /dev/null
@@ -1,562 +0,0 @@
-#include<iostream>
-#include<fstream>
-#include<string>
-#include<cstdlib>
-#include <sstream>
-
-#include "nlsr_conf_processor.hpp"
-#include "nlsr_conf_param.hpp"
-#include "utility/nlsr_tokenizer.hpp"
-#include "nlsr_adjacent.hpp"
-#include "utility/nlsr_logger.hpp"
-
-#define THIS_FILE "nlsr_conf_processor.cpp"
-
-
-namespace nlsr
-{
-
- using namespace std;
-
- int
- ConfFileProcessor::processConfFile(Nlsr& pnlsr)
- {
- int ret=0;
- if ( !m_confFileName.empty())
- {
- std::ifstream inputFile(m_confFileName.c_str());
- if ( inputFile.is_open())
- {
- for( string line; getline( inputFile, line ); )
- {
- if (!line.empty() )
- {
- if(line[0]!= '#' && line[0]!='!')
- {
- ret=processConfCommand(pnlsr, line);
- if( ret == -1 )
- {
- break;
- }
- }
- }
- }
- }
- else
- {
- std::cerr <<"Configuration file: ("<<m_confFileName<<") does not exist :(";
- std::cerr <<endl;
- ret=-1;
- }
- }
- return ret;
- }
-
-
- int
- ConfFileProcessor::processConfCommand(Nlsr& pnlsr, string command)
- {
- int ret=0;
- nlsrTokenizer nt(command," ");
- if( (nt.getFirstToken() == "network"))
- {
- ret=processConfCommandNetwork(pnlsr,nt.getRestOfLine());
- }
- else if( (nt.getFirstToken() == "site-name"))
- {
- ret=processConfCommandSiteName(pnlsr,nt.getRestOfLine());
- }
- else if ( (nt.getFirstToken() == "root-key-prefix"))
- {
- ret=processConfCommandRootKeyPrefix(pnlsr,nt.getRestOfLine());
- }
- else if ( (nt.getFirstToken() == "router-name"))
- {
- ret=processConfCommandRouterName(pnlsr,nt.getRestOfLine());
- }
- else if( (nt.getFirstToken() == "ndnneighbor") )
- {
- ret=processConfCommandNdnNeighbor(pnlsr, nt.getRestOfLine());
- }
- else if( (nt.getFirstToken() == "link-cost"))
- {
- ret=processConfCommandLinkCost(pnlsr, nt.getRestOfLine());
- }
- else if( (nt.getFirstToken() == "ndnname") )
- {
- ret=processConfCommandNdnName(pnlsr, nt.getRestOfLine());
- }
- else if( (nt.getFirstToken() == "interest-retry-num"))
- {
- processConfCommandInterestRetryNumber(pnlsr,nt.getRestOfLine());
- }
- else if( (nt.getFirstToken() == "interest-resend-time"))
- {
- processConfCommandInterestResendTime(pnlsr,nt.getRestOfLine());
- }
- else if( (nt.getFirstToken() == "lsa-refresh-time"))
- {
- processConfCommandLsaRefreshTime(pnlsr,nt.getRestOfLine());
- }
- else if( (nt.getFirstToken() == "max-faces-per-prefix"))
- {
- processConfCommandMaxFacesPerPrefix(pnlsr,nt.getRestOfLine());
- }
- else if( (nt.getFirstToken() == "log-dir"))
- {
- processConfCommandLogDir(pnlsr,nt.getRestOfLine());
- }
- else if( (nt.getFirstToken() == "cert-dir"))
- {
- processConfCommandCertDir(pnlsr,nt.getRestOfLine());
- }
- else if( (nt.getFirstToken() == "detailed-logging") )
- {
- processConfCommandDetailedLogging(pnlsr,nt.getRestOfLine());
- }
- else if( (nt.getFirstToken() == "debugging") )
- {
- processConfCommandDebugging(pnlsr,nt.getRestOfLine());
- }
- else if( (nt.getFirstToken() == "chronosync-sync-prefix") )
- {
- processConfCommandChronosyncSyncPrefix(pnlsr,nt.getRestOfLine());
- }
- else if( (nt.getFirstToken() == "hyperbolic-cordinate") )
- {
- processConfCommandHyperbolicCordinate(pnlsr,nt.getRestOfLine());
- }
- else if( (nt.getFirstToken() == "hyperbolic-routing"))
- {
- processConfCommandIsHyperbolicCalc(pnlsr,nt.getRestOfLine());
- }
- else if( (nt.getFirstToken() == "tunnel-type"))
- {
- processConfCommandTunnelType(pnlsr,nt.getRestOfLine());
- }
- else
- {
- cout << "Wrong configuration Command: "<< nt.getFirstToken()<<endl;
- }
- return ret;
- }
-
- int
- ConfFileProcessor::processConfCommandNetwork(Nlsr& pnlsr, string command)
- {
- if(command.empty() )
- {
- cerr <<" Network can not be null or empty :( !"<<endl;
- return -1;
- }
- else
- {
- if(command[command.size()-1] == '/' )
- {
- command.erase(command.size() - 1);
- }
- if(command[0] == '/' )
- {
- command.erase(0,1);
- }
- pnlsr.getConfParameter().setNetwork(command);
- }
- return 0;
- }
-
- int
- ConfFileProcessor::processConfCommandSiteName(Nlsr& pnlsr, string command)
- {
- if(command.empty() )
- {
- cerr <<"Site name can not be null or empty :( !"<<endl;
- return -1;
- }
- else
- {
- if(command[command.size()-1] == '/' )
- {
- command.erase(command.size() - 1);
- }
- if(command[0] == '/' )
- {
- command.erase(0,1);
- }
- pnlsr.getConfParameter().setSiteName(command);
- }
- return 0;
- }
-
- int
- ConfFileProcessor::processConfCommandRootKeyPrefix(Nlsr& pnlsr, string command)
- {
- if(command.empty() )
- {
- cerr <<"Root Key Prefix can not be null or empty :( !"<<endl;
- return -1;
- }
- else
- {
- if(command[command.size()-1] == '/' )
- {
- command.erase(command.size() - 1);
- }
- if(command[0] == '/' )
- {
- command.erase(0,1);
- }
- pnlsr.getConfParameter().setRootKeyPrefix(command);
- }
- return 0;
- }
-
-
- int
- ConfFileProcessor::processConfCommandRouterName(Nlsr& pnlsr, string command)
- {
- if(command.empty() )
- {
- cerr <<" Router name can not be null or empty :( !"<<endl;
- return -1;
- }
- else
- {
- if(command[command.size()-1] == '/' )
- {
- command.erase(command.size() - 1);
- }
- if(command[0] == '/' )
- {
- command.erase(0,1);
- }
- pnlsr.getConfParameter().setRouterName(command);
- }
- return 0;
- }
-
- int
- ConfFileProcessor::processConfCommandInterestRetryNumber(Nlsr& pnlsr,
- string command)
- {
- if(command.empty() )
- {
- cerr <<" Wrong command format ! [interest-retry-num n]"<<endl;
- }
- else
- {
- int irn;
- stringstream ss(command.c_str());
- ss>>irn;
- if ( irn >=1 && irn <=5)
- {
- pnlsr.getConfParameter().setInterestRetryNumber(irn);
- }
- }
- return 0;
- }
-
- int
- ConfFileProcessor::processConfCommandInterestResendTime(Nlsr& pnlsr,
- string command)
- {
- if(command.empty() )
- {
- cerr <<" Wrong command format ! [interest-resend-time s]"<<endl;
- }
- else
- {
- int irt;
- stringstream ss(command.c_str());
- ss>>irt;
- if( irt>=1 && irt <=20)
- {
- pnlsr.getConfParameter().setInterestResendTime(irt);
- }
- }
- return 0;
- }
-
- int
- ConfFileProcessor::processConfCommandLsaRefreshTime(Nlsr& pnlsr, string command)
- {
- if(command.empty() )
- {
- cerr <<" Wrong command format ! [interest-resend-time s]"<<endl;
- }
- else
- {
- int lrt;
- stringstream ss(command.c_str());
- ss>>lrt;
- if ( lrt>= 240 && lrt<=7200)
- {
- pnlsr.getConfParameter().setLsaRefreshTime(lrt);
- }
- }
- return 0;
- }
-
- int
- ConfFileProcessor::processConfCommandMaxFacesPerPrefix(Nlsr& pnlsr,
- string command)
- {
- if(command.empty() )
- {
- cerr <<" Wrong command format ! [max-faces-per-prefix n]"<<endl;
- }
- else
- {
- int mfpp;
- stringstream ss(command.c_str());
- ss>>mfpp;
- if ( mfpp>=0 && mfpp<=60)
- {
- pnlsr.getConfParameter().setMaxFacesPerPrefix(mfpp);
- }
- }
- return 0;
- }
-
- int
- ConfFileProcessor::processConfCommandTunnelType(Nlsr& pnlsr, string command)
- {
- if(command.empty() )
- {
- cerr <<" Wrong command format ! [tunnel-type tcp/udp]!"<<endl;
- }
- else
- {
- if(command == "tcp" || command == "TCP" )
- {
- pnlsr.getConfParameter().setTunnelType(1);
- }
- else if(command == "udp" || command == "UDP")
- {
- pnlsr.getConfParameter().setTunnelType(0);
- }
- else
- {
- cerr <<" Wrong command format ! [tunnel-type tcp/udp]!"<<endl;
- }
- }
- return 0;
- }
-
- int
- ConfFileProcessor::processConfCommandChronosyncSyncPrefix(Nlsr& pnlsr,
- string command)
- {
- if(command.empty() )
- {
- cerr <<" Wrong command format ! [chronosync-sync-prefix name/prefix]!"<<endl;
- }
- else
- {
- pnlsr.getConfParameter().setChronosyncSyncPrefix(command);
- }
- return 0;
- }
-
-
- int
- ConfFileProcessor::processConfCommandLogDir(Nlsr& pnlsr, string command)
- {
- if(command.empty() )
- {
- cerr <<" Wrong command format ! [log-dir /path/to/log/dir]!"<<endl;
- }
- else
- {
- pnlsr.getConfParameter().setLogDir(command);
- }
- return 0;
- }
-
- int
- ConfFileProcessor::processConfCommandCertDir(Nlsr& pnlsr, string command)
- {
- if(command.empty() )
- {
- cerr <<" Wrong command format ! [cert-dir /path/to/cert/dir]!"<<endl;
- }
- else
- {
- pnlsr.getConfParameter().setCertDir(command);
- }
- return 0;
- }
-
- int
- ConfFileProcessor::processConfCommandDebugging(Nlsr& pnlsr, string command)
- {
- if(command.empty() )
- {
- cerr <<" Wrong command format ! [debugging on/of]!"<<endl;
- }
- else
- {
- if(command == "on" || command == "ON" )
- {
- pnlsr.getConfParameter().setDebugging(1);
- }
- else if(command == "off" || command == "off")
- {
- pnlsr.getConfParameter().setDebugging(0);
- }
- else
- {
- cerr <<" Wrong command format ! [debugging on/off]!"<<endl;
- }
- }
- return 0;
- }
-
- int
- ConfFileProcessor::processConfCommandDetailedLogging(Nlsr& pnlsr,
- string command)
- {
- if(command.empty() )
- {
- cerr <<" Wrong command format ! [detailed-logging on/off]!"<<endl;
- }
- else
- {
- if(command == "on" || command == "ON" )
- {
- pnlsr.getConfParameter().setDetailedLogging(1);
- }
- else if(command == "off" || command == "off")
- {
- pnlsr.getConfParameter().setDetailedLogging(0);
- }
- else
- {
- cerr <<" Wrong command format ! [detailed-logging on/off]!"<<endl;
- }
- }
- return 0;
- }
-
- int
- ConfFileProcessor::processConfCommandIsHyperbolicCalc(Nlsr& pnlsr,
- string command)
- {
- if(command.empty() )
- {
- cerr <<" Wrong command format ! [hyperbolic-routing on/off/dry-run]!"<<endl;
- }
- else
- {
- if(command == "on" || command == "ON" )
- {
- pnlsr.getConfParameter().setIsHyperbolicCalc(1);
- }
- else if(command == "dry-run" || command == "DRY-RUN")
- {
- pnlsr.getConfParameter().setIsHyperbolicCalc(2);
- }
- else if(command == "off" || command == "off")
- {
- pnlsr.getConfParameter().setIsHyperbolicCalc(0);
- }
- else
- {
- cerr <<" Wrong command format ! [hyperbolic-routing on/off/dry-run]!"<<endl;
- }
- }
- return 0;
- }
-
- int
- ConfFileProcessor::processConfCommandHyperbolicCordinate(Nlsr& pnlsr,
- string command)
- {
- if(command.empty() )
- {
- cerr <<" Wrong command format ! [hyperbolic-cordinate r 0]!"<<endl;
- if (pnlsr.getConfParameter().getIsHyperbolicCalc() > 0 )
- {
- return -1;
- }
- }
- else
- {
- nlsrTokenizer nt(command," ");
- stringstream ssr(nt.getFirstToken().c_str());
- stringstream sst(nt.getRestOfLine().c_str());
- double r,theta;
- ssr>>r;
- sst>>theta;
- pnlsr.getConfParameter().setCorR(r);
- pnlsr.getConfParameter().setCorTheta(theta);
- }
- return 0;
- }
-
-
- int
- ConfFileProcessor::processConfCommandNdnNeighbor(Nlsr& pnlsr, string command)
- {
- if(command.empty() )
- {
- cerr <<" Wrong command format ! [ndnneighbor /nbr/name/ FaceId]!"<<endl;
- }
- else
- {
- nlsrTokenizer nt(command," ");
- if( nt.getRestOfLine().empty())
- {
- cerr <<" Wrong command format ! [ndnneighbor /nbr/name/ FaceId]!"<<endl;
- return 0;
- }
- else
- {
- stringstream sst(nt.getRestOfLine().c_str());
- int faceId;
- sst>>faceId;
- Adjacent adj(nt.getFirstToken(),faceId,0.0,0,0);
- pnlsr.getAdl().insert(adj);
- }
- }
- return 0;
- }
-
- int
- ConfFileProcessor::processConfCommandNdnName(Nlsr& pnlsr, string command)
- {
- if(command.empty() )
- {
- cerr <<" Wrong command format ! [ndnname name/prefix]!"<<endl;
- }
- else
- {
- pnlsr.getNpl().insert(command);
- }
- return 0;
- }
-
-
- int
- ConfFileProcessor::processConfCommandLinkCost(Nlsr& pnlsr, string command)
- {
- if(command.empty() )
- {
- cerr <<" Wrong command format ! [link-cost nbr/name cost]!"<<endl;
- if (pnlsr.getConfParameter().getIsHyperbolicCalc() > 0 )
- {
- return -1;
- }
- }
- else
- {
- nlsrTokenizer nt(command," ");
- stringstream sst(nt.getRestOfLine().c_str());
- double cost;
- sst>>cost;
- pnlsr.getAdl().updateAdjacentLinkCost(nt.getFirstToken(),cost);
- }
- return 0;
- }
-
-} //namespace nlsr
-
diff --git a/src/nlsr_conf_processor.hpp b/src/nlsr_conf_processor.hpp
deleted file mode 100644
index 8448823..0000000
--- a/src/nlsr_conf_processor.hpp
+++ /dev/null
@@ -1,56 +0,0 @@
-#ifndef CONF_PROCESSOR_HPP
-#define CONF_PROCESSOR_HPP
-
-#include "nlsr.hpp"
-
-namespace nlsr
-{
-
- using namespace std;
-
- class ConfFileProcessor
- {
- public:
- ConfFileProcessor()
- :m_confFileName()
- {
- }
- ConfFileProcessor(const string& cfile)
- {
- m_confFileName=cfile;
- }
-
- int processConfFile(Nlsr& pnlsr);
-
- private:
- int processConfCommand(Nlsr& pnlsr, string command);
- int processConfCommandNetwork(Nlsr& pnlsr, string command);
- int processConfCommandSiteName(Nlsr& pnlsr, string command);
- int processConfCommandRootKeyPrefix(Nlsr& pnlsr, string command);
- int processConfCommandRouterName(Nlsr& pnlsr, string command);
- int processConfCommandInterestRetryNumber(Nlsr& pnlsr, string command);
- int processConfCommandInterestResendTime(Nlsr& pnlsr, string command);
- int processConfCommandLsaRefreshTime(Nlsr& pnlsr, string command);
- int processConfCommandMaxFacesPerPrefix(Nlsr& pnlsr, string command);
- int processConfCommandTunnelType(Nlsr& pnlsr, string command);
-
- int processConfCommandChronosyncSyncPrefix(Nlsr& pnlsr, string command);
- int processConfCommandLogDir(Nlsr& pnlsr, string command);
- int processConfCommandCertDir(Nlsr& pnlsr, string command);
- int processConfCommandDebugging(Nlsr& pnlsr, string command);
- int processConfCommandDetailedLogging(Nlsr& pnlsr, string command);
- int processConfCommandIsHyperbolicCalc(Nlsr& pnlsr, string command);
-
- int processConfCommandHyperbolicCordinate(Nlsr& pnlsr, string command);
-
- int processConfCommandNdnNeighbor(Nlsr& pnlsr, string command);
- int processConfCommandNdnName(Nlsr& pnlsr, string command);
- int processConfCommandLinkCost(Nlsr& pnlsr, string command);
-
-
- private:
- string m_confFileName;
- };
-
-} //namespace nlsr
-#endif
diff --git a/src/nlsr_lsa.cpp b/src/nlsr_lsa.cpp
deleted file mode 100644
index 0f97568..0000000
--- a/src/nlsr_lsa.cpp
+++ /dev/null
@@ -1,348 +0,0 @@
-#include<string>
-#include<iostream>
-#include<sstream>
-#include<algorithm>
-#include<cmath>
-#include<limits>
-
-#include "nlsr.hpp"
-#include "nlsr_lsa.hpp"
-#include "nlsr_npl.hpp"
-#include "nlsr_adjacent.hpp"
-#include "utility/nlsr_tokenizer.hpp"
-#include "utility/nlsr_logger.hpp"
-
-#define THIS_FILE "nlsr_lsa.cpp"
-
-namespace nlsr
-{
-
- using namespace std;
-
-
- string
- NameLsa::getKey()
- {
- string key;
- key=m_origRouter + "/" + boost::lexical_cast<std::string>(1);
- return key;
- }
-
- NameLsa::NameLsa(string origR, uint8_t lst, uint32_t lsn, uint32_t lt, Npl npl)
- {
- m_origRouter=origR;
- m_lsType=lst;
- m_lsSeqNo=lsn;
- m_lifeTime=lt;
- std::list<string> nl=npl.getNameList();
- for( std::list<string>::iterator it=nl.begin(); it != nl.end(); it++)
- {
- addName((*it));
- }
- }
-
- string
- NameLsa::getData()
- {
- string nameLsaData;
- nameLsaData=m_origRouter + "|" + boost::lexical_cast<std::string>(1) + "|"
- + boost::lexical_cast<std::string>(m_lsSeqNo) + "|"
- + boost::lexical_cast<std::string>(m_lifeTime);
- nameLsaData+="|";
- nameLsaData+=boost::lexical_cast<std::string>(m_npl.getSize());
- std::list<string> nl=m_npl.getNameList();
- for( std::list<string>::iterator it=nl.begin(); it != nl.end(); it++)
- {
- nameLsaData+="|";
- nameLsaData+=(*it);
- }
- return nameLsaData+"|";
- }
-
- bool
- NameLsa::initializeFromContent(string content)
- {
- uint32_t numName=0;
- nlsrTokenizer nt(content, "|");
- m_origRouter=nt.getNextToken();
- if(m_origRouter.empty())
- {
- return false;
- }
- try
- {
- m_lsType=boost::lexical_cast<uint8_t>(nt.getNextToken());
- m_lsSeqNo=boost::lexical_cast<uint32_t>(nt.getNextToken());
- m_lifeTime=boost::lexical_cast<uint32_t>(nt.getNextToken());
- numName=boost::lexical_cast<uint32_t>(nt.getNextToken());
- }
- catch(std::exception &e)
- {
- return false;
- }
- for(int i=0; i<numName; i++)
- {
- string name=nt.getNextToken();
- addName(name);
- }
- return true;
- }
-
- void
- NameLsa::writeLog()
- {
- src::logger lg;
- BOOST_LOG(lg)<<" "<<THIS_FILE<<" "<<__LINE__<<": "<<"Name-LSA";
- BOOST_LOG(lg)<<" "<<THIS_FILE<<" "<<__LINE__<<": "<<" Origination Router: "
- <<m_origRouter;
- BOOST_LOG(lg)<<" "<<THIS_FILE<<" "<<__LINE__<<": "<<" LS Type: "<<m_lsType;
- BOOST_LOG(lg)<<" "<<THIS_FILE<<" "<<__LINE__<<": "<<" LS Seq: "<<m_lsSeqNo;
- BOOST_LOG(lg)<<" "<<THIS_FILE<<" "<<__LINE__<<": "<<" LS Lifetime: "<<m_lifeTime;
- BOOST_LOG(lg)<<" "<<THIS_FILE<<" "<<__LINE__<<": "<<" LS Data: ";
- int i=1;
- std::list<string> nl=m_npl.getNameList();
- for( std::list<string>::iterator it=nl.begin(); it != nl.end(); it++)
- {
- BOOST_LOG(lg)<<" "<<THIS_FILE<<" "<<__LINE__<<": "<<" Name "<<i<<": "<<(*it);
- }
- BOOST_LOG(lg)<<" "<<THIS_FILE<<" "<<__LINE__<<": "<<"name_lsa_end";
- }
-
- std::ostream&
- operator<<(std::ostream& os, NameLsa& nLsa)
- {
- os<<"Name Lsa: "<<endl;
- os<<" Origination Router: "<<nLsa.getOrigRouter()<<endl;
- os<<" Ls Type: "<<(unsigned short)nLsa.getLsType()<<endl;
- os<<" Ls Seq No: "<<(unsigned int)nLsa.getLsSeqNo()<<endl;
- os<<" Ls Lifetime: "<<(unsigned int)nLsa.getLifeTime()<<endl;
- os<<" Names: "<<endl;
- int i=1;
- std::list<string> nl=nLsa.getNpl().getNameList();
- for( std::list<string>::iterator it=nl.begin(); it != nl.end(); it++)
- {
- os<<" Name "<<i<<": "<<(*it)<<endl;
- }
- return os;
- }
-
-
-
- CorLsa::CorLsa(string origR, uint8_t lst, uint32_t lsn, uint32_t lt
- , double r, double theta)
- {
- m_origRouter=origR;
- m_lsType=lst;
- m_lsSeqNo=lsn;
- m_lifeTime=lt;
- m_corRad=r;
- m_corTheta=theta;
- }
-
- string
- CorLsa::getKey()
- {
- string key;
- key=m_origRouter + "/" + boost::lexical_cast<std::string>(3);
- return key;
- }
-
- bool
- CorLsa::isEqual(CorLsa& clsa)
- {
- return (std::abs(m_corRad - clsa.getCorRadius()) <
- std::numeric_limits<double>::epsilon()) &&
- (std::abs(m_corTheta - clsa.getCorTheta()) <
- std::numeric_limits<double>::epsilon());
- }
-
- string
- CorLsa::getData()
- {
- string corLsaData;
- corLsaData=m_origRouter + "|";
- corLsaData+=(boost::lexical_cast<std::string>(3) + "|");
- corLsaData+=(boost::lexical_cast<std::string>(m_lsSeqNo) + "|");
- corLsaData+=(boost::lexical_cast<std::string>(m_lifeTime) + "|");
- corLsaData+=(boost::lexical_cast<std::string>(m_corRad) + "|");
- corLsaData+=(boost::lexical_cast<std::string>(m_corTheta) + "|");
- return corLsaData;
- }
-
- bool
- CorLsa::initializeFromContent(string content)
- {
- nlsrTokenizer nt(content, "|");
- m_origRouter=nt.getNextToken();
- if(m_origRouter.empty())
- {
- return false;
- }
- try
- {
- m_lsType=boost::lexical_cast<uint8_t>(nt.getNextToken());
- m_lsSeqNo=boost::lexical_cast<uint32_t>(nt.getNextToken());
- m_lifeTime=boost::lexical_cast<uint32_t>(nt.getNextToken());
- m_corRad=boost::lexical_cast<double>(nt.getNextToken());
- m_corTheta=boost::lexical_cast<double>(nt.getNextToken());
- }
- catch(std::exception &e)
- {
- return false;
- }
- return true;
- }
-
- std::ostream&
- operator<<(std::ostream& os, CorLsa& cLsa)
- {
- os<<"Cor Lsa: "<<endl;
- os<<" Origination Router: "<<cLsa.getOrigRouter()<<endl;
- os<<" Ls Type: "<<(unsigned short)cLsa.getLsType()<<endl;
- os<<" Ls Seq No: "<<(unsigned int)cLsa.getLsSeqNo()<<endl;
- os<<" Ls Lifetime: "<<(unsigned int)cLsa.getLifeTime()<<endl;
- os<<" Hyperbolic Radius: "<<cLsa.getCorRadius()<<endl;
- os<<" Hyperbolic Theta: "<<cLsa.getCorTheta()<<endl;
- return os;
- }
-
-
- AdjLsa::AdjLsa(string origR, uint8_t lst, uint32_t lsn, uint32_t lt,
- uint32_t nl ,Adl padl)
- {
- m_origRouter=origR;
- m_lsType=lst;
- m_lsSeqNo=lsn;
- m_lifeTime=lt;
- m_noLink=nl;
- std::list<Adjacent> al=padl.getAdjList();
- for( std::list<Adjacent>::iterator it=al.begin(); it != al.end(); it++)
- {
- if((*it).getStatus()==1)
- {
- addAdjacent((*it));
- }
- }
- }
-
- string
- AdjLsa::getKey()
- {
- string key;
- key=m_origRouter + "/" + boost::lexical_cast<std::string>(2);
- return key;
- }
-
- bool
- AdjLsa::isEqual(AdjLsa& alsa)
- {
- return m_adl.isEqual(alsa.getAdl());
- }
-
-
- string
- AdjLsa::getData()
- {
- string adjLsaData;
- adjLsaData=m_origRouter + "|" + boost::lexical_cast<std::string>(2) + "|"
- + boost::lexical_cast<std::string>(m_lsSeqNo) + "|"
- + boost::lexical_cast<std::string>(m_lifeTime);
- adjLsaData+="|";
- adjLsaData+=boost::lexical_cast<std::string>(m_adl.getSize());
- std::list<Adjacent> al=m_adl.getAdjList();
- for( std::list<Adjacent>::iterator it=al.begin(); it != al.end(); it++)
- {
- adjLsaData+="|";
- adjLsaData+=(*it).getName();
- adjLsaData+="|";
- adjLsaData+=boost::lexical_cast<std::string>((*it).getConnectingFace());
- adjLsaData+="|";
- adjLsaData+=boost::lexical_cast<std::string>((*it).getLinkCost());
- }
- return adjLsaData+"|";
- }
-
- bool
- AdjLsa::initializeFromContent(string content)
- {
- uint32_t numLink=0;
- nlsrTokenizer nt(content, "|");
- m_origRouter=nt.getNextToken();
- if(m_origRouter.empty())
- {
- return false;
- }
- try
- {
- m_lsType=boost::lexical_cast<uint8_t>(nt.getNextToken());
- m_lsSeqNo=boost::lexical_cast<uint32_t>(nt.getNextToken());
- m_lifeTime=boost::lexical_cast<uint32_t>(nt.getNextToken());
- numLink=boost::lexical_cast<uint32_t>(nt.getNextToken());
- }
- catch(std::exception &e)
- {
- return false;
- }
- for(int i=0; i< numLink; i++)
- {
- try
- {
- string adjName=nt.getNextToken();
- int connectingFace=boost::lexical_cast<int>(nt.getNextToken());
- double linkCost=boost::lexical_cast<double>(nt.getNextToken());
- Adjacent adjacent(adjName, connectingFace, linkCost, 0, 0);
- addAdjacent(adjacent);
- }
- catch( std::exception &e )
- {
- return false;
- }
- }
- return true;
- }
-
-
- void
- AdjLsa::addNptEntries(Nlsr& pnlsr)
- {
- if ( getOrigRouter() !=pnlsr.getConfParameter().getRouterPrefix() )
- {
- pnlsr.getNpt().addNpteByDestName(getOrigRouter(), getOrigRouter(),pnlsr);
- }
- }
-
-
- void
- AdjLsa::removeNptEntries(Nlsr& pnlsr)
- {
- if ( getOrigRouter() !=pnlsr.getConfParameter().getRouterPrefix() )
- {
- pnlsr.getNpt().removeNpte(getOrigRouter(), getOrigRouter(),pnlsr);
- }
- }
-
-
-
- std::ostream&
- operator<<(std::ostream& os, AdjLsa& aLsa)
- {
- os<<"Adj Lsa: "<<endl;
- os<<" Origination Router: "<<aLsa.getOrigRouter()<<endl;
- os<<" Ls Type: "<<(unsigned short)aLsa.getLsType()<<endl;
- os<<" Ls Seq No: "<<(unsigned int)aLsa.getLsSeqNo()<<endl;
- os<<" Ls Lifetime: "<<(unsigned int)aLsa.getLifeTime()<<endl;
- os<<" No Link: "<<(unsigned int)aLsa.getNoLink()<<endl;
- os<<" Adjacents: "<<endl;
- int i=1;
- std::list<Adjacent> al=aLsa.getAdl().getAdjList();
- for( std::list<Adjacent>::iterator it=al.begin(); it != al.end(); it++)
- {
- os<<" Adjacent "<<i<<": "<<endl;
- os<<" Adjacent Name: "<<(*it).getName()<<endl;
- os<<" Connecting Face: "<<(*it).getConnectingFace()<<endl;
- os<<" Link Cost: "<<(*it).getLinkCost()<<endl;
- }
- return os;
- }
-
-}//namespace nlsr
diff --git a/src/nlsr_lsa.hpp b/src/nlsr_lsa.hpp
deleted file mode 100644
index 878d688..0000000
--- a/src/nlsr_lsa.hpp
+++ /dev/null
@@ -1,223 +0,0 @@
-#ifndef NLSR_LSA_HPP
-#define NLSR_LSA_HPP
-
-#include <ndn-cpp-dev/util/scheduler.hpp>
-#include "nlsr_adjacent.hpp"
-#include "nlsr_npl.hpp"
-#include "nlsr_adl.hpp"
-
-namespace nlsr
-{
-
- using namespace std;
- using namespace ndn;
-
- class Lsa
- {
- public:
- Lsa()
- : m_origRouter()
- , m_lsSeqNo()
- , m_lifeTime()
- , m_expiringEventId()
- {
- }
-
-
- void setLsType(uint8_t lst)
- {
- m_lsType=lst;
- }
-
- uint8_t getLsType()
- {
- return m_lsType;
- }
-
- void setLsSeqNo(uint32_t lsn)
- {
- m_lsSeqNo=lsn;
- }
-
- uint32_t getLsSeqNo()
- {
- return m_lsSeqNo;
- }
-
- string& getOrigRouter()
- {
- return m_origRouter;
- }
-
- void setOrigRouter(string& org)
- {
- m_origRouter=org;
- }
-
- uint32_t getLifeTime()
- {
- return m_lifeTime;
- }
-
- void setLifeTime(uint32_t lt)
- {
- m_lifeTime=lt;
- }
-
- void setExpiringEventId(ndn::EventId leei)
- {
- m_expiringEventId=leei;
- }
-
- ndn::EventId getExpiringEventId()
- {
- return m_expiringEventId;
- }
-
- protected:
- string m_origRouter;
- uint8_t m_lsType;
- uint32_t m_lsSeqNo;
- uint32_t m_lifeTime;
- ndn::EventId m_expiringEventId;
- };
-
- class NameLsa:public Lsa
- {
- public:
- NameLsa()
- : Lsa()
- , m_npl()
- {
- setLsType(1);
- }
-
- NameLsa(string origR, uint8_t lst, uint32_t lsn, uint32_t lt, Npl npl);
-
- Npl& getNpl()
- {
- return m_npl;
- }
-
- void addName(string& name)
- {
- m_npl.insert(name);
- }
-
- void removeName(string& name)
- {
- m_npl.remove(name);
- }
-
- string getKey();
-
- string getData();
- bool initializeFromContent(string content);
- void writeLog();
-
- private:
- Npl m_npl;
-
- };
-
- std::ostream&
- operator<<(std::ostream& os, NameLsa& nLsa);
-
- class AdjLsa: public Lsa
- {
- public:
- AdjLsa()
- : Lsa()
- , m_adl()
- {
- setLsType(2);
- }
-
- AdjLsa(string origR, uint8_t lst, uint32_t lsn, uint32_t lt,
- uint32_t nl ,Adl padl);
- Adl& getAdl()
- {
- return m_adl;
- }
-
- void addAdjacent(Adjacent adj)
- {
- m_adl.insert(adj);
- }
- string getKey();
- string getData();
- bool initializeFromContent(string content);
- uint32_t getNoLink()
- {
- return m_noLink;
- }
-
- bool isEqual(AdjLsa& alsa);
- void addNptEntries(Nlsr& pnlsr);
- void removeNptEntries(Nlsr& pnlsr);
-
- private:
- uint32_t m_noLink;
- Adl m_adl;
- };
-
- std::ostream&
- operator<<(std::ostream& os, AdjLsa& aLsa);
-
- class CorLsa:public Lsa
- {
- public:
- CorLsa()
- : Lsa()
- , m_corRad(0)
- , m_corTheta(0)
- {
- setLsType(3);
- }
-
- CorLsa(string origR, uint8_t lst, uint32_t lsn, uint32_t lt
- , double r, double theta);
- string getKey();
- string getData();
- bool initializeFromContent(string content);
- double getCorRadius()
- {
- if ( m_corRad >= 0 )
- {
- return m_corRad;
- }
- else
- {
- return -1;
- }
- }
-
- void setCorRadius(double cr)
- {
- m_corRad=cr;
- }
-
- double getCorTheta()
- {
- return m_corTheta;
- }
-
- void setCorTheta(double ct)
- {
- m_corTheta=ct;
- }
-
- bool isEqual(CorLsa& clsa);
- private:
- double m_corRad;
- double m_corTheta;
-
- };
-
- std::ostream&
- operator<<(std::ostream& os, CorLsa& cLsa);
-
-
-}//namespace nlsr
-
-#endif
diff --git a/src/nlsr_lsdb.cpp b/src/nlsr_lsdb.cpp
deleted file mode 100644
index f2e4433..0000000
--- a/src/nlsr_lsdb.cpp
+++ /dev/null
@@ -1,749 +0,0 @@
-#include<string>
-#include<utility>
-#include "nlsr_lsdb.hpp"
-#include "nlsr.hpp"
-#include "utility/nlsr_logger.hpp"
-
-#define THIS_FILE "nlsr_lsdb.cpp"
-
-namespace nlsr
-{
-
- using namespace std;
-
- void
- Lsdb::cancelScheduleLsaExpiringEvent(Nlsr& pnlsr, EventId eid)
- {
- pnlsr.getScheduler().cancelEvent(eid);
- }
-
- static bool
- nameLsaCompareByKey(NameLsa& nlsa1, string& key)
- {
- return nlsa1.getKey()==key;
- }
-
-
- bool
- Lsdb::buildAndInstallOwnNameLsa(Nlsr& pnlsr)
- {
- NameLsa nameLsa(pnlsr.getConfParameter().getRouterPrefix()
- , 1
- , pnlsr.getSm().getNameLsaSeq()+1
- , pnlsr.getConfParameter().getRouterDeadInterval()
- , pnlsr.getNpl() );
- pnlsr.getSm().setNameLsaSeq(pnlsr.getSm().getNameLsaSeq()+1);
- return installNameLsa(pnlsr,nameLsa);
- }
-
- std::pair<NameLsa&, bool>
- Lsdb::getNameLsa(string key)
- {
- std::list<NameLsa >::iterator it = std::find_if( m_nameLsdb.begin(),
- m_nameLsdb.end(),
- bind(nameLsaCompareByKey, _1, key));
- if( it != m_nameLsdb.end())
- {
- return std::make_pair(boost::ref((*it)),true);
- }
- NameLsa nlsa;
- return std::make_pair(boost::ref(nlsa),false);
- }
-
- bool
- Lsdb::isNameLsaNew(string key, uint64_t seqNo)
- {
- std::pair<NameLsa& , bool> nameLsaCheck=getNameLsa(key);
- if(nameLsaCheck.second)
- {
- if(nameLsaCheck.first.getLsSeqNo() < seqNo)
- {
- return true;
- }
- else
- {
- return false;
- }
- }
- return true;
- }
-
- ndn::EventId
- Lsdb::scheduleNameLsaExpiration(Nlsr& pnlsr, string key, int seqNo, int expTime)
- {
- return pnlsr.getScheduler().scheduleEvent(ndn::time::seconds(expTime),
- ndn::bind(&Lsdb::exprireOrRefreshNameLsa,
- this,boost::ref(pnlsr), key, seqNo));
- }
-
- bool
- Lsdb::installNameLsa(Nlsr& pnlsr, NameLsa &nlsa)
- {
- src::logger lg;
- int timeToExpire=m_lsaRefreshTime;
- std::pair<NameLsa& , bool> chkNameLsa=getNameLsa(nlsa.getKey());
- if ( !chkNameLsa.second )
- {
- BOOST_LOG(lg)<<" "<<THIS_FILE<<" "<<__LINE__<<": "<<"Adding name lsa";
- addNameLsa(nlsa);
- nlsa.writeLog();
- printNameLsdb();
- if ( nlsa.getOrigRouter() !=pnlsr.getConfParameter().getRouterPrefix() )
- {
- pnlsr.getNpt().addNpteByDestName(nlsa.getOrigRouter(),nlsa.getOrigRouter(),
- pnlsr);
- std::list<string> nameList=nlsa.getNpl().getNameList();
- for(std::list<string>::iterator it=nameList.begin(); it!=nameList.end(); it++)
- {
- if ( (*it) !=pnlsr.getConfParameter().getRouterPrefix())
- {
- pnlsr.getNpt().addNpteByDestName((*it),nlsa.getOrigRouter(),pnlsr);
- }
- }
- }
- if(nlsa.getOrigRouter() !=pnlsr.getConfParameter().getRouterPrefix() )
- {
- timeToExpire=nlsa.getLifeTime();
- }
- nlsa.setExpiringEventId(scheduleNameLsaExpiration( pnlsr,
- nlsa.getKey(), nlsa.getLsSeqNo(), timeToExpire));
- }
- else
- {
- if ( chkNameLsa.first.getLsSeqNo() < nlsa.getLsSeqNo() )
- {
- BOOST_LOG(lg)<<" "<<THIS_FILE<<" "<<__LINE__<<": "<<"Deleting name lsa";
- chkNameLsa.first.writeLog();
- chkNameLsa.first.setLsSeqNo(nlsa.getLsSeqNo());
- chkNameLsa.first.setLifeTime(nlsa.getLifeTime());
- chkNameLsa.first.getNpl().sort();
- nlsa.getNpl().sort();
- std::list<string> nameToAdd;
- std::set_difference(nlsa.getNpl().getNameList().begin(),
- nlsa.getNpl().getNameList().end(),
- chkNameLsa.first.getNpl().getNameList().begin(),
- chkNameLsa.first.getNpl().getNameList().end(),
- std::inserter(nameToAdd, nameToAdd.begin()));
- for(std::list<string>::iterator it=nameToAdd.begin(); it!=nameToAdd.end();
- ++it)
- {
- chkNameLsa.first.addName((*it));
- if ( nlsa.getOrigRouter() !=pnlsr.getConfParameter().getRouterPrefix() )
- {
- if ( (*it) !=pnlsr.getConfParameter().getRouterPrefix())
- {
- pnlsr.getNpt().addNpteByDestName((*it),nlsa.getOrigRouter(),pnlsr);
- }
- }
- }
- std::list<string> nameToRemove;
- std::set_difference(chkNameLsa.first.getNpl().getNameList().begin(),
- chkNameLsa.first.getNpl().getNameList().end(),
- nlsa.getNpl().getNameList().begin(),
- nlsa.getNpl().getNameList().end(),
- std::inserter(nameToRemove, nameToRemove.begin()));
- for(std::list<string>::iterator it=nameToRemove.begin();
- it!=nameToRemove.end(); ++it)
- {
- chkNameLsa.first.removeName((*it));
- if ( nlsa.getOrigRouter() !=pnlsr.getConfParameter().getRouterPrefix() )
- {
- if ( (*it) !=pnlsr.getConfParameter().getRouterPrefix())
- {
- pnlsr.getNpt().removeNpte((*it),nlsa.getOrigRouter(),pnlsr);
- }
- }
- }
- if(nlsa.getOrigRouter() !=pnlsr.getConfParameter().getRouterPrefix() )
- {
- timeToExpire=nlsa.getLifeTime();
- }
- cancelScheduleLsaExpiringEvent(pnlsr,
- chkNameLsa.first.getExpiringEventId());
- chkNameLsa.first.setExpiringEventId(scheduleNameLsaExpiration( pnlsr,
- nlsa.getKey(), nlsa.getLsSeqNo(), timeToExpire));
- BOOST_LOG(lg)<<" "<<THIS_FILE<<" "<<__LINE__<<": "<<"Adding name lsa";
- chkNameLsa.first.writeLog();
- }
- }
- return true;
- }
-
- bool
- Lsdb::addNameLsa(NameLsa &nlsa)
- {
- std::list<NameLsa >::iterator it = std::find_if( m_nameLsdb.begin(),
- m_nameLsdb.end(), bind(nameLsaCompareByKey, _1, nlsa.getKey()));
- if( it == m_nameLsdb.end())
- {
- m_nameLsdb.push_back(nlsa);
- return true;
- }
- return false;
- }
-
- bool
- Lsdb::removeNameLsa(Nlsr& pnlsr, string& key)
- {
- src::logger lg;
- std::list<NameLsa >::iterator it = std::find_if( m_nameLsdb.begin(),
- m_nameLsdb.end(),
- bind(nameLsaCompareByKey, _1, key));
- if ( it != m_nameLsdb.end() )
- {
- BOOST_LOG(lg)<<" "<<THIS_FILE<<" "<<__LINE__<<": "<<"Deleting name lsa";
- (*it).writeLog();
- if ( (*it).getOrigRouter() != pnlsr.getConfParameter().getRouterPrefix() )
- {
- pnlsr.getNpt().removeNpte((*it).getOrigRouter(),(*it).getOrigRouter(),pnlsr);
- for( std::list<string>::iterator nit=(*it).getNpl().getNameList().begin();
- nit!=(*it).getNpl().getNameList().end(); ++nit)
- {
- if ( (*nit) !=pnlsr.getConfParameter().getRouterPrefix())
- {
- pnlsr.getNpt().removeNpte((*nit),(*it).getOrigRouter(),pnlsr);
- }
- }
- }
- m_nameLsdb.erase(it);
- return true;
- }
- return false;
- }
-
- bool
- Lsdb::doesNameLsaExist(string key)
- {
- std::list<NameLsa >::iterator it = std::find_if( m_nameLsdb.begin(),
- m_nameLsdb.end(),
- bind(nameLsaCompareByKey, _1, key));
- if( it == m_nameLsdb.end())
- {
- return false;
- }
- return true;
- }
-
- void
- Lsdb::printNameLsdb()
- {
- cout<<"---------------Name LSDB-------------------"<<endl;
- for( std::list<NameLsa>::iterator it=m_nameLsdb.begin();
- it!= m_nameLsdb.end() ; it++)
- {
- cout<< (*it) <<endl;
- }
- }
-
-// Cor LSA and LSDB related Functions start here
-
-
- static bool
- corLsaCompareByKey(CorLsa& clsa, string& key)
- {
- return clsa.getKey()==key;
- }
-
- bool
- Lsdb::buildAndInstallOwnCorLsa(Nlsr& pnlsr)
- {
- CorLsa corLsa(pnlsr.getConfParameter().getRouterPrefix()
- , 3
- , pnlsr.getSm().getCorLsaSeq()+1
- , pnlsr.getConfParameter().getRouterDeadInterval()
- , pnlsr.getConfParameter().getCorR()
- , pnlsr.getConfParameter().getCorTheta() );
- pnlsr.getSm().setCorLsaSeq(pnlsr.getSm().getCorLsaSeq()+1);
- installCorLsa(pnlsr, corLsa);
- return true;
- }
-
- std::pair<CorLsa&, bool>
- Lsdb::getCorLsa(string key)
- {
- std::list< CorLsa >::iterator it = std::find_if( m_corLsdb.begin(),
- m_corLsdb.end(),
- bind(corLsaCompareByKey, _1, key));
- if( it != m_corLsdb.end())
- {
- return std::make_pair(boost::ref((*it)), true);
- }
- CorLsa clsa;
- return std::make_pair(boost::ref(clsa),false);
- }
-
- bool
- Lsdb::isCorLsaNew(string key, uint64_t seqNo)
- {
- std::pair<CorLsa& , bool> corLsaCheck=getCorLsa(key);
- if(corLsaCheck.second)
- {
- if(corLsaCheck.first.getLsSeqNo() < seqNo)
- {
- return true;
- }
- else
- {
- return false;
- }
- }
- return true;
- }
-
- ndn::EventId
- Lsdb::scheduleCorLsaExpiration(Nlsr& pnlsr, string key, int seqNo, int expTime)
- {
- return pnlsr.getScheduler().scheduleEvent(ndn::time::seconds(expTime),
- ndn::bind(&Lsdb::exprireOrRefreshCorLsa,
- this,boost::ref(pnlsr),key,seqNo));
- }
-
- bool
- Lsdb::installCorLsa(Nlsr& pnlsr, CorLsa &clsa)
- {
- int timeToExpire=m_lsaRefreshTime;
- std::pair<CorLsa& , bool> chkCorLsa=getCorLsa(clsa.getKey());
- if ( !chkCorLsa.second )
- {
- addCorLsa(clsa);
- printCorLsdb(); //debugging purpose
- if ( clsa.getOrigRouter() !=pnlsr.getConfParameter().getRouterPrefix() )
- {
- pnlsr.getNpt().addNpteByDestName(clsa.getOrigRouter(),clsa.getOrigRouter(),
- pnlsr);
- }
- if (pnlsr.getConfParameter().getIsHyperbolicCalc() >=1 )
- {
- pnlsr.getRoutingTable().scheduleRoutingTableCalculation(pnlsr);
- }
- if(clsa.getOrigRouter() !=pnlsr.getConfParameter().getRouterPrefix() )
- {
- timeToExpire=clsa.getLifeTime();
- }
- scheduleCorLsaExpiration(pnlsr,clsa.getKey(),
- clsa.getLsSeqNo(), timeToExpire);
- }
- else
- {
- if ( chkCorLsa.first.getLsSeqNo() < clsa.getLsSeqNo() )
- {
- chkCorLsa.first.setLsSeqNo(clsa.getLsSeqNo());
- chkCorLsa.first.setLifeTime(clsa.getLifeTime());
- if ( !chkCorLsa.first.isEqual(clsa) )
- {
- chkCorLsa.first.setCorRadius(clsa.getCorRadius());
- chkCorLsa.first.setCorTheta(clsa.getCorTheta());
- if (pnlsr.getConfParameter().getIsHyperbolicCalc() >=1 )
- {
- pnlsr.getRoutingTable().scheduleRoutingTableCalculation(pnlsr);
- }
- }
- if(clsa.getOrigRouter() !=pnlsr.getConfParameter().getRouterPrefix() )
- {
- timeToExpire=clsa.getLifeTime();
- }
- cancelScheduleLsaExpiringEvent(pnlsr,
- chkCorLsa.first.getExpiringEventId());
- chkCorLsa.first.setExpiringEventId(scheduleCorLsaExpiration(pnlsr,
- clsa.getKey(),
- clsa.getLsSeqNo(), timeToExpire));
- }
- }
- return true;
- }
-
- bool
- Lsdb::addCorLsa(CorLsa& clsa)
- {
- std::list<CorLsa >::iterator it = std::find_if( m_corLsdb.begin(),
- m_corLsdb.end(),
- bind(corLsaCompareByKey, _1, clsa.getKey()));
- if( it == m_corLsdb.end())
- {
- m_corLsdb.push_back(clsa);
- return true;
- }
- return false;
- }
-
- bool
- Lsdb::removeCorLsa(Nlsr& pnlsr, string& key)
- {
- std::list<CorLsa >::iterator it = std::find_if( m_corLsdb.begin(),
- m_corLsdb.end(),
- bind(corLsaCompareByKey, _1, key));
- if ( it != m_corLsdb.end() )
- {
- if ( (*it).getOrigRouter() !=pnlsr.getConfParameter().getRouterPrefix() )
- {
- pnlsr.getNpt().removeNpte((*it).getOrigRouter(),(*it).getOrigRouter(),pnlsr);
- }
- m_corLsdb.erase(it);
- return true;
- }
- return false;
- }
-
- bool
- Lsdb::doesCorLsaExist(string key)
- {
- std::list<CorLsa >::iterator it = std::find_if( m_corLsdb.begin(),
- m_corLsdb.end(),
- bind(corLsaCompareByKey, _1, key));
- if( it == m_corLsdb.end())
- {
- return false;
- }
- return true;
- }
-
- void
- Lsdb::printCorLsdb() //debugging
- {
- cout<<"---------------Cor LSDB-------------------"<<endl;
- for( std::list<CorLsa>::iterator it=m_corLsdb.begin();
- it!= m_corLsdb.end() ; it++)
- {
- cout<< (*it) <<endl;
- }
- }
-
-
-// Adj LSA and LSDB related function starts here
-
- static bool
- adjLsaCompareByKey(AdjLsa& alsa, string& key)
- {
- return alsa.getKey()==key;
- }
-
-
- void
- Lsdb::scheduledAdjLsaBuild(Nlsr& pnlsr)
- {
- cout<<"scheduledAdjLsaBuild Called"<<endl;
- pnlsr.setIsBuildAdjLsaSheduled(0);
- if( pnlsr.getAdl().isAdjLsaBuildable(pnlsr))
- {
- int adjBuildCount=pnlsr.getAdjBuildCount();
- if(adjBuildCount>0 )
- {
- if (pnlsr.getAdl().getNumOfActiveNeighbor()>0)
- {
- buildAndInstallOwnAdjLsa(pnlsr);
- }
- else
- {
- string key=pnlsr.getConfParameter().getRouterPrefix()+"/2";
- removeAdjLsa(pnlsr,key);
- pnlsr.getRoutingTable().scheduleRoutingTableCalculation(pnlsr);
- }
- pnlsr.setAdjBuildCount(pnlsr.getAdjBuildCount()-adjBuildCount);
- }
- }
- else
- {
- pnlsr.setIsBuildAdjLsaSheduled(1);
- int schedulingTime=pnlsr.getConfParameter().getInterestRetryNumber()*
- pnlsr.getConfParameter().getInterestResendTime();
- pnlsr.getScheduler().scheduleEvent(ndn::time::seconds(schedulingTime),
- ndn::bind(&Lsdb::scheduledAdjLsaBuild, pnlsr.getLsdb(),
- boost::ref(pnlsr)));
- }
- }
-
-
- bool
- Lsdb::addAdjLsa(AdjLsa &alsa)
- {
- std::list<AdjLsa >::iterator it = std::find_if( m_adjLsdb.begin(),
- m_adjLsdb.end(),
- bind(adjLsaCompareByKey, _1, alsa.getKey()));
- if( it == m_adjLsdb.end())
- {
- m_adjLsdb.push_back(alsa);
- return true;
- }
- return false;
- }
-
- std::pair<AdjLsa& , bool>
- Lsdb::getAdjLsa(string key)
- {
- std::list<AdjLsa >::iterator it = std::find_if( m_adjLsdb.begin(),
- m_adjLsdb.end(),
- bind(adjLsaCompareByKey, _1, key));
- if( it != m_adjLsdb.end())
- {
- return std::make_pair(boost::ref((*it)),true);
- }
- AdjLsa alsa;
- return std::make_pair(boost::ref(alsa),false);
- }
-
-
- bool
- Lsdb::isAdjLsaNew(string key, uint64_t seqNo)
- {
- std::pair<AdjLsa& , bool> adjLsaCheck=getAdjLsa(key);
- if(adjLsaCheck.second)
- {
- if(adjLsaCheck.first.getLsSeqNo() < seqNo)
- {
- return true;
- }
- else
- {
- return false;
- }
- }
- return true;
- }
-
-
- ndn::EventId
- Lsdb::scheduleAdjLsaExpiration(Nlsr& pnlsr, string key, int seqNo, int expTime)
- {
- return pnlsr.getScheduler().scheduleEvent(ndn::time::seconds(expTime),
- ndn::bind(&Lsdb::exprireOrRefreshAdjLsa,
- this,boost::ref(pnlsr),key,seqNo));
- }
-
- bool
- Lsdb::installAdjLsa(Nlsr& pnlsr, AdjLsa &alsa)
- {
- int timeToExpire=m_lsaRefreshTime;
- std::pair<AdjLsa& , bool> chkAdjLsa=getAdjLsa(alsa.getKey());
- if ( !chkAdjLsa.second )
- {
- addAdjLsa(alsa);
- alsa.addNptEntries(pnlsr);
- pnlsr.getRoutingTable().scheduleRoutingTableCalculation(pnlsr);
- if(alsa.getOrigRouter() !=pnlsr.getConfParameter().getRouterPrefix() )
- {
- timeToExpire=alsa.getLifeTime();
- }
- scheduleAdjLsaExpiration(pnlsr,alsa.getKey(),
- alsa.getLsSeqNo(),timeToExpire);
- }
- else
- {
- if ( chkAdjLsa.first.getLsSeqNo() < alsa.getLsSeqNo() )
- {
- chkAdjLsa.first.setLsSeqNo(alsa.getLsSeqNo());
- chkAdjLsa.first.setLifeTime(alsa.getLifeTime());
- if ( ! chkAdjLsa.first.isEqual(alsa))
- {
- chkAdjLsa.first.getAdl().reset();
- chkAdjLsa.first.getAdl().addAdjacentsFromAdl(alsa.getAdl());
- pnlsr.getRoutingTable().scheduleRoutingTableCalculation(pnlsr);
- }
- if(alsa.getOrigRouter() !=pnlsr.getConfParameter().getRouterPrefix() )
- {
- timeToExpire=alsa.getLifeTime();
- }
- cancelScheduleLsaExpiringEvent(pnlsr,
- chkAdjLsa.first.getExpiringEventId());
- chkAdjLsa.first.setExpiringEventId(scheduleAdjLsaExpiration(pnlsr,
- alsa.getKey(), alsa.getLsSeqNo(),timeToExpire));
- }
- }
- return true;
- }
-
- bool
- Lsdb::buildAndInstallOwnAdjLsa(Nlsr& pnlsr)
- {
- AdjLsa adjLsa(pnlsr.getConfParameter().getRouterPrefix()
- , 2
- , pnlsr.getSm().getAdjLsaSeq()+1
- , pnlsr.getConfParameter().getRouterDeadInterval()
- , pnlsr.getAdl().getNumOfActiveNeighbor()
- , pnlsr.getAdl() );
- pnlsr.getSm().setAdjLsaSeq(pnlsr.getSm().getAdjLsaSeq()+1);
- string lsaPrefix=pnlsr.getConfParameter().getChronosyncLsaPrefix()
- + pnlsr.getConfParameter().getRouterPrefix();
- pnlsr.getSlh().publishRoutingUpdate(pnlsr.getSm(),lsaPrefix);
- return pnlsr.getLsdb().installAdjLsa(pnlsr, adjLsa);
- }
-
- bool
- Lsdb::removeAdjLsa(Nlsr& pnlsr, string& key)
- {
- std::list<AdjLsa >::iterator it = std::find_if( m_adjLsdb.begin(),
- m_adjLsdb.end(),
- bind(adjLsaCompareByKey, _1, key));
- if ( it != m_adjLsdb.end() )
- {
- (*it).removeNptEntries(pnlsr);
- m_adjLsdb.erase(it);
- return true;
- }
- return false;
- }
-
- bool
- Lsdb::doesAdjLsaExist(string key)
- {
- std::list< AdjLsa >::iterator it = std::find_if( m_adjLsdb.begin(),
- m_adjLsdb.end(),
- bind(adjLsaCompareByKey, _1, key));
- if( it == m_adjLsdb.end())
- {
- return false;
- }
- return true;
- }
-
- std::list<AdjLsa>&
- Lsdb::getAdjLsdb()
- {
- return m_adjLsdb;
- }
-
- void
- Lsdb::setLsaRefreshTime(int lrt)
- {
- m_lsaRefreshTime=lrt;
- }
-
- void
- Lsdb::setThisRouterPrefix(string trp)
- {
- m_thisRouterPrefix=trp;
- }
-
- void
- Lsdb::exprireOrRefreshNameLsa(Nlsr& pnlsr, string lsaKey, int seqNo)
- {
- cout<<"Lsdb::exprireOrRefreshNameLsa Called "<<endl;
- cout<<"LSA Key : "<<lsaKey<<" Seq No: "<<seqNo<<endl;
- std::pair<NameLsa& , bool> chkNameLsa=getNameLsa(lsaKey);
- if( chkNameLsa.second )
- {
- cout<<" LSA Exists with seq no: "<<chkNameLsa.first.getLsSeqNo()<<endl;
- if ( chkNameLsa.first.getLsSeqNo() == seqNo )
- {
- if(chkNameLsa.first.getOrigRouter() == m_thisRouterPrefix )
- {
- src::logger lg;
- BOOST_LOG(lg)<<" "<<THIS_FILE<<" "<<__LINE__<<": "<<"Deleting name lsa";
- chkNameLsa.first.writeLog();
- cout<<"Own Name LSA, so refreshing name LSA"<<endl;
- chkNameLsa.first.setLsSeqNo(chkNameLsa.first.getLsSeqNo()+1);
- pnlsr.getSm().setNameLsaSeq(chkNameLsa.first.getLsSeqNo());
- BOOST_LOG(lg)<<" "<<THIS_FILE<<" "<<__LINE__<<": "<<"Adding name lsa";
- chkNameLsa.first.writeLog();
- // publish routing update
- string lsaPrefix=pnlsr.getConfParameter().getChronosyncLsaPrefix()
- + pnlsr.getConfParameter().getRouterPrefix();
- pnlsr.getSlh().publishRoutingUpdate(pnlsr.getSm(),lsaPrefix);
- }
- else
- {
- cout<<"Other's Name LSA, so removing form LSDB"<<endl;
- removeNameLsa(pnlsr, lsaKey);
- }
- }
- }
- }
-
- void
- Lsdb::exprireOrRefreshAdjLsa(Nlsr& pnlsr, string lsaKey, int seqNo)
- {
- cout<<"Lsdb::exprireOrRefreshAdjLsa Called "<<endl;
- cout<<"LSA Key : "<<lsaKey<<" Seq No: "<<seqNo<<endl;
- std::pair<AdjLsa& , bool> chkAdjLsa=getAdjLsa(lsaKey);
- if( chkAdjLsa.second )
- {
- cout<<" LSA Exists with seq no: "<<chkAdjLsa.first.getLsSeqNo()<<endl;
- if ( chkAdjLsa.first.getLsSeqNo() == seqNo )
- {
- if(chkAdjLsa.first.getOrigRouter() == m_thisRouterPrefix )
- {
- cout<<"Own Adj LSA, so refreshing Adj LSA"<<endl;
- chkAdjLsa.first.setLsSeqNo(chkAdjLsa.first.getLsSeqNo()+1);
- pnlsr.getSm().setAdjLsaSeq(chkAdjLsa.first.getLsSeqNo());
- // publish routing update
- string lsaPrefix=pnlsr.getConfParameter().getChronosyncLsaPrefix()
- + pnlsr.getConfParameter().getRouterPrefix();
- pnlsr.getSlh().publishRoutingUpdate(pnlsr.getSm(),lsaPrefix);
- }
- else
- {
- cout<<"Other's Adj LSA, so removing form LSDB"<<endl;
- removeAdjLsa(pnlsr, lsaKey);
- }
- // schedule Routing table calculaiton
- pnlsr.getRoutingTable().scheduleRoutingTableCalculation(pnlsr);
- }
- }
- }
-
- void
- Lsdb::exprireOrRefreshCorLsa(Nlsr& pnlsr, string lsaKey, int seqNo)
- {
- cout<<"Lsdb::exprireOrRefreshCorLsa Called "<<endl;
- cout<<"LSA Key : "<<lsaKey<<" Seq No: "<<seqNo<<endl;
- std::pair<CorLsa& , bool> chkCorLsa=getCorLsa(lsaKey);
- if( chkCorLsa.second )
- {
- cout<<" LSA Exists with seq no: "<<chkCorLsa.first.getLsSeqNo()<<endl;
- if ( chkCorLsa.first.getLsSeqNo() == seqNo )
- {
- if(chkCorLsa.first.getOrigRouter() == m_thisRouterPrefix )
- {
- cout<<"Own Cor LSA, so refreshing Cor LSA"<<endl;
- chkCorLsa.first.setLsSeqNo(chkCorLsa.first.getLsSeqNo()+1);
- pnlsr.getSm().setCorLsaSeq(chkCorLsa.first.getLsSeqNo());
- // publish routing update
- string lsaPrefix=pnlsr.getConfParameter().getChronosyncLsaPrefix()
- + pnlsr.getConfParameter().getRouterPrefix();
- pnlsr.getSlh().publishRoutingUpdate(pnlsr.getSm(),lsaPrefix);
- }
- else
- {
- cout<<"Other's Cor LSA, so removing form LSDB"<<endl;
- removeCorLsa(pnlsr, lsaKey);
- }
- if (pnlsr.getConfParameter().getIsHyperbolicCalc() >=1 )
- {
- pnlsr.getRoutingTable().scheduleRoutingTableCalculation(pnlsr);
- }
- }
- }
- }
-
-
- void
- Lsdb::printAdjLsdb()
- {
- cout<<"---------------Adj LSDB-------------------"<<endl;
- for( std::list<AdjLsa>::iterator it=m_adjLsdb.begin();
- it!= m_adjLsdb.end() ; it++)
- {
- cout<< (*it) <<endl;
- }
- }
-
-//-----utility function -----
- bool
- Lsdb::doesLsaExist(string key, int lsType)
- {
- if ( lsType == 1)
- {
- return doesNameLsaExist(key);
- }
- else if ( lsType == 2)
- {
- return doesAdjLsaExist(key);
- }
- else if ( lsType == 3)
- {
- return doesCorLsaExist(key);
- }
- return false;
- }
-
-}//namespace nlsr
-
diff --git a/src/nlsr_lsdb.hpp b/src/nlsr_lsdb.hpp
deleted file mode 100644
index 444001a..0000000
--- a/src/nlsr_lsdb.hpp
+++ /dev/null
@@ -1,90 +0,0 @@
-#ifndef NLSR_LSDB_HPP
-#define NLSR_LSDB_HPP
-
-#include <utility>
-#include "nlsr_lsa.hpp"
-
-namespace nlsr
-{
-
- using namespace std;
-
- class Nlsr;
-
- class Lsdb
- {
- public:
- Lsdb()
- : m_lsaRefreshTime(0)
- {
- }
-
-
- bool doesLsaExist(string key, int lsType);
- // function related to Name LSDB
- bool buildAndInstallOwnNameLsa(Nlsr& pnlsr);
- std::pair<NameLsa&, bool> getNameLsa(string key);
- bool installNameLsa(Nlsr& pnlsr, NameLsa &nlsa);
- bool removeNameLsa(Nlsr& pnlsr, string& key);
- bool isNameLsaNew(string key, uint64_t seqNo);
- void printNameLsdb(); //debugging
-
- //function related to Cor LSDB
- bool buildAndInstallOwnCorLsa(Nlsr& pnlsr);
- std::pair<CorLsa&, bool> getCorLsa(string key);
- bool installCorLsa(Nlsr& pnlsr, CorLsa &clsa);
- bool removeCorLsa(Nlsr& pnlsr, string& key);
- bool isCorLsaNew(string key, uint64_t seqNo);
- void printCorLsdb(); //debugging
-
- //function related to Adj LSDB
- void scheduledAdjLsaBuild(Nlsr& pnlsr);
- bool buildAndInstallOwnAdjLsa(Nlsr& pnlsr);
- bool removeAdjLsa(Nlsr& pnlsr, string& key);
- bool isAdjLsaNew(string key, uint64_t seqNo);
- bool installAdjLsa(Nlsr& pnlsr, AdjLsa &alsa);
- std::pair<AdjLsa& , bool> getAdjLsa(string key);
- std::list<AdjLsa>& getAdjLsdb();
- void printAdjLsdb();
-
- //void scheduleRefreshLsdb(Nlsr& pnlsr, int interval);
- void setLsaRefreshTime(int lrt);
- void setThisRouterPrefix(string trp);
-
- private:
- bool addNameLsa(NameLsa &nlsa);
- bool doesNameLsaExist(string key);
-
-
- bool addCorLsa(CorLsa& clsa);
- bool doesCorLsaExist(string key);
-
- bool addAdjLsa(AdjLsa &alsa);
- bool doesAdjLsaExist(string key);
-
- ndn::EventId
- scheduleNameLsaExpiration(Nlsr& pnlsr, string key, int seqNo, int expTime);
- void exprireOrRefreshNameLsa(Nlsr& pnlsr, string lsaKey, int seqNo);
- ndn::EventId
- scheduleAdjLsaExpiration(Nlsr& pnlsr, string key, int seqNo, int expTime);
- void exprireOrRefreshAdjLsa(Nlsr& pnlsr, string lsaKey, int seqNo);
- ndn::EventId
- scheduleCorLsaExpiration(Nlsr& pnlsr, string key, int seqNo, int expTime);
- void exprireOrRefreshCorLsa(Nlsr& pnlsr, string lsaKey, int seqNo);
-
-
- private:
- void cancelScheduleLsaExpiringEvent(Nlsr& pnlsr, EventId eid);
-
- std::list<NameLsa> m_nameLsdb;
- std::list<AdjLsa> m_adjLsdb;
- std::list<CorLsa> m_corLsdb;
-
- int m_lsaRefreshTime;
- string m_thisRouterPrefix;
-
- };
-
-}//namespace nlsr
-
-#endif
diff --git a/src/nlsr_npl.cpp b/src/nlsr_npl.cpp
deleted file mode 100644
index e6cd819..0000000
--- a/src/nlsr_npl.cpp
+++ /dev/null
@@ -1,73 +0,0 @@
-#include<iostream>
-#include<algorithm>
-
-#include "nlsr_npl.hpp"
-#include "utility/nlsr_logger.hpp"
-
-#define THIS_FILE "nlsr_npl.cpp"
-
-namespace nlsr
-{
-
- using namespace std;
-
- Npl::Npl()
- {
- }
-
- Npl::~Npl()
- {
- }
-
- static bool
- nameCompare(string& s1, string& s2)
- {
- return s1==s2;
- }
-
- int
- Npl::insert(string& name)
- {
- std::list<string >::iterator it = std::find_if( m_nameList.begin(),
- m_nameList.end(),
- bind(&nameCompare, _1 , name));
- if( it != m_nameList.end() )
- {
- return -1;
- }
- m_nameList.push_back(name);
- return 0;
- }
-
- int
- Npl::remove(string& name)
- {
- std::list<string >::iterator it = std::find_if( m_nameList.begin(),
- m_nameList.end(),
- bind(&nameCompare, _1 , name));
- if( it != m_nameList.end() )
- {
- m_nameList.erase(it);
- }
- return -1;
- }
-
- void
- Npl::sort()
- {
- m_nameList.sort();
- }
-
- void
- Npl::print()
- {
- int i=1;
- for( std::list<string>::iterator it=m_nameList.begin(); it != m_nameList.end();
- it++)
- {
- cout<<"Name "<<i<<" : "<<(*it)<<endl;
- i++;
- }
- }
-
-}//namespace nlsr
diff --git a/src/nlsr_npl.hpp b/src/nlsr_npl.hpp
deleted file mode 100644
index b69b352..0000000
--- a/src/nlsr_npl.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-#ifndef NPL_HPP
-#define NPL_HPP
-
-#include<list>
-#include<string>
-#include <ndn-cpp-dev/face.hpp>
-
-namespace nlsr
-{
-
- using namespace std;
-
- class Npl
- {
-
- public:
- Npl();
- ~Npl();
-
- int insert(string& name);
- int remove(string& name);
- void sort();
- int getSize()
- {
- return m_nameList.size();
- }
- std::list<string>& getNameList()
- {
- return m_nameList;
- }
- void print();
-
- private:
- std::list<string> m_nameList;
-
- };
-
-}//namespace nlsr
-
-#endif
diff --git a/src/nlsr_sm.cpp b/src/nlsr_sm.cpp
deleted file mode 100644
index e44c433..0000000
--- a/src/nlsr_sm.cpp
+++ /dev/null
@@ -1,100 +0,0 @@
-#include <string>
-#include <iostream>
-#include <fstream>
-#include <pwd.h>
-#include <cstdlib>
-#include <unistd.h>
-
-#include "nlsr_sm.hpp"
-#include "utility/nlsr_logger.hpp"
-
-#define THIS_FILE "nlsr_sm.cpp"
-
-namespace nlsr
-{
-
- using namespace std;
-
- void
- SequencingManager::splittSequenceNo(uint64_t seqNo)
- {
- m_combinedSeqNo=seqNo;
- m_adjLsaSeq = (m_combinedSeqNo & 0xFFFFF);
- m_corLsaSeq = ((m_combinedSeqNo >> 20) & 0xFFFFF);
- m_nameLsaSeq = ((m_combinedSeqNo >> 40) & 0xFFFFF);
- }
-
- void
- SequencingManager::combineSequenceNo()
- {
- m_combinedSeqNo=0;
- m_combinedSeqNo = m_combinedSeqNo | m_adjLsaSeq;
- m_combinedSeqNo = m_combinedSeqNo | (m_corLsaSeq<<20);
- m_combinedSeqNo = m_combinedSeqNo | (m_nameLsaSeq<<40);
- }
-
- void
- SequencingManager::writeSeqNoToFile()
- {
- std::ofstream outputFile(m_seqFileNameWithPath.c_str(),ios::binary);
- outputFile<<m_combinedSeqNo;
- outputFile.close();
- }
-
- void
- SequencingManager::initiateSeqNoFromFile()
- {
- cout<<"Seq File Name: "<< m_seqFileNameWithPath<<endl;
- std::ifstream inputFile(m_seqFileNameWithPath.c_str(),ios::binary);
- if ( inputFile.good() )
- {
- inputFile>>m_combinedSeqNo;
- splittSequenceNo(m_combinedSeqNo);
- m_adjLsaSeq+=10;
- m_corLsaSeq+=10;
- m_nameLsaSeq+=10;
- combineSequenceNo();
- inputFile.close();
- }
- else
- {
- splittSequenceNo(0);
- }
- }
-
- void
- SequencingManager::setSeqFileName(string filePath)
- {
- m_seqFileNameWithPath=filePath;
- if( m_seqFileNameWithPath.empty() )
- {
- m_seqFileNameWithPath=getUserHomeDirectory();
- }
- m_seqFileNameWithPath=m_seqFileNameWithPath+"/nlsrSeqNo.txt";
- }
-
- string
- SequencingManager::getUserHomeDirectory()
- {
- string homeDirPath(getpwuid(getuid())->pw_dir);
- if( homeDirPath.empty() )
- {
- homeDirPath = getenv("HOME");
- }
- return homeDirPath;
- }
-
- ostream&
- operator <<(ostream& os, const SequencingManager& sm)
- {
- std::cout<<"----SequencingManager----"<<std::endl;
- std::cout<<"Adj LSA seq no: "<<sm.getAdjLsaSeq()<<endl;
- std::cout<<"Cor LSA Seq no: "<<sm.getCorLsaSeq()<<endl;
- std::cout<<"Name LSA Seq no: "<<sm.getNameLsaSeq()<<endl;
- std::cout<<"Combined LSDB Seq no: "<<sm.getCombinedSeqNo()<<endl;
- return os;
- }
-
-}//namespace nlsr
-
-
diff --git a/src/nlsr_sm.hpp b/src/nlsr_sm.hpp
deleted file mode 100644
index 4861009..0000000
--- a/src/nlsr_sm.hpp
+++ /dev/null
@@ -1,97 +0,0 @@
-#ifndef NLSR_SM_HPP
-#define NLSR_SM_HPP
-
-#include<list>
-#include<string>
-#include <ndn-cpp-dev/face.hpp>
-
-namespace nlsr
-{
-
- using namespace std;
-
- class SequencingManager
- {
- public:
- SequencingManager()
- : m_nameLsaSeq(0)
- , m_adjLsaSeq(0)
- , m_corLsaSeq(0)
- , m_combinedSeqNo(0)
- , m_seqFileNameWithPath()
- {
- }
-
- SequencingManager(uint64_t seqNo)
- {
- splittSequenceNo(seqNo);
- }
-
- SequencingManager(uint64_t nlsn, uint64_t alsn, uint64_t clsn)
- {
- m_nameLsaSeq=nlsn;
- m_adjLsaSeq=alsn;
- m_corLsaSeq=clsn;
- combineSequenceNo();
- }
-
- uint64_t getNameLsaSeq() const
- {
- return m_nameLsaSeq;
- }
-
- void setNameLsaSeq(uint64_t nlsn)
- {
- m_nameLsaSeq=nlsn;
- combineSequenceNo();
- }
-
- uint64_t getAdjLsaSeq() const
- {
- return m_adjLsaSeq;
- }
-
- void setAdjLsaSeq(uint64_t alsn)
- {
- m_adjLsaSeq=alsn;
- combineSequenceNo();
- }
-
- uint64_t getCorLsaSeq() const
- {
- return m_corLsaSeq;
- }
-
- void setCorLsaSeq(uint64_t clsn)
- {
- m_corLsaSeq=clsn;
- combineSequenceNo();
- }
-
- uint64_t getCombinedSeqNo() const
- {
- return m_combinedSeqNo;
- }
-
- void writeSeqNoToFile();
- void initiateSeqNoFromFile();
- void setSeqFileName(string filePath);
- string getUserHomeDirectory();
-
- private:
- void splittSequenceNo(uint64_t seqNo);
- void combineSequenceNo();
-
-
- private:
- uint64_t m_nameLsaSeq;
- uint64_t m_adjLsaSeq;
- uint64_t m_corLsaSeq;
- uint64_t m_combinedSeqNo;
- string m_seqFileNameWithPath;
- };
-
-
- ostream& operator <<(ostream& os, const SequencingManager& sm);
-}//namespace nlsr
-#endif
diff --git a/src/npl.cpp b/src/npl.cpp
new file mode 100644
index 0000000..557640f
--- /dev/null
+++ b/src/npl.cpp
@@ -0,0 +1,70 @@
+#include <iostream>
+#include <algorithm>
+
+#include "npl.hpp"
+
+namespace nlsr {
+
+using namespace std;
+
+Npl::Npl()
+{
+}
+
+Npl::~Npl()
+{
+}
+
+static bool
+nameCompare(string& s1, string& s2)
+{
+ return s1 == s2;
+}
+
+int
+Npl::insert(string& name)
+{
+ std::list<string>::iterator it = std::find_if(m_nameList.begin(),
+ m_nameList.end(),
+ bind(&nameCompare, _1 , name));
+ if (it != m_nameList.end())
+ {
+ return -1;
+ }
+ m_nameList.push_back(name);
+ return 0;
+}
+
+int
+Npl::remove(string& name)
+{
+ std::list<string>::iterator it = std::find_if(m_nameList.begin(),
+ m_nameList.end(),
+ bind(&nameCompare, _1 , name));
+ if (it != m_nameList.end())
+ {
+ m_nameList.erase(it);
+ }
+ return -1;
+}
+
+void
+Npl::sort()
+{
+ m_nameList.sort();
+}
+
+void
+Npl::print()
+{
+ int i = 1;
+ for (std::list<string>::iterator it = m_nameList.begin();
+ it != m_nameList.end();
+ it++)
+ {
+ cout << "Name " << i << " : " << (*it) << endl;
+ i++;
+ }
+}
+
+}//namespace nlsr
diff --git a/src/npl.hpp b/src/npl.hpp
new file mode 100644
index 0000000..91de260
--- /dev/null
+++ b/src/npl.hpp
@@ -0,0 +1,48 @@
+#ifndef NPL_HPP
+#define NPL_HPP
+
+#include <list>
+#include <string>
+#include <ndn-cpp-dev/face.hpp>
+
+namespace nlsr {
+class Npl
+{
+
+public:
+ Npl();
+
+ ~Npl();
+
+ int
+ insert(std::string& name);
+
+ int
+ remove(std::string& name);
+
+ void
+ sort();
+
+ int
+ getSize()
+ {
+ return m_nameList.size();
+ }
+
+ std::list<std::string>&
+ getNameList()
+ {
+ return m_nameList;
+ }
+
+ void
+ print();
+
+private:
+ std::list<std::string> m_nameList;
+
+};
+
+}//namespace nlsr
+
+#endif //NPL_HPP
diff --git a/src/route/fib-entry.cpp b/src/route/fib-entry.cpp
new file mode 100644
index 0000000..ddb5dbd
--- /dev/null
+++ b/src/route/fib-entry.cpp
@@ -0,0 +1,47 @@
+#include <list>
+#include "fib-entry.hpp"
+#include "nexthop.hpp"
+
+namespace nlsr {
+
+using namespace std;
+
+bool
+FibEntry::isEqualNextHops(Nhl& nhlOther)
+{
+ if (m_nhl.getSize() != nhlOther.getSize())
+ {
+ return false;
+ }
+ else
+ {
+ int nhCount = 0;
+ std::list<NextHop>::iterator it1, it2;
+ for (it1 = m_nhl.getNextHopList().begin(),
+ it2 = nhlOther.getNextHopList().begin() ;
+ it1 != m_nhl.getNextHopList().end() ; it1++, it2++)
+ {
+ if (it1->getConnectingFace() == it2->getConnectingFace())
+ {
+ it1->setRouteCost(it2->getRouteCost());
+ nhCount++;
+ }
+ else
+ {
+ break;
+ }
+ }
+ return nhCount == m_nhl.getSize();
+ }
+}
+
+ostream&
+operator<<(ostream& os, FibEntry fe)
+{
+ os << "Name Prefix: " << fe.getName() << endl;
+ os << "Time to Refresh: " << fe.getTimeToRefresh() << endl;
+ os << fe.getNhl() << endl;
+ return os;
+}
+
+}//namespace nlsr
diff --git a/src/route/fib-entry.hpp b/src/route/fib-entry.hpp
new file mode 100644
index 0000000..66e2e8b
--- /dev/null
+++ b/src/route/fib-entry.hpp
@@ -0,0 +1,98 @@
+#ifndef NLSR_FE_HPP
+#define NLSR_FE_HPP
+
+#include <list>
+#include <iostream>
+#include <ndn-cpp-dev/util/scheduler.hpp>
+
+#include "nexthop.hpp"
+#include "nhl.hpp"
+
+namespace nlsr {
+
+using namespace std;
+
+class FibEntry
+{
+public:
+ FibEntry()
+ : m_name()
+ , m_timeToRefresh(0)
+ , m_seqNo(0)
+ , m_nhl()
+ {
+ }
+
+ FibEntry(string n)
+ : m_timeToRefresh(0)
+ , m_seqNo(0)
+ , m_nhl()
+ {
+ m_name = n;
+ }
+
+ std::string
+ getName() const
+ {
+ return m_name;
+ }
+
+ Nhl&
+ getNhl()
+ {
+ return m_nhl;
+ }
+
+ int
+ getTimeToRefresh() const
+ {
+ return m_timeToRefresh;
+ }
+
+ void
+ setTimeToRefresh(int ttr)
+ {
+ m_timeToRefresh = ttr;
+ }
+
+ void
+ setExpiringEventId(ndn::EventId feid)
+ {
+ m_expiringEventId = feid;
+ }
+
+ ndn::EventId
+ getExpiringEventId() const
+ {
+ return m_expiringEventId;
+ }
+
+ void
+ setSeqNo(int fsn)
+ {
+ m_seqNo = fsn;
+ }
+
+ int
+ getSeqNo()
+ {
+ return m_seqNo;
+ }
+
+ bool
+ isEqualNextHops(Nhl& nhlOther);
+
+private:
+ std::string m_name;
+ int m_timeToRefresh;
+ ndn::EventId m_expiringEventId;
+ int m_seqNo;
+ Nhl m_nhl;
+};
+
+std::ostream&
+operator<<(std::ostream& os, FibEntry fe);
+
+} //namespace nlsr
+
+#endif //NLSR_FE_HPP
diff --git a/src/route/fib.cpp b/src/route/fib.cpp
new file mode 100644
index 0000000..5304d0e
--- /dev/null
+++ b/src/route/fib.cpp
@@ -0,0 +1,186 @@
+#include <list>
+#include "fib-entry.hpp"
+#include "fib.hpp"
+#include "nhl.hpp"
+#include "nlsr.hpp"
+
+
+namespace nlsr {
+
+using namespace std;
+using namespace ndn;
+
+static bool
+fibEntryNameCompare(FibEntry& fe, string name)
+{
+ return fe.getName() == name ;
+}
+
+void
+Fib::cancelScheduledExpiringEvent(Nlsr& pnlsr, EventId eid)
+{
+ pnlsr.getScheduler().cancelEvent(eid);
+}
+
+
+ndn::EventId
+Fib::scheduleEntryRefreshing(Nlsr& pnlsr, string name, int feSeqNum,
+ int refreshTime)
+{
+ return pnlsr.getScheduler().scheduleEvent(ndn::time::seconds(refreshTime),
+ ndn::bind(&Fib::refreshEntry, this, name, feSeqNum));
+}
+
+void
+Fib::refreshEntry(string name, int feSeqNum)
+{
+}
+
+void
+Fib::remove(Nlsr& pnlsr, string name)
+{
+ std::list<FibEntry>::iterator it = std::find_if(m_table.begin(),
+ m_table.end(), bind(&fibEntryNameCompare, _1, name));
+ if (it != m_table.end())
+ {
+ for (std::list<NextHop>::iterator nhit =
+ (*it).getNhl().getNextHopList().begin();
+ nhit != (*it).getNhl().getNextHopList().begin(); nhit++)
+ {
+ //remove entry from NDN-FIB
+ }
+ cancelScheduledExpiringEvent(pnlsr, (*it).getExpiringEventId());
+ m_table.erase(it);
+ }
+}
+
+
+void
+Fib::update(Nlsr& pnlsr, string name, Nhl& nextHopList)
+{
+ std::cout << "Fib::updateFib Called" << std::endl;
+ int startFace = 0;
+ int endFace = getNumberOfFacesForName(nextHopList,
+ pnlsr.getConfParameter().getMaxFacesPerPrefix());
+ std::list<FibEntry>::iterator it = std::find_if(m_table.begin(),
+ m_table.end(),
+ bind(&fibEntryNameCompare, _1, name));
+ if (it == m_table.end())
+ {
+ if (nextHopList.getSize() > 0)
+ {
+ nextHopList.sort();
+ FibEntry newEntry(name);
+ std::list<NextHop> nhl = nextHopList.getNextHopList();
+ std::list<NextHop>::iterator nhit = nhl.begin();
+ for (int i = startFace; i < endFace && nhit != nhl.end(); ++nhit, i++)
+ {
+ newEntry.getNhl().addNextHop((*nhit));
+ //Add entry to NDN-FIB
+ }
+ newEntry.getNhl().sort();
+ newEntry.setTimeToRefresh(m_refreshTime);
+ newEntry.setSeqNo(1);
+ newEntry.setExpiringEventId(scheduleEntryRefreshing(pnlsr,
+ name , 1, m_refreshTime));
+ m_table.push_back(newEntry);
+ }
+ }
+ else
+ {
+ std::cout << "Old FIB Entry" << std::endl;
+ if (nextHopList.getSize() > 0)
+ {
+ nextHopList.sort();
+ if (!it->isEqualNextHops(nextHopList))
+ {
+ std::list<NextHop> nhl = nextHopList.getNextHopList();
+ std::list<NextHop>::iterator nhit = nhl.begin();
+ // Add first Entry to NDN-FIB
+ removeHop(pnlsr, it->getNhl(), nhit->getConnectingFace());
+ it->getNhl().reset();
+ it->getNhl().addNextHop((*nhit));
+ ++startFace;
+ ++nhit;
+ for (int i = startFace; i < endFace && nhit != nhl.end(); ++nhit, i++)
+ {
+ it->getNhl().addNextHop((*nhit));
+ //Add Entry to NDN_FIB
+ }
+ }
+ it->setTimeToRefresh(m_refreshTime);
+ cancelScheduledExpiringEvent(pnlsr, it->getExpiringEventId());
+ it->setSeqNo(it->getSeqNo() + 1);
+ (*it).setExpiringEventId(scheduleEntryRefreshing(pnlsr,
+ it->getName() ,
+ it->getSeqNo(), m_refreshTime));
+ }
+ else
+ {
+ remove(pnlsr, name);
+ }
+ }
+}
+
+
+
+void
+Fib::clean(Nlsr& pnlsr)
+{
+ for (std::list<FibEntry>::iterator it = m_table.begin(); it != m_table.end();
+ ++it)
+ {
+ for (std::list<NextHop>::iterator nhit =
+ (*it).getNhl().getNextHopList().begin();
+ nhit != (*it).getNhl().getNextHopList().begin(); nhit++)
+ {
+ cancelScheduledExpiringEvent(pnlsr, (*it).getExpiringEventId());
+ //Remove entry from NDN-FIB
+ }
+ }
+ if (m_table.size() > 0)
+ {
+ m_table.clear();
+ }
+}
+
+int
+Fib::getNumberOfFacesForName(Nhl& nextHopList, int maxFacesPerPrefix)
+{
+ int endFace = 0;
+ if ((maxFacesPerPrefix == 0) || (nextHopList.getSize() <= maxFacesPerPrefix))
+ {
+ return nextHopList.getSize();
+ }
+ else
+ {
+ return maxFacesPerPrefix;
+ }
+ return endFace;
+}
+
+void
+Fib::removeHop(Nlsr& pnlsr, Nhl& nl, int doNotRemoveHopFaceId)
+{
+ for (std::list<NextHop>::iterator it = nl.getNextHopList().begin();
+ it != nl.getNextHopList().end(); ++it)
+ {
+ if (it->getConnectingFace() != doNotRemoveHopFaceId)
+ {
+ //Remove FIB Entry from NDN-FIB
+ }
+ }
+}
+
+void
+Fib::print()
+{
+ cout << "-------------------FIB-----------------------------" << endl;
+ for (std::list<FibEntry>::iterator it = m_table.begin(); it != m_table.end();
+ ++it)
+ {
+ cout << (*it);
+ }
+}
+
+} //namespace nlsr
diff --git a/src/route/fib.hpp b/src/route/fib.hpp
new file mode 100644
index 0000000..f042362
--- /dev/null
+++ b/src/route/fib.hpp
@@ -0,0 +1,63 @@
+#ifndef NLSR_FIB_HPP
+#define NLSR_FIB_HPP
+
+#include <list>
+#include "fib-entry.hpp"
+
+namespace nlsr {
+
+class Nlsr;
+
+using namespace std;
+using namespace ndn;
+
+class Fib
+{
+public:
+ Fib()
+ : m_table()
+ , m_refreshTime(0)
+ {
+ }
+
+ void
+ remove(Nlsr& pnlsr, string name);
+
+ void
+ update(Nlsr& pnlsr, string name, Nhl& nextHopList);
+
+ void
+ clean(Nlsr& pnlsr);
+
+ void
+ setEntryRefreshTime(int fert)
+ {
+ m_refreshTime = fert;
+ }
+
+ void
+ print();
+
+private:
+ void
+ removeHop(Nlsr& pnlsr, Nhl& nl, int doNotRemoveHopFaceId);
+
+ int
+ getNumberOfFacesForName(Nhl& nextHopList, int maxFacesPerPrefix);
+
+ ndn::EventId
+ scheduleEntryRefreshing(Nlsr& pnlsr, string name, int feSeqNum,
+ int refreshTime);
+ void
+ cancelScheduledExpiringEvent(Nlsr& pnlsr, EventId eid);
+
+ void
+ refreshEntry(string name, int feSeqNum);
+
+private:
+ std::list<FibEntry> m_table;
+ int m_refreshTime;
+};
+
+}//namespace nlsr
+#endif //NLSR_FIB_HPP
diff --git a/src/route/map.cpp b/src/route/map.cpp
new file mode 100644
index 0000000..e7ab979
--- /dev/null
+++ b/src/route/map.cpp
@@ -0,0 +1,125 @@
+#include <iostream>
+#include <list>
+
+#include "nlsr.hpp"
+#include "adjacent.hpp"
+#include "lsa.hpp"
+#include "lsdb.hpp"
+#include "map.hpp"
+
+namespace nlsr {
+
+using namespace std;
+
+ostream&
+operator<< (ostream& os, MapEntry& mpe)
+{
+ os << "MapEntry: ( Router: " << mpe.getRouter() << " Mapping No: ";
+ os << mpe.getMappingNumber() << " )" << endl;
+ return os;
+}
+
+static bool
+mapEntryCompareByRouter(MapEntry& mpe1, string& rtrName)
+{
+ return mpe1.getRouter() == rtrName;
+}
+
+static bool
+mapEntryCompareByMappingNo(MapEntry& mpe1, int mappingNo)
+{
+ return mpe1.getMappingNumber() == mappingNo;
+}
+
+void
+Map::addElement(string& rtrName)
+{
+ MapEntry me(rtrName, m_mappingIndex);
+ if (addElement(me))
+ {
+ m_mappingIndex++;
+ }
+}
+
+bool
+Map::addElement(MapEntry& mpe)
+{
+ //cout << mpe;
+ std::list<MapEntry>::iterator it = std::find_if(m_table.begin(),
+ m_table.end(),
+ bind(&mapEntryCompareByRouter, _1, mpe.getRouter()));
+ if (it == m_table.end())
+ {
+ m_table.push_back(mpe);
+ return true;
+ }
+ return false;
+}
+
+string
+Map::getRouterNameByMappingNo(int mn)
+{
+ std::list<MapEntry>::iterator it = std::find_if(m_table.begin(),
+ m_table.end(),
+ bind(&mapEntryCompareByMappingNo,
+ _1, mn));
+ if (it != m_table.end())
+ {
+ return (*it).getRouter();
+ }
+ return "";
+}
+
+int
+Map::getMappingNoByRouterName(string& rName)
+{
+ std::list<MapEntry>::iterator it = std::find_if(m_table.begin(),
+ m_table.end(),
+ bind(&mapEntryCompareByRouter,
+ _1, rName));
+ if (it != m_table.end())
+ {
+ return (*it).getMappingNumber();
+ }
+ return -1;
+}
+
+void
+Map::createFromAdjLsdb(Nlsr& pnlsr)
+{
+ std::list<AdjLsa> adjLsdb = pnlsr.getLsdb().getAdjLsdb();
+ for (std::list<AdjLsa>::iterator it = adjLsdb.begin();
+ it != adjLsdb.end() ; it++)
+ {
+ string linkStartRouter = (*it).getOrigRouter();
+ addElement(linkStartRouter);
+ std::list<Adjacent> adl = (*it).getAdl().getAdjList();
+ for (std::list<Adjacent>::iterator itAdl = adl.begin();
+ itAdl != adl.end() ; itAdl++)
+ {
+ string linkEndRouter = (*itAdl).getName();
+ addElement(linkEndRouter);
+ }
+ }
+}
+
+void
+Map::reset()
+{
+ m_table.clear();
+ m_mappingIndex = 0;
+}
+
+ostream&
+operator<<(ostream& os, Map& map)
+{
+ os << "---------------Map----------------------" << endl;
+ std::list<MapEntry> ml = map.getMapList();
+ for (std::list<MapEntry>::iterator it = ml.begin(); it != ml.end() ; it++)
+ {
+ os << (*it);
+ }
+ return os;
+}
+
+} //namespace nlsr
diff --git a/src/route/map.hpp b/src/route/map.hpp
new file mode 100644
index 0000000..9c9e6e8
--- /dev/null
+++ b/src/route/map.hpp
@@ -0,0 +1,101 @@
+#ifndef NLSR_MAP_HPP
+#define NLSR_MAP_HPP
+
+#include <iostream>
+#include <list>
+
+#include <ndn-cpp-dev/face.hpp>
+
+namespace nlsr {
+
+class Nlsr;
+
+class MapEntry
+{
+public:
+ MapEntry()
+ : m_router()
+ , m_mappingNumber(-1)
+ {
+ }
+
+ ~MapEntry()
+ {
+ }
+
+ MapEntry(std::string rtr, int mn)
+ {
+ m_router = rtr;
+ m_mappingNumber = mn;
+ }
+
+ std::string
+ getRouter() const
+ {
+ return m_router;
+ }
+
+ int
+ getMappingNumber() const
+ {
+ return m_mappingNumber;
+ }
+
+private:
+ std::string m_router;
+ int m_mappingNumber;
+};
+
+std::ostream&
+operator<<(std::ostream& os, MapEntry& mpe);
+
+class Map
+{
+public:
+ Map()
+ : m_mappingIndex(0)
+ {
+ }
+
+
+ void
+ addElement(std::string& rtrName);
+
+ void
+ createFromAdjLsdb(Nlsr& pnlsr);
+
+ std::string
+ getRouterNameByMappingNo(int mn);
+
+ int
+ getMappingNoByRouterName(std::string& rName);
+
+ void
+ reset();
+
+ std::list<MapEntry>&
+ getMapList()
+ {
+ return m_table;
+ }
+
+ int
+ getMapSize() const
+ {
+ return m_table.size();
+ }
+
+
+private:
+ bool
+ addElement(MapEntry& mpe);
+
+ int m_mappingIndex;
+ std::list<MapEntry> m_table;
+};
+
+std::ostream&
+operator<<(std::ostream& os, Map& map);
+
+} // namespace nlsr
+#endif //NLSR_MAP_HPP
diff --git a/src/route/nexthop.cpp b/src/route/nexthop.cpp
new file mode 100644
index 0000000..0a375b0
--- /dev/null
+++ b/src/route/nexthop.cpp
@@ -0,0 +1,13 @@
+#include "nexthop.hpp"
+
+namespace nlsr {
+
+std::ostream&
+operator<<(std::ostream& os, NextHop& nh)
+{
+ os << "Face: " << nh.getConnectingFace() << " Route Cost: " <<
+ nh.getRouteCost();
+ return os;
+}
+
+}//namespace nlsr
diff --git a/src/route/nexthop.hpp b/src/route/nexthop.hpp
new file mode 100644
index 0000000..7153e0f
--- /dev/null
+++ b/src/route/nexthop.hpp
@@ -0,0 +1,57 @@
+#ifndef NLSR_NEXTHOP_HPP
+#define NLSR_NEXTHOP_HPP
+
+#include <iostream>
+
+namespace nlsr {
+class NextHop
+{
+public:
+ NextHop()
+ : m_connectingFace(0)
+ , m_routeCost(0)
+ {
+ }
+
+ NextHop(int cf, double rc)
+ {
+ m_connectingFace = cf;
+ m_routeCost = rc;
+ }
+
+ int
+ getConnectingFace() const
+ {
+ return m_connectingFace;
+ }
+
+ void
+ setConnectingFace(int cf)
+ {
+ m_connectingFace = cf;
+ }
+
+ double
+ getRouteCost() const
+ {
+ return m_routeCost;
+ }
+
+ void
+ setRouteCost(double rc)
+ {
+ m_routeCost = rc;
+ }
+
+private:
+ int m_connectingFace;
+ double m_routeCost;
+};
+
+
+std::ostream&
+operator<<(std::ostream& os, NextHop& nh);
+
+}//namespace nlsr
+
+#endif //NLSR_NEXTHOP_HPP
diff --git a/src/route/nhl.cpp b/src/route/nhl.cpp
new file mode 100644
index 0000000..50d6303
--- /dev/null
+++ b/src/route/nhl.cpp
@@ -0,0 +1,88 @@
+#include <iostream>
+#include "nhl.hpp"
+#include "nexthop.hpp"
+
+namespace nlsr {
+
+using namespace std;
+
+static bool
+nexthopCompare(NextHop& nh1, NextHop& nh2)
+{
+ return nh1.getConnectingFace() == nh2.getConnectingFace();
+}
+
+static bool
+nexthopRemoveCompare(NextHop& nh1, NextHop& nh2)
+{
+ return (nh1.getConnectingFace() == nh2.getConnectingFace() &&
+ nh1.getRouteCost() == nh2.getRouteCost()) ;
+}
+
+static bool
+nextHopSortingComparator(const NextHop& nh1, const NextHop& nh2)
+{
+ return nh1.getRouteCost() < nh2.getRouteCost();
+}
+
+/**
+Add next hop to the Next Hop list
+If next hop is new it is added
+If next hop already exists in next
+hop list then updates the route
+cost with new next hop's route cost
+*/
+
+void
+Nhl::addNextHop(NextHop& nh)
+{
+ std::list<NextHop>::iterator it = std::find_if(m_nexthopList.begin(),
+ m_nexthopList.end(),
+ bind(&nexthopCompare, _1, nh));
+ if (it == m_nexthopList.end())
+ {
+ m_nexthopList.push_back(nh);
+ }
+ if ((*it).getRouteCost() > nh.getRouteCost())
+ {
+ (*it).setRouteCost(nh.getRouteCost());
+ }
+}
+
+/**
+Remove a next hop only if both next hop face and route cost are same
+
+*/
+
+void
+Nhl::removeNextHop(NextHop& nh)
+{
+ std::list<NextHop>::iterator it = std::find_if(m_nexthopList.begin(),
+ m_nexthopList.end(),
+ bind(&nexthopRemoveCompare, _1, nh));
+ if (it != m_nexthopList.end())
+ {
+ m_nexthopList.erase(it);
+ }
+}
+
+void
+Nhl::sort()
+{
+ m_nexthopList.sort(nextHopSortingComparator);
+}
+
+ostream&
+operator<<(ostream& os, Nhl& nhl)
+{
+ std::list<NextHop> nexthopList = nhl.getNextHopList();
+ int i = 1;
+ for (std::list<NextHop>::iterator it = nexthopList.begin();
+ it != nexthopList.end() ; it++, i++)
+ {
+ os << "Nexthop " << i << ": " << (*it) << endl;
+ }
+ return os;
+}
+
+}//namespace nlsr
diff --git a/src/route/nhl.hpp b/src/route/nhl.hpp
new file mode 100644
index 0000000..ef43373
--- /dev/null
+++ b/src/route/nhl.hpp
@@ -0,0 +1,63 @@
+#ifndef NLSR_NHL_HPP
+#define NLSR_NHL_HPP
+
+#include <ndn-cpp-dev/face.hpp>
+#include <list>
+#include <iostream>
+
+#include "nexthop.hpp"
+#include "adjacent.hpp"
+
+namespace nlsr {
+
+class Nhl
+{
+public:
+ Nhl()
+ : m_nexthopList()
+ {
+ }
+
+ ~Nhl()
+ {
+ }
+ void
+ addNextHop(NextHop& nh);
+
+ void
+ removeNextHop(NextHop& nh);
+
+ void
+ sort();
+
+ int
+ getSize()
+ {
+ return m_nexthopList.size();
+ }
+
+ void
+ reset()
+ {
+ if (m_nexthopList.size() > 0)
+ {
+ m_nexthopList.clear();
+ }
+ }
+
+ std::list<NextHop>&
+ getNextHopList()
+ {
+ return m_nexthopList;
+ }
+
+private:
+ std::list<NextHop> m_nexthopList;
+};
+
+std::ostream&
+operator<<(std::ostream& os, Nhl& nhl);
+
+}//namespace nlsr
+
+#endif //NLSR_NLH_HPP
diff --git a/src/route/nlsr_fe.cpp b/src/route/nlsr_fe.cpp
deleted file mode 100644
index cc724fe..0000000
--- a/src/route/nlsr_fe.cpp
+++ /dev/null
@@ -1,51 +0,0 @@
-#include <list>
-#include "nlsr_fe.hpp"
-#include "nlsr_nexthop.hpp"
-#include "utility/nlsr_logger.hpp"
-
-#define THIS_FILE "nlsr_fe.cpp"
-
-namespace nlsr
-{
-
- using namespace std;
-
- bool
- FibEntry::isEqualNextHops(Nhl& nhlOther)
- {
- if ( m_nhl.getSize() != nhlOther.getSize() )
- {
- return false;
- }
- else
- {
- int nhCount=0;
- std::list<NextHop>::iterator it1, it2;
- for ( it1=m_nhl.getNextHopList().begin(),
- it2 = nhlOther.getNextHopList().begin() ;
- it1 != m_nhl.getNextHopList().end() ; it1++, it2++)
- {
- if (it1->getConnectingFace() == it2->getConnectingFace() )
- {
- it1->setRouteCost(it2->getRouteCost());
- nhCount++;
- }
- else
- {
- break;
- }
- }
- return nhCount == m_nhl.getSize();
- }
- }
-
- ostream&
- operator<<(ostream& os, FibEntry fe)
- {
- os<<"Name Prefix: "<<fe.getName()<<endl;
- os<<"Time to Refresh: "<<fe.getTimeToRefresh()<<endl;
- os<<fe.getNhl()<<endl;
- return os;
- }
-
-}//namespace nlsr
diff --git a/src/route/nlsr_fe.hpp b/src/route/nlsr_fe.hpp
deleted file mode 100644
index 3cac2fc..0000000
--- a/src/route/nlsr_fe.hpp
+++ /dev/null
@@ -1,89 +0,0 @@
-#ifndef NLSR_FE_HPP
-#define NLSR_FE_HPP
-
-#include<list>
-#include <iostream>
-#include <ndn-cpp-dev/util/scheduler.hpp>
-
-#include "nlsr_nexthop.hpp"
-#include "nlsr_nhl.hpp"
-
-namespace nlsr
-{
-
- using namespace std;
-
- class FibEntry
- {
- public:
- FibEntry()
- : m_name()
- , m_timeToRefresh(0)
- , m_seqNo(0)
- , m_nhl()
- {
- }
-
- FibEntry(string n)
- : m_timeToRefresh(0)
- , m_seqNo(0)
- , m_nhl()
- {
- m_name=n;
- }
-
- string getName()
- {
- return m_name;
- }
-
- Nhl& getNhl()
- {
- return m_nhl;
- }
-
- int getTimeToRefresh()
- {
- return m_timeToRefresh;
- }
-
- void setTimeToRefresh(int ttr)
- {
- m_timeToRefresh=ttr;
- }
-
- void setExpiringEventId(ndn::EventId feid)
- {
- m_expiringEventId=feid;
- }
-
- ndn::EventId getExpiringEventId()
- {
- return m_expiringEventId;
- }
-
- void setSeqNo(int fsn)
- {
- m_seqNo=fsn;
- }
-
- int getSeqNo()
- {
- return m_seqNo;
- }
-
- bool isEqualNextHops(Nhl& nhlOther);
-
- private:
- string m_name;
- int m_timeToRefresh;
- ndn::EventId m_expiringEventId;
- int m_seqNo;
- Nhl m_nhl;
- };
-
- ostream& operator<<(ostream& os,FibEntry fe);
-
-} //namespace nlsr
-
-#endif
diff --git a/src/route/nlsr_fib.cpp b/src/route/nlsr_fib.cpp
deleted file mode 100644
index 141bf3a..0000000
--- a/src/route/nlsr_fib.cpp
+++ /dev/null
@@ -1,186 +0,0 @@
-#include<list>
-#include "nlsr_fe.hpp"
-#include "nlsr_fib.hpp"
-#include "nlsr_nhl.hpp"
-#include "nlsr.hpp"
-#include "utility/nlsr_logger.hpp"
-
-#define THIS_FILE "nlsr_fib.cpp"
-
-namespace nlsr
-{
-
- using namespace std;
- using namespace ndn;
-
- static bool
- fibEntryNameCompare(FibEntry& fe, string name)
- {
- return fe.getName() == name ;
- }
-
- void
- Fib::cancelScheduledExpiringEvent(Nlsr& pnlsr, EventId eid)
- {
- pnlsr.getScheduler().cancelEvent(eid);
- }
-
-
- ndn::EventId
- Fib::scheduleEntryRefreshing(Nlsr& pnlsr, string name, int feSeqNum,
- int refreshTime)
- {
- return pnlsr.getScheduler().scheduleEvent(ndn::time::seconds(refreshTime),
- ndn::bind(&Fib::refreshEntry,this,name,feSeqNum));
- }
-
- void
- Fib::refreshEntry(string name, int feSeqNum)
- {
- }
-
- void
- Fib::remove(Nlsr& pnlsr, string name)
- {
- std::list<FibEntry >::iterator it = std::find_if( m_table.begin(),
- m_table.end(), bind(&fibEntryNameCompare, _1, name));
- if( it != m_table.end() )
- {
- for(std::list<NextHop>::iterator nhit=(*it).getNhl().getNextHopList().begin();
- nhit != (*it).getNhl().getNextHopList().begin(); nhit++)
- {
- //remove entry from NDN-FIB
- }
- cancelScheduledExpiringEvent(pnlsr, (*it).getExpiringEventId());
- m_table.erase(it);
- }
- }
-
-
- void
- Fib::update(Nlsr& pnlsr,string name, Nhl& nextHopList)
- {
- std::cout<<"Fib::updateFib Called"<<std::endl;
- int startFace=0;
- int endFace=getNumberOfFacesForName(nextHopList,
- pnlsr.getConfParameter().getMaxFacesPerPrefix());
- std::list<FibEntry >::iterator it = std::find_if( m_table.begin(),
- m_table.end(),
- bind(&fibEntryNameCompare, _1, name));
- if( it == m_table.end() )
- {
- if( nextHopList.getSize() > 0 )
- {
- nextHopList.sort();
- FibEntry newEntry(name);
- std::list<NextHop> nhl=nextHopList.getNextHopList();
- std::list<NextHop>::iterator nhit=nhl.begin();
- for(int i=startFace; i< endFace && nhit!=nhl.end(); ++nhit, i++)
- {
- newEntry.getNhl().addNextHop((*nhit));
- //Add entry to NDN-FIB
- }
- newEntry.getNhl().sort();
- newEntry.setTimeToRefresh(m_refreshTime);
- newEntry.setSeqNo(1);
- newEntry.setExpiringEventId(scheduleEntryRefreshing(pnlsr,
- name ,1,m_refreshTime));
- m_table.push_back(newEntry);
- }
- }
- else
- {
- std::cout<<"Old FIB Entry"<<std::endl;
- if( nextHopList.getSize() > 0 )
- {
- nextHopList.sort();
- if ( !it->isEqualNextHops(nextHopList) )
- {
- std::list<NextHop> nhl=nextHopList.getNextHopList();
- std::list<NextHop>::iterator nhit=nhl.begin();
- // Add first Entry to NDN-FIB
- removeHop(pnlsr, it->getNhl(),nhit->getConnectingFace());
- it->getNhl().reset();
- it->getNhl().addNextHop((*nhit));
- ++startFace;
- ++nhit;
- for(int i=startFace; i< endFace && nhit!=nhl.end(); ++nhit, i++)
- {
- it->getNhl().addNextHop((*nhit));
- //Add Entry to NDN_FIB
- }
- }
- it->setTimeToRefresh(m_refreshTime);
- cancelScheduledExpiringEvent(pnlsr, it->getExpiringEventId());
- it->setSeqNo(it->getSeqNo()+1);
- (*it).setExpiringEventId(scheduleEntryRefreshing(pnlsr,
- it->getName() ,
- it->getSeqNo(),m_refreshTime));
- }
- else
- {
- remove(pnlsr,name);
- }
- }
- }
-
-
-
- void Fib::clean(Nlsr& pnlsr)
- {
- for( std::list<FibEntry >::iterator it=m_table.begin(); it != m_table.end();
- ++it)
- {
- for(std::list<NextHop>::iterator nhit=(*it).getNhl().getNextHopList().begin();
- nhit != (*it).getNhl().getNextHopList().begin(); nhit++)
- {
- cancelScheduledExpiringEvent(pnlsr,(*it).getExpiringEventId());
- //Remove entry from NDN-FIB
- }
- }
- if ( m_table.size() > 0 )
- {
- m_table.clear();
- }
- }
-
- int
- Fib::getNumberOfFacesForName(Nhl& nextHopList, int maxFacesPerPrefix)
- {
- int endFace=0;
- if((maxFacesPerPrefix == 0) || (nextHopList.getSize() <= maxFacesPerPrefix))
- {
- return nextHopList.getSize();
- }
- else
- {
- return maxFacesPerPrefix;
- }
- return endFace;
- }
-
- void
- Fib::removeHop(Nlsr& pnlsr, Nhl& nl, int doNotRemoveHopFaceId)
- {
- for( std::list<NextHop >::iterator it=nl.getNextHopList().begin();
- it != nl.getNextHopList().end(); ++it)
- {
- if ( it->getConnectingFace() != doNotRemoveHopFaceId )
- {
- //Remove FIB Entry from NDN-FIB
- }
- }
- }
-
- void
- Fib::print()
- {
- cout<<"-------------------FIB-----------------------------"<<endl;
- for(std::list<FibEntry>::iterator it = m_table.begin(); it!=m_table.end();
- ++it)
- {
- cout<<(*it);
- }
- }
-
-} //namespace nlsr
diff --git a/src/route/nlsr_fib.hpp b/src/route/nlsr_fib.hpp
deleted file mode 100644
index b36d0d8..0000000
--- a/src/route/nlsr_fib.hpp
+++ /dev/null
@@ -1,49 +0,0 @@
-#ifndef NLSR_FIB_HPP
-#define NLSR_FIB_HPP
-
-#include <list>
-#include "nlsr_fe.hpp"
-
-namespace nlsr
-{
-
- class Nlsr;
-
- using namespace std;
- using namespace ndn;
-
- class Fib
- {
- public:
- Fib()
- : m_table()
- , m_refreshTime(0)
- {
- }
-
- void remove(Nlsr& pnlsr, string name);
- void update(Nlsr& pnlsr, string name, Nhl& nextHopList);
- void clean(Nlsr& pnlsr);
- void setEntryRefreshTime(int fert)
- {
- m_refreshTime=fert;
- }
-
- void print();
-
- private:
- void removeHop(Nlsr& pnlsr, Nhl& nl, int doNotRemoveHopFaceId);
- int getNumberOfFacesForName(Nhl& nextHopList, int maxFacesPerPrefix);
- ndn::EventId
- scheduleEntryRefreshing(Nlsr& pnlsr, string name, int feSeqNum,
- int refreshTime);
- void cancelScheduledExpiringEvent(Nlsr& pnlsr, EventId eid);
- void refreshEntry(string name, int feSeqNum);
-
- private:
- std::list<FibEntry> m_table;
- int m_refreshTime;
- };
-
-}//namespace nlsr
-#endif
diff --git a/src/route/nlsr_map.cpp b/src/route/nlsr_map.cpp
deleted file mode 100644
index f08f1ae..0000000
--- a/src/route/nlsr_map.cpp
+++ /dev/null
@@ -1,127 +0,0 @@
-#include<iostream>
-#include<list>
-
-#include "nlsr.hpp"
-#include "nlsr_adjacent.hpp"
-#include "nlsr_lsa.hpp"
-#include "nlsr_lsdb.hpp"
-#include "nlsr_map.hpp"
-#include "utility/nlsr_logger.hpp"
-
-#define THIS_FILE "nlsr_map.cpp"
-
-namespace nlsr
-{
-
- using namespace std;
-
- ostream&
- operator<<(ostream& os, MapEntry& mpe)
- {
- os<<"MapEntry: ( Router: "<<mpe.getRouter()<<" Mapping No: ";
- os<<mpe.getMappingNumber()<<" )"<<endl;
- return os;
- }
-
- static bool
- mapEntryCompareByRouter(MapEntry& mpe1, string& rtrName)
- {
- return mpe1.getRouter()==rtrName;
- }
-
- static bool
- mapEntryCompareByMappingNo(MapEntry& mpe1, int mappingNo)
- {
- return mpe1.getMappingNumber()==mappingNo;
- }
-
- void
- Map::addElement(string& rtrName)
- {
- MapEntry me(rtrName,m_mappingIndex);
- if ( addElement(me) )
- {
- m_mappingIndex++;
- }
- }
-
- bool
- Map::addElement(MapEntry& mpe)
- {
- //cout << mpe;
- std::list<MapEntry >::iterator it = std::find_if( m_table.begin(),
- m_table.end(),
- bind(&mapEntryCompareByRouter, _1, mpe.getRouter()));
- if ( it == m_table.end() )
- {
- m_table.push_back(mpe);
- return true;
- }
- return false;
- }
-
- string
- Map::getRouterNameByMappingNo(int mn)
- {
- std::list<MapEntry >::iterator it = std::find_if( m_table.begin(),
- m_table.end(),
- bind(&mapEntryCompareByMappingNo, _1, mn));
- if ( it != m_table.end() )
- {
- return (*it).getRouter();
- }
- return "";
- }
-
- int
- Map::getMappingNoByRouterName(string& rName)
- {
- std::list<MapEntry >::iterator it = std::find_if( m_table.begin(),
- m_table.end(),
- bind(&mapEntryCompareByRouter, _1, rName));
- if ( it != m_table.end() )
- {
- return (*it).getMappingNumber();
- }
- return -1;
- }
-
- void
- Map::createFromAdjLsdb(Nlsr& pnlsr)
- {
- std::list<AdjLsa> adjLsdb=pnlsr.getLsdb().getAdjLsdb();
- for( std::list<AdjLsa>::iterator it=adjLsdb.begin();
- it!= adjLsdb.end() ; it++)
- {
- string linkStartRouter=(*it).getOrigRouter();
- addElement(linkStartRouter);
- std::list<Adjacent> adl=(*it).getAdl().getAdjList();
- for( std::list<Adjacent>::iterator itAdl=adl.begin();
- itAdl!= adl.end() ; itAdl++)
- {
- string linkEndRouter=(*itAdl).getName();
- addElement(linkEndRouter);
- }
- }
- }
-
- void
- Map::reset()
- {
- m_table.clear();
- m_mappingIndex=0;
- }
-
- ostream&
- operator<<(ostream& os, Map& map)
- {
- os<<"---------------Map----------------------"<<endl;
- std::list< MapEntry > ml=map.getMapList();
- for( std::list<MapEntry>::iterator it=ml.begin(); it!= ml.end() ; it++)
- {
- os<< (*it);
- }
- return os;
- }
-
-} //namespace nlsr
diff --git a/src/route/nlsr_map.hpp b/src/route/nlsr_map.hpp
deleted file mode 100644
index bf50aac..0000000
--- a/src/route/nlsr_map.hpp
+++ /dev/null
@@ -1,88 +0,0 @@
-#ifndef NLSR_MAP_HPP
-#define NLSR_MAP_HPP
-
-#include <iostream>
-#include <list>
-
-#include <ndn-cpp-dev/face.hpp>
-
-namespace nlsr
-{
-
- class Nlsr;
-
- using namespace std;
-
- class MapEntry
- {
- public:
- MapEntry()
- : m_router()
- , m_mappingNumber(-1)
- {
- }
-
- ~MapEntry()
- {
- }
-
- MapEntry(string rtr, int mn)
- {
- m_router=rtr;
- m_mappingNumber=mn;
- }
-
- string getRouter()
- {
- return m_router;
- }
-
- int getMappingNumber()
- {
- return m_mappingNumber;
- }
- private:
- string m_router;
- int m_mappingNumber;
- };
-
- ostream&
- operator<<(ostream& os, MapEntry& mpe);
-
- class Map
- {
- public:
- Map()
- : m_mappingIndex(0)
- {
- }
-
-
- void addElement(string& rtrName);
- void createFromAdjLsdb(Nlsr& pnlsr);
- string getRouterNameByMappingNo(int mn);
- int getMappingNoByRouterName(string& rName);
- void reset();
- std::list< MapEntry >& getMapList()
- {
- return m_table;
- }
-
- int getMapSize()
- {
- return m_table.size();
- }
-
-
- private:
- bool addElement(MapEntry& mpe);
-
- int m_mappingIndex;
- std::list< MapEntry > m_table;
- };
-
- ostream&
- operator<<(ostream& os, Map& map);
-
-} // namespace nlsr
-#endif
diff --git a/src/route/nlsr_nexthop.cpp b/src/route/nlsr_nexthop.cpp
deleted file mode 100644
index 08dfe62..0000000
--- a/src/route/nlsr_nexthop.cpp
+++ /dev/null
@@ -1,15 +0,0 @@
-#include "nlsr_nexthop.hpp"
-#include "utility/nlsr_logger.hpp"
-#define THIS_FILE "nlsr_nexthop.cpp"
-
-namespace nlsr
-{
-
- ostream&
- operator<<(ostream& os, NextHop& nh)
- {
- os<<"Face: "<<nh.getConnectingFace()<<" Route Cost: "<<nh.getRouteCost();
- return os;
- }
-
-}//namespace nlsr
diff --git a/src/route/nlsr_nexthop.hpp b/src/route/nlsr_nexthop.hpp
deleted file mode 100644
index 0105fb6..0000000
--- a/src/route/nlsr_nexthop.hpp
+++ /dev/null
@@ -1,56 +0,0 @@
-#ifndef NLSR_NEXTHOP_HPP
-#define NLSR_NEXTHOP_HPP
-
-#include<iostream>
-
-namespace nlsr
-{
-
- using namespace std;
-
- class NextHop
- {
- public:
- NextHop()
- : m_connectingFace(0)
- , m_routeCost(0)
- {
- }
-
- NextHop(int cf, double rc)
- {
- m_connectingFace=cf;
- m_routeCost=rc;
- }
-
- int getConnectingFace() const
- {
- return m_connectingFace;
- }
-
- void setConnectingFace(int cf)
- {
- m_connectingFace=cf;
- }
-
- double getRouteCost() const
- {
- return m_routeCost;
- }
-
- void setRouteCost(double rc)
- {
- m_routeCost=rc;
- }
- private:
- int m_connectingFace;
- double m_routeCost;
- };
-
-
- ostream&
- operator<<(ostream& os, NextHop& nh);
-
-}//namespace nlsr
-
-#endif
diff --git a/src/route/nlsr_nhl.cpp b/src/route/nlsr_nhl.cpp
deleted file mode 100644
index ed769c9..0000000
--- a/src/route/nlsr_nhl.cpp
+++ /dev/null
@@ -1,92 +0,0 @@
-#include <iostream>
-#include "utility/nlsr_logger.hpp"
-#include "nlsr_nhl.hpp"
-#include "nlsr_nexthop.hpp"
-
-#define THIS_FILE "nlsr_nhl.cpp"
-
-namespace nlsr
-{
-
- using namespace std;
-
- static bool
- nexthopCompare(NextHop& nh1, NextHop& nh2)
- {
- return nh1.getConnectingFace()==nh2.getConnectingFace();
- }
-
- static bool
- nexthopRemoveCompare(NextHop& nh1, NextHop& nh2)
- {
- return (nh1.getConnectingFace()==nh2.getConnectingFace() &&
- nh1.getRouteCost() == nh2.getRouteCost()) ;
- }
-
- static bool
- nextHopSortingComparator(const NextHop& nh1, const NextHop& nh2)
- {
- return nh1.getRouteCost() < nh2.getRouteCost();
- }
-
- /**
- Add next hop to the Next Hop list
- If next hop is new it is added
- If next hop already exists in next
- hop list then updates the route
- cost with new next hop's route cost
- */
-
- void
- Nhl::addNextHop(NextHop& nh)
- {
- std::list<NextHop >::iterator it = std::find_if( m_nexthopList.begin(),
- m_nexthopList.end(),
- bind(&nexthopCompare, _1, nh));
- if ( it == m_nexthopList.end() )
- {
- m_nexthopList.push_back(nh);
- }
- if ( (*it).getRouteCost() > nh.getRouteCost() )
- {
- (*it).setRouteCost(nh.getRouteCost());
- }
- }
-
- /**
- Remove a next hop only if both next hop face and route cost are same
-
- */
-
- void
- Nhl::removeNextHop(NextHop &nh)
- {
- std::list<NextHop >::iterator it = std::find_if( m_nexthopList.begin(),
- m_nexthopList.end(),
- bind(&nexthopRemoveCompare, _1, nh));
- if ( it != m_nexthopList.end() )
- {
- m_nexthopList.erase(it);
- }
- }
-
- void
- Nhl::sort()
- {
- m_nexthopList.sort(nextHopSortingComparator);
- }
-
- ostream&
- operator<<(ostream& os, Nhl& nhl)
- {
- std::list< NextHop > nexthopList = nhl.getNextHopList();
- int i=1;
- for( std::list<NextHop>::iterator it=nexthopList.begin();
- it!= nexthopList.end() ; it++,i++)
- {
- os << "Nexthop "<<i<<": "<<(*it)<<endl;
- }
- return os;
- }
-
-}//namespace nlsr
diff --git a/src/route/nlsr_nhl.hpp b/src/route/nlsr_nhl.hpp
deleted file mode 100644
index fd8b4ca..0000000
--- a/src/route/nlsr_nhl.hpp
+++ /dev/null
@@ -1,55 +0,0 @@
-#ifndef NLSR_NHL_HPP
-#define NLSR_NHL_HPP
-
-#include <ndn-cpp-dev/face.hpp>
-#include "nlsr_adjacent.hpp"
-#include <list>
-#include <iostream>
-
-#include "nlsr_nexthop.hpp"
-
-namespace nlsr
-{
-
- using namespace std;
-
- class Nhl
- {
- public:
- Nhl()
- : m_nexthopList()
- {
- }
-
- ~Nhl()
- {
- }
- void addNextHop(NextHop &nh);
- void removeNextHop(NextHop &nh);
- void sort();
- int getSize()
- {
- return m_nexthopList.size();
- }
- void reset()
- {
- if (m_nexthopList.size() > 0 )
- {
- m_nexthopList.clear();
- }
- }
- std::list< NextHop >& getNextHopList()
- {
- return m_nexthopList;
- }
-
- private:
- std::list< NextHop > m_nexthopList;
- };
-
- ostream&
- operator<<(ostream& os, Nhl& nhl);
-
-}//namespace nlsr
-
-#endif
diff --git a/src/route/nlsr_npt.cpp b/src/route/nlsr_npt.cpp
deleted file mode 100644
index 89eba30..0000000
--- a/src/route/nlsr_npt.cpp
+++ /dev/null
@@ -1,151 +0,0 @@
-#include <list>
-#include <utility>
-#include <algorithm>
-#include "utility/nlsr_logger.hpp"
-#include "nlsr_npt.hpp"
-#include "nlsr_npte.hpp"
-#include "nlsr.hpp"
-
-#define THIS_FILE "nlsr_npt.cpp"
-
-namespace nlsr
-{
-
- using namespace std;
-
- static bool
- npteCompare(Npte& npte, string& name)
- {
- return npte.getNamePrefix()==name;
- }
-
-
-
- void
- Npt::addNpte(string name, RoutingTableEntry& rte, Nlsr& pnlsr)
- {
- std::list<Npte >::iterator it = std::find_if( m_npteList.begin(),
- m_npteList.end(), bind(&npteCompare, _1, name));
- if ( it == m_npteList.end() )
- {
- Npte newEntry(name);
- newEntry.addRoutingTableEntry(rte);
- newEntry.generateNhlfromRteList();
- newEntry.getNhl().sort();
- m_npteList.push_back(newEntry);
- if(rte.getNhl().getSize()> 0)
- {
- pnlsr.getFib().update(pnlsr, name,newEntry.getNhl());
- }
- }
- else
- {
- if ( rte.getNhl().getSize()> 0 )
- {
- (*it).addRoutingTableEntry(rte);
- (*it).generateNhlfromRteList();
- (*it).getNhl().sort();
- pnlsr.getFib().update(pnlsr, name,(*it).getNhl());
- }
- else
- {
- (*it).resetRteListNextHop();
- (*it).getNhl().reset();
- pnlsr.getFib().remove(pnlsr,name);
- }
- }
- }
-
- void
- Npt::removeNpte(string name, RoutingTableEntry& rte, Nlsr& pnlsr)
- {
- std::list<Npte >::iterator it = std::find_if( m_npteList.begin(),
- m_npteList.end(), bind(&npteCompare, _1, name));
- if ( it != m_npteList.end() )
- {
- string destRouter=rte.getDestination();
- (*it).removeRoutingTableEntry(rte);
- if ( ((*it).getRteListSize() == 0 ) &&
- (!pnlsr.getLsdb().doesLsaExist(destRouter+"/1",1) ) &&
- (!pnlsr.getLsdb().doesLsaExist(destRouter+"/2",2) ) &&
- (!pnlsr.getLsdb().doesLsaExist(destRouter+"/3",3) ) )
- {
- m_npteList.erase(it);
- pnlsr.getFib().remove(pnlsr,name);
- }
- else
- {
- (*it).generateNhlfromRteList();
- pnlsr.getFib().update(pnlsr, name,(*it).getNhl());
- }
- }
- }
-
-
- void
- Npt::addNpteByDestName(string name, string destRouter, Nlsr& pnlsr)
- {
- std::pair<RoutingTableEntry& , bool> rteCheck=
- pnlsr.getRoutingTable().findRoutingTableEntry(destRouter);
- if(rteCheck.second)
- {
- addNpte(name,rteCheck.first,pnlsr);
- }
- else
- {
- RoutingTableEntry rte(destRouter);
- addNpte(name, rte,pnlsr);
- }
- }
-
- void
- Npt::removeNpte(string name, string destRouter, Nlsr& pnlsr)
- {
- std::pair<RoutingTableEntry& , bool> rteCheck=
- pnlsr.getRoutingTable().findRoutingTableEntry(destRouter);
- if(rteCheck.second)
- {
- removeNpte(name,rteCheck.first,pnlsr);
- }
- else
- {
- RoutingTableEntry rte(destRouter);
- removeNpte(name, rte,pnlsr);
- }
- }
-
- void
- Npt::updateWithNewRoute(Nlsr& pnlsr)
- {
- for(std::list<Npte >::iterator it=m_npteList.begin(); it!=m_npteList.end(); ++it)
- {
- std::list<RoutingTableEntry> rteList=(*it).getRteList();
- for(std::list<RoutingTableEntry >::iterator rteit=rteList.begin();
- rteit !=rteList.end(); ++rteit)
- {
- std::pair<RoutingTableEntry& , bool> rteCheck=
- pnlsr.getRoutingTable().findRoutingTableEntry((*rteit).getDestination());
- if(rteCheck.second)
- {
- addNpte((*it).getNamePrefix(),rteCheck.first,pnlsr);
- }
- else
- {
- RoutingTableEntry rte((*rteit).getDestination());
- addNpte((*it).getNamePrefix(), rte,pnlsr);
- }
- }
- }
- }
-
- void
- Npt::print()
- {
- cout<<"----------------NPT----------------------"<<endl;
- for(std::list<Npte >::iterator it=m_npteList.begin(); it!=m_npteList.end(); ++it)
- {
- cout <<(*it)<<endl;
- }
- }
-
-}
diff --git a/src/route/nlsr_npt.hpp b/src/route/nlsr_npt.hpp
deleted file mode 100644
index 89af33d..0000000
--- a/src/route/nlsr_npt.hpp
+++ /dev/null
@@ -1,34 +0,0 @@
-#ifndef NLSR_NPT_HPP
-#define NLSR_NPT_HPP
-
-#include <list>
-#include "nlsr_npte.hpp"
-#include "nlsr_rte.hpp"
-
-namespace nlsr
-{
-
- using namespace std;
-
- class Nlsr;
-
- class Npt
- {
- public:
- Npt()
- {
- }
- void addNpteByDestName(string name, string destRouter, Nlsr& pnlsr);
- void removeNpte(string name, string destRouter, Nlsr& pnlsr);
- void updateWithNewRoute(Nlsr& pnlsr);
- void print();
- private:
- void addNpte(string name, RoutingTableEntry& rte, Nlsr& pnlsr);
- void removeNpte(string name, RoutingTableEntry& rte, Nlsr& pnlsr);
- private:
- std::list<Npte> m_npteList;
- };
-
-}//namespace nlsr
-
-#endif
diff --git a/src/route/nlsr_npte.cpp b/src/route/nlsr_npte.cpp
deleted file mode 100644
index d8e83c3..0000000
--- a/src/route/nlsr_npte.cpp
+++ /dev/null
@@ -1,86 +0,0 @@
-#include <list>
-#include <utility>
-#include "nlsr_npte.hpp"
-#include "nlsr_rte.hpp"
-#include "nlsr_nexthop.hpp"
-#include "utility/nlsr_logger.hpp"
-
-#define THIS_FILE "nlsr_npte.cpp"
-
-namespace nlsr
-{
-
- using namespace std;
-
- void
- Npte::generateNhlfromRteList()
- {
- m_nhl.reset();
- for( std::list<RoutingTableEntry>::iterator it=m_rteList.begin();
- it != m_rteList.end(); ++it )
- {
- for(std::list< NextHop >::iterator nhit=(*it).getNhl().getNextHopList().begin();
- nhit != (*it).getNhl().getNextHopList().end(); ++nhit)
- {
- m_nhl.addNextHop((*nhit));
- }
- }
- }
-
-
-
- static bool
- rteCompare(RoutingTableEntry& rte, string& destRouter)
- {
- return rte.getDestination()==destRouter;
- }
-
- void
- Npte::removeRoutingTableEntry(RoutingTableEntry& rte)
- {
- std::list<RoutingTableEntry >::iterator it = std::find_if( m_rteList.begin(),
- m_rteList.end(),
- bind(&rteCompare, _1, rte.getDestination()));
- if ( it != m_rteList.end() )
- {
- m_rteList.erase(it);
- }
- }
-
- void
- Npte::addRoutingTableEntry(RoutingTableEntry &rte)
- {
- std::list<RoutingTableEntry >::iterator it = std::find_if( m_rteList.begin(),
- m_rteList.end(),
- bind(&rteCompare, _1, rte.getDestination()));
- if ( it == m_rteList.end() )
- {
- m_rteList.push_back(rte);
- }
- else
- {
- (*it).getNhl().reset(); // reseting existing routing table's next hop
- for(std::list< NextHop >::iterator nhit=rte.getNhl().getNextHopList().begin();
- nhit != rte.getNhl().getNextHopList().end(); ++nhit)
- {
- (*it).getNhl().addNextHop((*nhit));
- }
- }
- }
-
-//debugging purpose
- ostream&
- operator<<(ostream& os, Npte& npte)
- {
- os<<"Name: "<<npte.getNamePrefix()<<endl;
- std::list<RoutingTableEntry> rteList=npte.getRteList();
- for(std::list<RoutingTableEntry >::iterator it=rteList.begin();
- it !=rteList.end(); ++it)
- {
- cout<<(*it);
- }
- os<<npte.getNhl();
- return os;
- }
-
-}//namespace nlsr
diff --git a/src/route/nlsr_npte.hpp b/src/route/nlsr_npte.hpp
deleted file mode 100644
index bb4b1c8..0000000
--- a/src/route/nlsr_npte.hpp
+++ /dev/null
@@ -1,73 +0,0 @@
-#ifndef NLSR_NPTE_HPP
-#define NLSR_NPTE_HPP
-
-#include <list>
-#include <utility>
-#include "nlsr_rte.hpp"
-
-namespace nlsr
-{
-
- using namespace std;
-
- class Npte
- {
- public:
- Npte()
- : m_namePrefix()
- , m_nhl()
- {
- }
- Npte(string np)
- : m_nhl()
- {
- m_namePrefix=np;
- }
-
- string getNamePrefix()
- {
- return m_namePrefix;
- }
-
- std::list<RoutingTableEntry>& getRteList()
- {
- return m_rteList;
- }
-
- void resetRteListNextHop()
- {
- if (m_rteList.size() > 0 )
- {
- for( std::list<RoutingTableEntry>::iterator it=m_rteList.begin();
- it != m_rteList.end(); ++it )
- {
- (*it).getNhl().reset();
- }
- }
- }
-
- int getRteListSize()
- {
- return m_rteList.size();
- }
-
- Nhl& getNhl()
- {
- return m_nhl;
- }
- void generateNhlfromRteList();
- void removeRoutingTableEntry(RoutingTableEntry& rte);
- void addRoutingTableEntry(RoutingTableEntry &rte);
-
- private:
- string m_namePrefix;
- std::list<RoutingTableEntry> m_rteList;
- Nhl m_nhl;
- };
-
- ostream&
- operator<<(ostream& os, Npte& npte);
-
-}//namespace nlsr
-
-#endif
diff --git a/src/route/nlsr_rt.cpp b/src/route/nlsr_rt.cpp
deleted file mode 100644
index 8267930..0000000
--- a/src/route/nlsr_rt.cpp
+++ /dev/null
@@ -1,236 +0,0 @@
-#include<iostream>
-#include<string>
-#include<list>
-
-#include "nlsr_rt.hpp"
-#include "nlsr.hpp"
-#include "nlsr_map.hpp"
-#include "nlsr_rtc.hpp"
-#include "nlsr_rte.hpp"
-#include "nlsr_npt.hpp"
-#include "utility/nlsr_logger.hpp"
-
-#define THIS_FILE "nlsr_rt.cpp"
-
-namespace nlsr
-{
-
- using namespace std;
-
- void
- RoutingTable::calculate(Nlsr& pnlsr)
- {
- //debugging purpose
- std::cout<<pnlsr.getConfParameter()<<std::endl;
- pnlsr.getNpt().print();
- pnlsr.getLsdb().printAdjLsdb();
- pnlsr.getLsdb().printCorLsdb();
- pnlsr.getLsdb().printNameLsdb();
- if ( pnlsr.getIsRoutingTableCalculating() == 0 )
- {
- pnlsr.setIsRoutingTableCalculating(1); //setting routing table calculation
- if ( pnlsr.getLsdb().doesLsaExist(
- pnlsr.getConfParameter().getRouterPrefix()+"/"+"2",2) )
- {
- if(pnlsr.getIsBuildAdjLsaSheduled() != 1)
- {
- cout<<"CLearing old routing table ....."<<endl;
- clearRoutingTable();
- clearDryRoutingTable(); // for dry run options
- // calculate Link State routing
- if( (pnlsr.getConfParameter().getIsHyperbolicCalc() == 0 )
- || (pnlsr.getConfParameter().getIsHyperbolicCalc() == 2 ) )
- {
- calculateLsRoutingTable(pnlsr);
- }
- //calculate hyperbolic routing
- if ( pnlsr.getConfParameter().getIsHyperbolicCalc() == 1 )
- {
- calculateHypRoutingTable(pnlsr);
- }
- //calculate dry hyperbolic routing
- if ( pnlsr.getConfParameter().getIsHyperbolicCalc() == 2 )
- {
- calculateHypDryRoutingTable(pnlsr);
- }
- //need to update NPT here
- pnlsr.getNpt().updateWithNewRoute(pnlsr);
- //debugging purpose
- printRoutingTable();
- pnlsr.getNpt().print();
- pnlsr.getFib().print();
- //debugging purpose end
- }
- else
- {
- cout<<"Adjacency building is scheduled, so ";
- cout<<"routing table can not be calculated :("<<endl;
- }
- }
- else
- {
- cout<<"No Adj LSA of router itself,";
- cout<< " so Routing table can not be calculated :("<<endl;
- clearRoutingTable();
- clearDryRoutingTable(); // for dry run options
- // need to update NPT here
- std::cout<<"Calling Update NPT With new Route"<<std::endl;
- pnlsr.getNpt().updateWithNewRoute(pnlsr);
- //debugging purpose
- printRoutingTable();
- pnlsr.getNpt().print();
- pnlsr.getFib().print();
- //debugging purpose end
- }
- pnlsr.setIsRouteCalculationScheduled(0); //clear scheduled flag
- pnlsr.setIsRoutingTableCalculating(0); //unsetting routing table calculation
- }
- else
- {
- scheduleRoutingTableCalculation(pnlsr);
- }
- }
-
-
- void
- RoutingTable::calculateLsRoutingTable(Nlsr& pnlsr)
- {
- cout<<"RoutingTable::calculateLsRoutingTable Called"<<endl;
- Map vMap;
- vMap.createFromAdjLsdb(pnlsr);
- int numOfRouter=vMap.getMapSize();
- LinkStateRoutingTableCalculator lsrtc(numOfRouter);
- lsrtc.calculatePath(vMap,boost::ref(*this),pnlsr);
- }
-
- void
- RoutingTable::calculateHypRoutingTable(Nlsr& pnlsr)
- {
- Map vMap;
- vMap.createFromAdjLsdb(pnlsr);
- int numOfRouter=vMap.getMapSize();
- HypRoutingTableCalculator hrtc(numOfRouter,0);
- hrtc.calculatePath(vMap,boost::ref(*this),pnlsr);
- }
-
- void
- RoutingTable::calculateHypDryRoutingTable(Nlsr& pnlsr)
- {
- Map vMap;
- vMap.createFromAdjLsdb(pnlsr);
- int numOfRouter=vMap.getMapSize();
- HypRoutingTableCalculator hrtc(numOfRouter,1);
- hrtc.calculatePath(vMap,boost::ref(*this),pnlsr);
- }
-
- void
- RoutingTable::scheduleRoutingTableCalculation(Nlsr& pnlsr)
- {
- if ( pnlsr.getIsRouteCalculationScheduled() != 1 )
- {
- pnlsr.getScheduler().scheduleEvent(ndn::time::seconds(15),
- ndn::bind(&RoutingTable::calculate,this,boost::ref(pnlsr)));
- pnlsr.setIsRouteCalculationScheduled(1);
- }
- }
-
- static bool
- routingTableEntryCompare(RoutingTableEntry& rte, string& destRouter)
- {
- return rte.getDestination()==destRouter;
- }
-
-// function related to manipulation of routing table
- void
- RoutingTable::addNextHop(string destRouter, NextHop& nh)
- {
- std::pair<RoutingTableEntry&, bool> rte=findRoutingTableEntry(destRouter);
- if( !rte.second )
- {
- RoutingTableEntry rte(destRouter);
- rte.getNhl().addNextHop(nh);
- m_rTable.push_back(rte);
- }
- else
- {
- (rte.first).getNhl().addNextHop(nh);
- }
- }
-
- std::pair<RoutingTableEntry&, bool>
- RoutingTable::findRoutingTableEntry(string destRouter)
- {
- std::list<RoutingTableEntry >::iterator it = std::find_if( m_rTable.begin(),
- m_rTable.end(),
- bind(&routingTableEntryCompare, _1, destRouter));
- if ( it != m_rTable.end() )
- {
- return std::make_pair(boost::ref((*it)),true);
- }
- RoutingTableEntry rteEmpty;
- return std::make_pair(boost::ref(rteEmpty),false);
- }
-
- void
- RoutingTable::printRoutingTable()
- {
- cout<<"---------------Routing Table------------------"<<endl;
- for(std::list<RoutingTableEntry>::iterator it=m_rTable.begin() ;
- it != m_rTable.end(); ++it)
- {
- cout<<(*it)<<endl;
- }
- }
-
-
-//function related to manipulation of dry routing table
- void
- RoutingTable::addNextHopToDryTable(string destRouter, NextHop& nh)
- {
- std::list<RoutingTableEntry >::iterator it = std::find_if( m_dryTable.begin(),
- m_dryTable.end(),
- bind(&routingTableEntryCompare, _1, destRouter));
- if ( it == m_dryTable.end() )
- {
- RoutingTableEntry rte(destRouter);
- rte.getNhl().addNextHop(nh);
- m_dryTable.push_back(rte);
- }
- else
- {
- (*it).getNhl().addNextHop(nh);
- }
- }
-
- void
- RoutingTable::printDryRoutingTable()
- {
- cout<<"--------Dry Run's Routing Table--------------"<<endl;
- for(std::list<RoutingTableEntry>::iterator it=m_dryTable.begin() ;
- it != m_dryTable.end(); ++it)
- {
- cout<<(*it)<<endl;
- }
- }
-
-
- void
- RoutingTable::clearRoutingTable()
- {
- if( m_rTable.size() > 0 )
- {
- m_rTable.clear();
- }
- }
-
- void
- RoutingTable::clearDryRoutingTable()
- {
- if (m_dryTable.size()>0 )
- {
- m_dryTable.clear();
- }
- }
-
-}//namespace nlsr
-
diff --git a/src/route/nlsr_rt.hpp b/src/route/nlsr_rt.hpp
deleted file mode 100644
index e382b8b..0000000
--- a/src/route/nlsr_rt.hpp
+++ /dev/null
@@ -1,50 +0,0 @@
-#ifndef NLSR_RT_HPP
-#define NLSR_RT_HPP
-
-#include<iostream>
-#include<utility>
-#include<string>
-
-#include "nlsr_rte.hpp"
-
-namespace nlsr
-{
-
- class Nlsr;
- class NextHop;
-
- using namespace std;
-
- class RoutingTable
- {
- public:
- RoutingTable()
- : NO_NEXT_HOP(-12345)
- {
- }
- void calculate(Nlsr& pnlsr);
- void addNextHop(string destRouter, NextHop& nh);
- void printRoutingTable();
-
- void addNextHopToDryTable(string destRouter, NextHop& nh);
- void printDryRoutingTable();
- std::pair<RoutingTableEntry&, bool> findRoutingTableEntry(string destRouter);
- void scheduleRoutingTableCalculation(Nlsr& pnlsr);
-
- private:
- void calculateLsRoutingTable(Nlsr& pnlsr);
- void calculateHypRoutingTable(Nlsr& pnlsr);
- void calculateHypDryRoutingTable(Nlsr& pnlsr);
-
- void clearRoutingTable();
- void clearDryRoutingTable();
-
- const int NO_NEXT_HOP;
-
- std::list< RoutingTableEntry > m_rTable;
- std::list< RoutingTableEntry > m_dryTable;
- };
-
-}//namespace nlsr
-
-#endif
diff --git a/src/route/nlsr_rtc.cpp b/src/route/nlsr_rtc.cpp
deleted file mode 100644
index c6499f7..0000000
--- a/src/route/nlsr_rtc.cpp
+++ /dev/null
@@ -1,511 +0,0 @@
-#include <iostream>
-#include <cmath>
-#include "nlsr_lsdb.hpp"
-#include "nlsr_rtc.hpp"
-#include "nlsr_map.hpp"
-#include "nlsr_lsa.hpp"
-#include "nlsr_nexthop.hpp"
-#include "nlsr.hpp"
-#include "utility/nlsr_logger.hpp"
-
-#define THIS_FILE "nlsr_rtc.cpp"
-
-namespace nlsr
-{
-
- using namespace std;
-
- void
- RoutingTableCalculator::allocateAdjMatrix()
- {
- adjMatrix = new double*[numOfRouter];
- for(int i = 0; i < numOfRouter; ++i)
- {
- adjMatrix[i] = new double[numOfRouter];
- }
- }
-
- void
- RoutingTableCalculator::initMatrix()
- {
- for(int i=0; i<numOfRouter; i++)
- {
- for(int j=0; j<numOfRouter; j++)
- adjMatrix[i][j]=0;
- }
- }
-
- void
- RoutingTableCalculator::makeAdjMatrix(Nlsr& pnlsr, Map pMap)
- {
- std::list<AdjLsa> adjLsdb=pnlsr.getLsdb().getAdjLsdb();
- for( std::list<AdjLsa>::iterator it=adjLsdb.begin();
- it!= adjLsdb.end() ; it++)
- {
- string linkStartRouter=(*it).getOrigRouter();
- int row=pMap.getMappingNoByRouterName(linkStartRouter);
- std::list<Adjacent> adl=(*it).getAdl().getAdjList();
- for( std::list<Adjacent>::iterator itAdl=adl.begin();
- itAdl!= adl.end() ; itAdl++)
- {
- string linkEndRouter=(*itAdl).getName();
- int col=pMap.getMappingNoByRouterName(linkEndRouter);
- double cost=(*itAdl).getLinkCost();
- if ( (row >= 0 && row<numOfRouter) && (col >= 0 && col<numOfRouter) )
- {
- adjMatrix[row][col]=cost;
- }
- }
- }
- }
-
- void
- RoutingTableCalculator::printAdjMatrix()
- {
- for(int i=0; i<numOfRouter; i++)
- {
- for(int j=0; j<numOfRouter; j++)
- printf("%f ",adjMatrix[i][j]);
- printf("\n");
- }
- }
-
- void
- RoutingTableCalculator::adjustAdMatrix(int source, int link, double linkCost)
- {
- for ( int i = 0; i < numOfRouter; i++ )
- {
- if ( i == link )
- {
- adjMatrix[source][i]=linkCost;
- }
- else
- {
- adjMatrix[source][i]=0;
- }
- }
- }
-
- int
- RoutingTableCalculator::getNumOfLinkfromAdjMatrix(int sRouter)
- {
- int noLink=0;
- for(int i=0; i<numOfRouter; i++)
- {
- if ( adjMatrix[sRouter][i] > 0 )
- {
- noLink++;
- }
- }
- return noLink;
- }
-
- void
- RoutingTableCalculator::getLinksFromAdjMatrix(int *links,
- double *linkCosts, int source)
- {
- int j=0;
- for (int i=0; i <numOfRouter; i++)
- {
- if ( adjMatrix[source][i] > 0 )
- {
- links[j]=i;
- linkCosts[j]=adjMatrix[source][i];
- j++;
- }
- }
- }
-
- void
- RoutingTableCalculator::freeAdjMatrix()
- {
- for(int i = 0; i < numOfRouter; ++i)
- {
- delete [] adjMatrix[i];
- }
- delete [] adjMatrix;
- }
-
-
- void
- RoutingTableCalculator::allocateLinks()
- {
- links=new int[vNoLink];
- }
-
- void RoutingTableCalculator::allocateLinkCosts()
- {
- linkCosts=new double[vNoLink];
- }
-
-
- void
- RoutingTableCalculator::freeLinks()
- {
- delete [] links;
- }
- void
- RoutingTableCalculator::freeLinksCosts()
- {
- delete [] linkCosts;
- }
-
- void
- LinkStateRoutingTableCalculator::calculatePath(Map& pMap,
- RoutingTable& rt, Nlsr& pnlsr)
- {
- cout<<"LinkStateRoutingTableCalculator::calculatePath Called"<<endl;
- allocateAdjMatrix();
- initMatrix();
- makeAdjMatrix(pnlsr,pMap);
- cout<<pMap;
- printAdjMatrix();
- string routerName=pnlsr.getConfParameter().getRouterPrefix();
- int sourceRouter=pMap.getMappingNoByRouterName(routerName);
- int noLink=getNumOfLinkfromAdjMatrix(sourceRouter);
- allocateParent();
- allocateDistance();
- if ( pnlsr.getConfParameter().getMaxFacesPerPrefix() == 1 )
- {
- // Single Path
- doDijkstraPathCalculation(sourceRouter);
- // print all ls path -- debugging purpose
- printAllLsPath(sourceRouter);
- // update routing table
- addAllLsNextHopsToRoutingTable(pnlsr, rt, pMap, sourceRouter);
- }
- else
- {
- // Multi Path
- setNoLink(getNumOfLinkfromAdjMatrix(sourceRouter));
- allocateLinks();
- allocateLinkCosts();
- getLinksFromAdjMatrix(links, linkCosts, sourceRouter);
- for (int i=0 ; i < vNoLink; i++)
- {
- adjustAdMatrix(sourceRouter,links[i], linkCosts[i]);
- printAdjMatrix();
- doDijkstraPathCalculation(sourceRouter);
- // print all ls path -- debugging purpose
- printAllLsPath(sourceRouter);
- //update routing table
- addAllLsNextHopsToRoutingTable(pnlsr, rt, pMap, sourceRouter);
- }
- freeLinks();
- freeLinksCosts();
- }
- freeParent();
- freeDistance();
- freeAdjMatrix();
- }
-
- void
- LinkStateRoutingTableCalculator::doDijkstraPathCalculation(int sourceRouter)
- {
- int i;
- int v,u;
- int *Q=new int[numOfRouter];
- int head=0;
- /* Initiate the Parent */
- for (i = 0 ; i < numOfRouter; i++)
- {
- m_parent[i]=EMPTY_PARENT;
- m_distance[i]=INF_DISTANCE;
- Q[i]=i;
- }
- if ( sourceRouter != NO_MAPPING_NUM )
- {
- m_distance[sourceRouter]=0;
- sortQueueByDistance(Q,m_distance,head,numOfRouter);
- while (head < numOfRouter )
- {
- u=Q[head];
- if(m_distance[u] == INF_DISTANCE)
- {
- break;
- }
- for(v=0 ; v <numOfRouter; v++)
- {
- if( adjMatrix[u][v] > 0 )
- {
- if ( isNotExplored(Q,v,head+1,numOfRouter) )
- {
- if( m_distance[u] + adjMatrix[u][v] < m_distance[v])
- {
- m_distance[v]=m_distance[u] + adjMatrix[u][v] ;
- m_parent[v]=u;
- }
- }
- }
- }
- head++;
- sortQueueByDistance(Q,m_distance,head,numOfRouter);
- }
- }
- delete [] Q;
- }
-
- void
- LinkStateRoutingTableCalculator::addAllLsNextHopsToRoutingTable(Nlsr& pnlsr,
- RoutingTable& rt, Map& pMap, int sourceRouter)
- {
- cout<<"LinkStateRoutingTableCalculator::addAllNextHopsToRoutingTable Called";
- cout<<endl;
- for(int i=0; i < numOfRouter ; i++)
- {
- if ( i!= sourceRouter )
- {
- int nextHopRouter=getLsNextHop(i,sourceRouter);
- if ( nextHopRouter != NO_NEXT_HOP )
- {
- double routeCost=m_distance[i];
- string nextHopRouterName=
- pMap.getRouterNameByMappingNo(nextHopRouter);
- int nxtHopFace=
- pnlsr.getAdl().getAdjacent(nextHopRouterName).getConnectingFace();
- cout<<"Dest Router: "<<pMap.getRouterNameByMappingNo(i)<<endl;
- cout<<"Next hop Router: "<<nextHopRouterName<<endl;
- cout<<"Next hop Face: "<<nxtHopFace<<endl;
- cout<<"Route Cost: "<<routeCost<<endl;
- cout<<endl;
- // Add next hop to routing table
- NextHop nh(nxtHopFace,routeCost);
- rt.addNextHop(pMap.getRouterNameByMappingNo(i),nh);
- }
- }
- }
- }
-
- int
- LinkStateRoutingTableCalculator::getLsNextHop(int dest, int source)
- {
- int nextHop;
- while ( m_parent[dest] != EMPTY_PARENT )
- {
- nextHop=dest;
- dest=m_parent[dest];
- }
- if ( dest != source )
- {
- nextHop=NO_NEXT_HOP;
- }
- return nextHop;
- }
-
- void
- LinkStateRoutingTableCalculator::printAllLsPath(int sourceRouter)
- {
- cout<<"LinkStateRoutingTableCalculator::printAllLsPath Called"<<endl;
- cout<<"Source Router: "<<sourceRouter<<endl;
- for(int i=0; i < numOfRouter ; i++)
- {
- if ( i!= sourceRouter )
- {
- printLsPath(i);
- cout<<endl;
- }
- }
- }
-
- void
- LinkStateRoutingTableCalculator::printLsPath(int destRouter)
- {
- if (m_parent[destRouter] != EMPTY_PARENT )
- {
- printLsPath(m_parent[destRouter]);
- }
- cout<<" "<<destRouter;
- }
-
- void
- LinkStateRoutingTableCalculator::sortQueueByDistance(int *Q,
- double *dist,int start,int element)
- {
- for ( int i=start ; i < element ; i ++)
- {
- for( int j=i+1; j<element; j ++)
- {
- if (dist[Q[j]] < dist[Q[i]])
- {
- int tempU=Q[j];
- Q[j]=Q[i];
- Q[i]=tempU;
- }
- }
- }
- }
-
- int
- LinkStateRoutingTableCalculator::isNotExplored(int *Q,
- int u,int start, int element)
- {
- int ret=0;
- for(int i=start; i< element; i++)
- {
- if ( Q[i] == u )
- {
- ret=1;
- break;
- }
- }
- return ret;
- }
-
- void
- LinkStateRoutingTableCalculator::allocateParent()
- {
- m_parent=new int[numOfRouter];
- }
-
- void
- LinkStateRoutingTableCalculator::allocateDistance()
- {
- m_distance= new double[numOfRouter];
- }
-
- void
- LinkStateRoutingTableCalculator::freeParent()
- {
- delete [] m_parent;
- }
-
- void LinkStateRoutingTableCalculator::freeDistance()
- {
- delete [] m_distance;
- }
-
-
-
- void
- HypRoutingTableCalculator::calculatePath(Map& pMap,
- RoutingTable& rt, Nlsr& pnlsr)
- {
- makeAdjMatrix(pnlsr,pMap);
- string routerName=pnlsr.getConfParameter().getRouterPrefix();
- int sourceRouter=pMap.getMappingNoByRouterName(routerName);
- int noLink=getNumOfLinkfromAdjMatrix(sourceRouter);
- setNoLink(noLink);
- allocateLinks();
- allocateLinkCosts();
- getLinksFromAdjMatrix(links, linkCosts, sourceRouter);
- for(int i=0 ; i < numOfRouter ; ++i)
- {
- int k=0;
- if ( i != sourceRouter)
- {
- allocateLinkFaces();
- allocateDistanceToNeighbor();
- allocateDistFromNbrToDest();
- for(int j=0; j<vNoLink; j++)
- {
- string nextHopRouterName=pMap.getRouterNameByMappingNo(links[j]);
- int nextHopFace=
- pnlsr.getAdl().getAdjacent(nextHopRouterName).getConnectingFace();
- double distToNbr=getHyperbolicDistance(pnlsr,pMap,
- sourceRouter,links[j]);
- double distToDestFromNbr=getHyperbolicDistance(pnlsr,
- pMap,links[j],i);
- if ( distToDestFromNbr >= 0 )
- {
- m_linkFaces[k] = nextHopFace;
- m_distanceToNeighbor[k] = distToNbr;
- m_distFromNbrToDest[k] = distToDestFromNbr;
- k++;
- }
- }
- addHypNextHopsToRoutingTable(pnlsr,pMap,rt,k,i);
- freeLinkFaces();
- freeDistanceToNeighbor();
- freeDistFromNbrToDest();
- }
- }
- freeLinks();
- freeLinksCosts();
- freeAdjMatrix();
- }
-
- void
- HypRoutingTableCalculator::addHypNextHopsToRoutingTable(Nlsr& pnlsr,Map& pMap,
- RoutingTable& rt, int noFaces, int dest)
- {
- for(int i=0 ; i < noFaces ; ++i)
- {
- string destRouter=pMap.getRouterNameByMappingNo(dest);
- NextHop nh(m_linkFaces[i],m_distFromNbrToDest[i]);
- rt.addNextHop(destRouter,nh);
- if( m_isDryRun)
- {
- rt.addNextHopToDryTable(destRouter,nh);
- }
- }
- }
-
- double
- HypRoutingTableCalculator::getHyperbolicDistance(Nlsr& pnlsr,
- Map& pMap, int src, int dest)
- {
- double distance=0.0;
- string srcRouterKey=pMap.getRouterNameByMappingNo(src)+"/3";
- string destRouterKey=pMap.getRouterNameByMappingNo(dest)+"/3";
- double srcRadius=(pnlsr.getLsdb().getCorLsa(srcRouterKey).first).getCorRadius();
- double srcTheta=(pnlsr.getLsdb().getCorLsa(srcRouterKey).first).getCorTheta();
- double destRadius=(pnlsr.getLsdb().getCorLsa(
- destRouterKey).first).getCorRadius();
- double destTheta=(pnlsr.getLsdb().getCorLsa(destRouterKey).first).getCorTheta();
- double diffTheta = fabs (srcTheta - destTheta);
- if (diffTheta > MATH_PI)
- {
- diffTheta = 2 * MATH_PI - diffTheta;
- }
- if ( srcRadius != -1 && destRadius != -1 )
- {
- if (diffTheta == 0)
- distance = fabs (srcRadius - destRadius);
- else
- distance = acosh((cosh(srcRadius)*cosh(destRadius))-
- (sinh(srcRadius)*sinh(destRadius)*cos(diffTheta)));
- }
- else
- {
- distance = -1;
- }
- return distance;
- }
-
- void
- HypRoutingTableCalculator::allocateLinkFaces()
- {
- m_linkFaces=new int[vNoLink];
- }
-
- void
- HypRoutingTableCalculator::allocateDistanceToNeighbor()
- {
- m_distanceToNeighbor=new double[vNoLink];
- }
-
- void
- HypRoutingTableCalculator::allocateDistFromNbrToDest()
- {
- m_distFromNbrToDest=new double[vNoLink];
- }
-
- void
- HypRoutingTableCalculator::freeLinkFaces()
- {
- delete [] m_linkFaces;
- }
-
- void
- HypRoutingTableCalculator::freeDistanceToNeighbor()
- {
- delete [] m_distanceToNeighbor;
- }
-
- void
- HypRoutingTableCalculator::freeDistFromNbrToDest()
- {
- delete [] m_distFromNbrToDest;
- }
-
-}//namespace nlsr
diff --git a/src/route/nlsr_rtc.hpp b/src/route/nlsr_rtc.hpp
deleted file mode 100644
index dba45ca..0000000
--- a/src/route/nlsr_rtc.hpp
+++ /dev/null
@@ -1,145 +0,0 @@
-#ifndef NLSR_RTC_HPP
-#define NLSR_RTC_HPP
-
-#include <list>
-#include <iostream>
-
-namespace nlsr
-{
-
- class Map;
- class RoutingTable;
- class Nlsr;
-
-
- using namespace std;
-
- class RoutingTableCalculator
- {
- public:
- RoutingTableCalculator()
- {
- }
- RoutingTableCalculator(int rn)
- {
- numOfRouter=rn;
- }
- protected:
- void allocateAdjMatrix();
- void initMatrix();
- void makeAdjMatrix(Nlsr& pnlsr,Map pMap);
- void printAdjMatrix();
- int getNumOfLinkfromAdjMatrix(int sRouter);
- void freeAdjMatrix();
- void adjustAdMatrix(int source, int link, double linkCost);
- void getLinksFromAdjMatrix(int *links, double *linkCosts, int source);
-
- void allocateLinks();
- void allocateLinkCosts();
- void freeLinks();
- void freeLinksCosts();
-
- void setNoLink(int nl)
- {
- vNoLink=nl;
- }
-
- protected:
- double** adjMatrix;
- int numOfRouter;
-
- int vNoLink;
- int* links;
- double* linkCosts;
- };
-
- class LinkStateRoutingTableCalculator: public RoutingTableCalculator
- {
- public:
- LinkStateRoutingTableCalculator(int rn)
- : EMPTY_PARENT(-12345)
- , INF_DISTANCE(2147483647)
- , NO_MAPPING_NUM(-1)
- , NO_NEXT_HOP(-12345)
- {
- numOfRouter=rn;
- }
-
-
- void calculatePath(Map& pMap, RoutingTable& rt, Nlsr& pnlsr);
-
-
- private:
- void doDijkstraPathCalculation(int sourceRouter);
- void sortQueueByDistance(int* Q, double* dist,int start,int element);
- int isNotExplored(int* Q, int u,int start, int element);
- void printAllLsPath(int sourceRouter);
- void printLsPath(int destRouter);
- void addAllLsNextHopsToRoutingTable(Nlsr& pnlsr, RoutingTable& rt,
- Map& pMap,int sourceRouter);
- int getLsNextHop(int dest, int source);
-
- void allocateParent();
- void allocateDistance();
- void freeParent();
- void freeDistance();
-
-
-
-
- private:
- int* m_parent;
- double* m_distance;
-
-
- const int EMPTY_PARENT;
- const double INF_DISTANCE;
- const int NO_MAPPING_NUM;
- const int NO_NEXT_HOP;
-
- };
-
- class HypRoutingTableCalculator: public RoutingTableCalculator
- {
- public:
- HypRoutingTableCalculator(int rn)
- : MATH_PI(3.141592654)
- {
- numOfRouter=rn;
- m_isDryRun=0;
- }
- HypRoutingTableCalculator(int rn, int idr)
- : MATH_PI(3.141592654)
- {
- numOfRouter=rn;
- m_isDryRun=idr;
- }
-
- void calculatePath(Map& pMap, RoutingTable& rt, Nlsr& pnlsr);
-
- private:
- void allocateLinkFaces();
- void allocateDistanceToNeighbor();
- void allocateDistFromNbrToDest();
- void freeLinkFaces();
- void freeDistanceToNeighbor();
- void freeDistFromNbrToDest();
-
- double getHyperbolicDistance(Nlsr& pnlsr,Map& pMap, int src, int dest);
- void addHypNextHopsToRoutingTable(Nlsr& pnlsr,Map& pMap,
- RoutingTable& rt, int noFaces,int dest);
-
- private:
- bool m_isDryRun;
-
- int* m_linkFaces;
- double* m_distanceToNeighbor;
- double* m_distFromNbrToDest;
-
- const double MATH_PI;
-
- };
-
-}//namespace nlsr
-
-#endif
diff --git a/src/route/nlsr_rte.cpp b/src/route/nlsr_rte.cpp
deleted file mode 100644
index 7c06b03..0000000
--- a/src/route/nlsr_rte.cpp
+++ /dev/null
@@ -1,29 +0,0 @@
-#include <iostream>
-#include <string>
-
-#include "nlsr_rte.hpp"
-#include "utility/nlsr_logger.hpp"
-
-#define THIS_FILE "nlsr_rte.cpp"
-
-namespace nlsr
-{
-
- using namespace std;
-
- ostream&
- operator<<(ostream& os, RoutingTableEntry& rte)
- {
- os<<"Destination: "<<rte.getDestination()<<endl;
- os<<"Nexthops: "<<endl;
- int i=1;
- std::list< NextHop > nhl = rte.getNhl().getNextHopList();
- for( std::list<NextHop>::iterator it=nhl.begin();
- it!= nhl.end() ; it++,i++)
- {
- os <<" Nexthop "<<i<<": "<<(*it)<<endl;
- }
- return os;
- }
-
-}//namespace nlsr
diff --git a/src/route/nlsr_rte.hpp b/src/route/nlsr_rte.hpp
deleted file mode 100644
index 484edab..0000000
--- a/src/route/nlsr_rte.hpp
+++ /dev/null
@@ -1,52 +0,0 @@
-#ifndef NLSR_RTE_HPP
-#define NLSR_RTE_HPP
-
-#include<iostream>
-
-#include "nlsr_nhl.hpp"
-
-namespace nlsr
-{
-
- using namespace std;
-
- class RoutingTableEntry
- {
- public:
- RoutingTableEntry()
- : m_destination()
- , m_nhl()
- {
- }
-
- ~RoutingTableEntry()
- {
- }
-
- RoutingTableEntry(string dest)
- : m_nhl()
- {
- m_destination=dest;
- }
-
- string getDestination()
- {
- return m_destination;
- }
-
- Nhl& getNhl()
- {
- return m_nhl;
- }
-
- private:
- string m_destination;
- Nhl m_nhl;
- };
-
- ostream&
- operator<<(ostream& os, RoutingTableEntry& rte);
-
-}
-
-#endif
diff --git a/src/route/npt.cpp b/src/route/npt.cpp
new file mode 100644
index 0000000..665dbb2
--- /dev/null
+++ b/src/route/npt.cpp
@@ -0,0 +1,151 @@
+#include <list>
+#include <utility>
+#include <algorithm>
+
+#include "npt.hpp"
+#include "npte.hpp"
+#include "nlsr.hpp"
+
+
+namespace nlsr {
+
+using namespace std;
+
+static bool
+npteCompare(Npte& npte, string& name)
+{
+ return npte.getNamePrefix() == name;
+}
+
+
+
+void
+Npt::addNpte(string name, RoutingTableEntry& rte, Nlsr& pnlsr)
+{
+ std::list<Npte>::iterator it = std::find_if(m_npteList.begin(),
+ m_npteList.end(), bind(&npteCompare, _1, name));
+ if (it == m_npteList.end())
+ {
+ Npte newEntry(name);
+ newEntry.addRoutingTableEntry(rte);
+ newEntry.generateNhlfromRteList();
+ newEntry.getNhl().sort();
+ m_npteList.push_back(newEntry);
+ if (rte.getNhl().getSize() > 0)
+ {
+ pnlsr.getFib().update(pnlsr, name, newEntry.getNhl());
+ }
+ }
+ else
+ {
+ if (rte.getNhl().getSize() > 0)
+ {
+ (*it).addRoutingTableEntry(rte);
+ (*it).generateNhlfromRteList();
+ (*it).getNhl().sort();
+ pnlsr.getFib().update(pnlsr, name, (*it).getNhl());
+ }
+ else
+ {
+ (*it).resetRteListNextHop();
+ (*it).getNhl().reset();
+ pnlsr.getFib().remove(pnlsr, name);
+ }
+ }
+}
+
+void
+Npt::removeNpte(string name, RoutingTableEntry& rte, Nlsr& pnlsr)
+{
+ std::list<Npte>::iterator it = std::find_if(m_npteList.begin(),
+ m_npteList.end(), bind(&npteCompare, _1, name));
+ if (it != m_npteList.end())
+ {
+ string destRouter = rte.getDestination();
+ (*it).removeRoutingTableEntry(rte);
+ if (((*it).getRteListSize() == 0) &&
+ (!pnlsr.getLsdb().doesLsaExist(destRouter + "/1", 1)) &&
+ (!pnlsr.getLsdb().doesLsaExist(destRouter + "/2", 2)) &&
+ (!pnlsr.getLsdb().doesLsaExist(destRouter + "/3", 3)))
+ {
+ m_npteList.erase(it);
+ pnlsr.getFib().remove(pnlsr, name);
+ }
+ else
+ {
+ (*it).generateNhlfromRteList();
+ pnlsr.getFib().update(pnlsr, name, (*it).getNhl());
+ }
+ }
+}
+
+
+void
+Npt::addNpteByDestName(string name, string destRouter, Nlsr& pnlsr)
+{
+ std::pair<RoutingTableEntry&, bool> rteCheck =
+ pnlsr.getRoutingTable().findRoutingTableEntry(destRouter);
+ if (rteCheck.second)
+ {
+ addNpte(name, rteCheck.first, pnlsr);
+ }
+ else
+ {
+ RoutingTableEntry rte(destRouter);
+ addNpte(name, rte, pnlsr);
+ }
+}
+
+void
+Npt::removeNpte(string name, string destRouter, Nlsr& pnlsr)
+{
+ std::pair<RoutingTableEntry&, bool> rteCheck =
+ pnlsr.getRoutingTable().findRoutingTableEntry(destRouter);
+ if (rteCheck.second)
+ {
+ removeNpte(name, rteCheck.first, pnlsr);
+ }
+ else
+ {
+ RoutingTableEntry rte(destRouter);
+ removeNpte(name, rte, pnlsr);
+ }
+}
+
+void
+Npt::updateWithNewRoute(Nlsr& pnlsr)
+{
+ for (std::list<Npte>::iterator it = m_npteList.begin(); it != m_npteList.end();
+ ++it)
+ {
+ std::list<RoutingTableEntry> rteList = (*it).getRteList();
+ for (std::list<RoutingTableEntry>::iterator rteit = rteList.begin();
+ rteit != rteList.end(); ++rteit)
+ {
+ std::pair<RoutingTableEntry&, bool> rteCheck =
+ pnlsr.getRoutingTable().findRoutingTableEntry((*rteit).getDestination());
+ if (rteCheck.second)
+ {
+ addNpte((*it).getNamePrefix(), rteCheck.first, pnlsr);
+ }
+ else
+ {
+ RoutingTableEntry rte((*rteit).getDestination());
+ addNpte((*it).getNamePrefix(), rte, pnlsr);
+ }
+ }
+ }
+}
+
+void
+Npt::print()
+{
+ std::cout << "----------------NPT----------------------" << std::endl;
+ for (std::list<Npte>::iterator it = m_npteList.begin(); it != m_npteList.end();
+ ++it)
+ {
+ cout << (*it) << endl;
+ }
+}
+
+} //namespace nlsr
diff --git a/src/route/npt.hpp b/src/route/npt.hpp
new file mode 100644
index 0000000..8e6cd0a
--- /dev/null
+++ b/src/route/npt.hpp
@@ -0,0 +1,42 @@
+#ifndef NLSR_NPT_HPP
+#define NLSR_NPT_HPP
+
+#include <list>
+#include "npte.hpp"
+#include "routing-table-entry.hpp"
+
+namespace nlsr {
+class Nlsr;
+
+class Npt
+{
+public:
+ Npt()
+ {
+ }
+ void
+ addNpteByDestName(std::string name, std::string destRouter, Nlsr& pnlsr);
+
+ void
+ removeNpte(std::string name, std::string destRouter, Nlsr& pnlsr);
+
+ void
+ updateWithNewRoute(Nlsr& pnlsr);
+
+ void
+ print();
+
+private:
+ void
+ addNpte(std::string name, RoutingTableEntry& rte, Nlsr& pnlsr);
+
+ void
+ removeNpte(std::string name, RoutingTableEntry& rte, Nlsr& pnlsr);
+
+private:
+ std::list<Npte> m_npteList;
+};
+
+}//namespace nlsr
+
+#endif //NLSR_NPT_HPP
diff --git a/src/route/npte.cpp b/src/route/npte.cpp
new file mode 100644
index 0000000..3194635
--- /dev/null
+++ b/src/route/npte.cpp
@@ -0,0 +1,83 @@
+#include <list>
+#include <utility>
+#include "npte.hpp"
+#include "routing-table-entry.hpp"
+#include "nexthop.hpp"
+
+namespace nlsr {
+
+using namespace std;
+
+void
+Npte::generateNhlfromRteList()
+{
+ m_nhl.reset();
+ for (std::list<RoutingTableEntry>::iterator it = m_rteList.begin();
+ it != m_rteList.end(); ++it)
+ {
+ for (std::list<NextHop>::iterator nhit =
+ (*it).getNhl().getNextHopList().begin();
+ nhit != (*it).getNhl().getNextHopList().end(); ++nhit)
+ {
+ m_nhl.addNextHop((*nhit));
+ }
+ }
+}
+
+
+
+static bool
+rteCompare(RoutingTableEntry& rte, string& destRouter)
+{
+ return rte.getDestination() == destRouter;
+}
+
+void
+Npte::removeRoutingTableEntry(RoutingTableEntry& rte)
+{
+ std::list<RoutingTableEntry>::iterator it = std::find_if(m_rteList.begin(),
+ m_rteList.end(),
+ bind(&rteCompare, _1, rte.getDestination()));
+ if (it != m_rteList.end())
+ {
+ m_rteList.erase(it);
+ }
+}
+
+void
+Npte::addRoutingTableEntry(RoutingTableEntry& rte)
+{
+ std::list<RoutingTableEntry>::iterator it = std::find_if(m_rteList.begin(),
+ m_rteList.end(),
+ bind(&rteCompare, _1, rte.getDestination()));
+ if (it == m_rteList.end())
+ {
+ m_rteList.push_back(rte);
+ }
+ else
+ {
+ (*it).getNhl().reset(); // reseting existing routing table's next hop
+ for (std::list<NextHop>::iterator nhit = rte.getNhl().getNextHopList().begin();
+ nhit != rte.getNhl().getNextHopList().end(); ++nhit)
+ {
+ (*it).getNhl().addNextHop((*nhit));
+ }
+ }
+}
+
+//debugging purpose
+ostream&
+operator<<(ostream& os, Npte& npte)
+{
+ os << "Name: " << npte.getNamePrefix() << endl;
+ std::list<RoutingTableEntry> rteList = npte.getRteList();
+ for (std::list<RoutingTableEntry>::iterator it = rteList.begin();
+ it != rteList.end(); ++it)
+ {
+ cout << (*it);
+ }
+ os << npte.getNhl();
+ return os;
+}
+
+}//namespace nlsr
diff --git a/src/route/npte.hpp b/src/route/npte.hpp
new file mode 100644
index 0000000..57fdfec
--- /dev/null
+++ b/src/route/npte.hpp
@@ -0,0 +1,84 @@
+#ifndef NLSR_NPTE_HPP
+#define NLSR_NPTE_HPP
+
+#include <list>
+#include <utility>
+#include "routing-table-entry.hpp"
+
+namespace nlsr {
+
+using namespace std;
+
+class Npte
+{
+public:
+ Npte()
+ : m_namePrefix()
+ , m_nhl()
+ {
+ }
+
+ Npte(string np)
+ : m_nhl()
+ {
+ m_namePrefix = np;
+ }
+
+ std::string
+ getNamePrefix()
+ {
+ return m_namePrefix;
+ }
+
+ std::list<RoutingTableEntry>&
+ getRteList()
+ {
+ return m_rteList;
+ }
+
+ void
+ resetRteListNextHop()
+ {
+ if (m_rteList.size() > 0)
+ {
+ for (std::list<RoutingTableEntry>::iterator it = m_rteList.begin();
+ it != m_rteList.end(); ++it)
+ {
+ (*it).getNhl().reset();
+ }
+ }
+ }
+
+ int
+ getRteListSize()
+ {
+ return m_rteList.size();
+ }
+
+ Nhl&
+ getNhl()
+ {
+ return m_nhl;
+ }
+
+ void
+ generateNhlfromRteList();
+
+ void
+ removeRoutingTableEntry(RoutingTableEntry& rte);
+
+ void
+ addRoutingTableEntry(RoutingTableEntry& rte);
+
+private:
+ std::string m_namePrefix;
+ std::list<RoutingTableEntry> m_rteList;
+ Nhl m_nhl;
+};
+
+std::ostream&
+operator<<(std::ostream& os, Npte& npte);
+
+}//namespace nlsr
+
+#endif //NLSR_NPTE_HPP
diff --git a/src/route/routing-table-calculator.cpp b/src/route/routing-table-calculator.cpp
new file mode 100644
index 0000000..6c6dad3
--- /dev/null
+++ b/src/route/routing-table-calculator.cpp
@@ -0,0 +1,514 @@
+#include <iostream>
+#include <cmath>
+#include "lsdb.hpp"
+#include "routing-table-calculator.hpp"
+#include "map.hpp"
+#include "lsa.hpp"
+#include "nexthop.hpp"
+#include "nlsr.hpp"
+
+namespace nlsr {
+
+using namespace std;
+
+void
+RoutingTableCalculator::allocateAdjMatrix()
+{
+ adjMatrix = new double*[numOfRouter];
+ for (int i = 0; i < numOfRouter; ++i)
+ {
+ adjMatrix[i] = new double[numOfRouter];
+ }
+}
+
+void
+RoutingTableCalculator::initMatrix()
+{
+ for (int i = 0; i < numOfRouter; i++)
+ {
+ for (int j = 0; j < numOfRouter; j++)
+ adjMatrix[i][j] = 0;
+ }
+}
+
+void
+RoutingTableCalculator::makeAdjMatrix(Nlsr& pnlsr, Map pMap)
+{
+ std::list<AdjLsa> adjLsdb = pnlsr.getLsdb().getAdjLsdb();
+ for (std::list<AdjLsa>::iterator it = adjLsdb.begin();
+ it != adjLsdb.end() ; it++)
+ {
+ string linkStartRouter = (*it).getOrigRouter();
+ int row = pMap.getMappingNoByRouterName(linkStartRouter);
+ std::list<Adjacent> adl = (*it).getAdl().getAdjList();
+ for (std::list<Adjacent>::iterator itAdl = adl.begin();
+ itAdl != adl.end() ; itAdl++)
+ {
+ string linkEndRouter = (*itAdl).getName();
+ int col = pMap.getMappingNoByRouterName(linkEndRouter);
+ double cost = (*itAdl).getLinkCost();
+ if ((row >= 0 && row < numOfRouter) && (col >= 0 && col < numOfRouter))
+ {
+ adjMatrix[row][col] = cost;
+ }
+ }
+ }
+}
+
+void
+RoutingTableCalculator::printAdjMatrix()
+{
+ for (int i = 0; i < numOfRouter; i++)
+ {
+ for (int j = 0; j < numOfRouter; j++)
+ printf("%f ", adjMatrix[i][j]);
+ printf("\n");
+ }
+}
+
+void
+RoutingTableCalculator::adjustAdMatrix(int source, int link, double linkCost)
+{
+ for (int i = 0; i < numOfRouter; i++)
+ {
+ if (i == link)
+ {
+ adjMatrix[source][i] = linkCost;
+ }
+ else
+ {
+ adjMatrix[source][i] = 0;
+ }
+ }
+}
+
+int
+RoutingTableCalculator::getNumOfLinkfromAdjMatrix(int sRouter)
+{
+ int noLink = 0;
+ for (int i = 0; i < numOfRouter; i++)
+ {
+ if (adjMatrix[sRouter][i] > 0)
+ {
+ noLink++;
+ }
+ }
+ return noLink;
+}
+
+void
+RoutingTableCalculator::getLinksFromAdjMatrix(int* links,
+ double* linkCosts, int source)
+{
+ int j = 0;
+ for (int i = 0; i < numOfRouter; i++)
+ {
+ if (adjMatrix[source][i] > 0)
+ {
+ links[j] = i;
+ linkCosts[j] = adjMatrix[source][i];
+ j++;
+ }
+ }
+}
+
+void
+RoutingTableCalculator::freeAdjMatrix()
+{
+ for (int i = 0; i < numOfRouter; ++i)
+ {
+ delete [] adjMatrix[i];
+ }
+ delete [] adjMatrix;
+}
+
+
+void
+RoutingTableCalculator::allocateLinks()
+{
+ links = new int[vNoLink];
+}
+
+void
+RoutingTableCalculator::allocateLinkCosts()
+{
+ linkCosts = new double[vNoLink];
+}
+
+
+void
+RoutingTableCalculator::freeLinks()
+{
+ delete [] links;
+}
+void
+RoutingTableCalculator::freeLinksCosts()
+{
+ delete [] linkCosts;
+}
+
+void
+LinkStateRoutingTableCalculator::calculatePath(Map& pMap,
+ RoutingTable& rt, Nlsr& pnlsr)
+{
+ std::cout << "LinkStateRoutingTableCalculator::calculatePath Called" <<
+ std::endl;
+ allocateAdjMatrix();
+ initMatrix();
+ makeAdjMatrix(pnlsr, pMap);
+ std::cout << pMap;
+ printAdjMatrix();
+ string routerName = pnlsr.getConfParameter().getRouterPrefix();
+ int sourceRouter = pMap.getMappingNoByRouterName(routerName);
+ //int noLink=getNumOfLinkfromAdjMatrix(sourceRouter);
+ allocateParent();
+ allocateDistance();
+ if (pnlsr.getConfParameter().getMaxFacesPerPrefix() == 1)
+ {
+ // Single Path
+ doDijkstraPathCalculation(sourceRouter);
+ // print all ls path -- debugging purpose
+ printAllLsPath(sourceRouter);
+ // update routing table
+ addAllLsNextHopsToRoutingTable(pnlsr, rt, pMap, sourceRouter);
+ }
+ else
+ {
+ // Multi Path
+ setNoLink(getNumOfLinkfromAdjMatrix(sourceRouter));
+ allocateLinks();
+ allocateLinkCosts();
+ getLinksFromAdjMatrix(links, linkCosts, sourceRouter);
+ for (int i = 0 ; i < vNoLink; i++)
+ {
+ adjustAdMatrix(sourceRouter, links[i], linkCosts[i]);
+ printAdjMatrix();
+ doDijkstraPathCalculation(sourceRouter);
+ // print all ls path -- debugging purpose
+ printAllLsPath(sourceRouter);
+ //update routing table
+ addAllLsNextHopsToRoutingTable(pnlsr, rt, pMap, sourceRouter);
+ }
+ freeLinks();
+ freeLinksCosts();
+ }
+ freeParent();
+ freeDistance();
+ freeAdjMatrix();
+}
+
+void
+LinkStateRoutingTableCalculator::doDijkstraPathCalculation(int sourceRouter)
+{
+ int i;
+ int v, u;
+ int* Q = new int[numOfRouter];
+ int head = 0;
+ /* Initiate the Parent */
+ for (i = 0 ; i < numOfRouter; i++)
+ {
+ m_parent[i] = EMPTY_PARENT;
+ m_distance[i] = INF_DISTANCE;
+ Q[i] = i;
+ }
+ if (sourceRouter != NO_MAPPING_NUM)
+ {
+ m_distance[sourceRouter] = 0;
+ sortQueueByDistance(Q, m_distance, head, numOfRouter);
+ while (head < numOfRouter)
+ {
+ u = Q[head];
+ if (m_distance[u] == INF_DISTANCE)
+ {
+ break;
+ }
+ for (v = 0 ; v < numOfRouter; v++)
+ {
+ if (adjMatrix[u][v] > 0)
+ {
+ if (isNotExplored(Q, v, head + 1, numOfRouter))
+ {
+ if (m_distance[u] + adjMatrix[u][v] < m_distance[v])
+ {
+ m_distance[v] = m_distance[u] + adjMatrix[u][v] ;
+ m_parent[v] = u;
+ }
+ }
+ }
+ }
+ head++;
+ sortQueueByDistance(Q, m_distance, head, numOfRouter);
+ }
+ }
+ delete [] Q;
+}
+
+void
+LinkStateRoutingTableCalculator::addAllLsNextHopsToRoutingTable(Nlsr& pnlsr,
+ RoutingTable& rt, Map& pMap, int sourceRouter)
+{
+ std::cout <<
+ "LinkStateRoutingTableCalculator::addAllNextHopsToRoutingTable Called";
+ std::cout << std::endl;
+ int nextHopRouter = 0;
+ for (int i = 0; i < numOfRouter ; i++)
+ {
+ if (i != sourceRouter)
+ {
+ nextHopRouter = getLsNextHop(i, sourceRouter);
+ if (nextHopRouter != NO_NEXT_HOP)
+ {
+ double routeCost = m_distance[i];
+ string nextHopRouterName =
+ pMap.getRouterNameByMappingNo(nextHopRouter);
+ int nxtHopFace =
+ pnlsr.getAdl().getAdjacent(nextHopRouterName).getConnectingFace();
+ std::cout << "Dest Router: " << pMap.getRouterNameByMappingNo(i) << std::endl;
+ std::cout << "Next hop Router: " << nextHopRouterName << std::endl;
+ std::cout << "Next hop Face: " << nxtHopFace << std::endl;
+ std::cout << "Route Cost: " << routeCost << std::endl;
+ std::cout << std::endl;
+ // Add next hop to routing table
+ NextHop nh(nxtHopFace, routeCost);
+ rt.addNextHop(pMap.getRouterNameByMappingNo(i), nh);
+ }
+ }
+ }
+}
+
+int
+LinkStateRoutingTableCalculator::getLsNextHop(int dest, int source)
+{
+ int nextHop = NO_NEXT_HOP;
+ while (m_parent[dest] != EMPTY_PARENT)
+ {
+ nextHop = dest;
+ dest = m_parent[dest];
+ }
+ if (dest != source)
+ {
+ nextHop = NO_NEXT_HOP;
+ }
+ return nextHop;
+}
+
+void
+LinkStateRoutingTableCalculator::printAllLsPath(int sourceRouter)
+{
+ std::cout << "LinkStateRoutingTableCalculator::printAllLsPath Called" <<
+ std::endl;
+ std::cout << "Source Router: " << sourceRouter << std::endl;
+ for (int i = 0; i < numOfRouter ; i++)
+ {
+ if (i != sourceRouter)
+ {
+ printLsPath(i);
+ std::cout << std::endl;
+ }
+ }
+}
+
+void
+LinkStateRoutingTableCalculator::printLsPath(int destRouter)
+{
+ if (m_parent[destRouter] != EMPTY_PARENT)
+ {
+ printLsPath(m_parent[destRouter]);
+ }
+ std:: cout << " " << destRouter;
+}
+
+void
+LinkStateRoutingTableCalculator::sortQueueByDistance(int* Q,
+ double* dist, int start, int element)
+{
+ for (int i = start ; i < element ; i++)
+ {
+ for (int j = i + 1; j < element; j++)
+ {
+ if (dist[Q[j]] < dist[Q[i]])
+ {
+ int tempU = Q[j];
+ Q[j] = Q[i];
+ Q[i] = tempU;
+ }
+ }
+ }
+}
+
+int
+LinkStateRoutingTableCalculator::isNotExplored(int* Q,
+ int u, int start, int element)
+{
+ int ret = 0;
+ for (int i = start; i < element; i++)
+ {
+ if (Q[i] == u)
+ {
+ ret = 1;
+ break;
+ }
+ }
+ return ret;
+}
+
+void
+LinkStateRoutingTableCalculator::allocateParent()
+{
+ m_parent = new int[numOfRouter];
+}
+
+void
+LinkStateRoutingTableCalculator::allocateDistance()
+{
+ m_distance = new double[numOfRouter];
+}
+
+void
+LinkStateRoutingTableCalculator::freeParent()
+{
+ delete [] m_parent;
+}
+
+void LinkStateRoutingTableCalculator::freeDistance()
+{
+ delete [] m_distance;
+}
+
+
+
+void
+HypRoutingTableCalculator::calculatePath(Map& pMap,
+ RoutingTable& rt, Nlsr& pnlsr)
+{
+ makeAdjMatrix(pnlsr, pMap);
+ string routerName = pnlsr.getConfParameter().getRouterPrefix();
+ int sourceRouter = pMap.getMappingNoByRouterName(routerName);
+ int noLink = getNumOfLinkfromAdjMatrix(sourceRouter);
+ setNoLink(noLink);
+ allocateLinks();
+ allocateLinkCosts();
+ getLinksFromAdjMatrix(links, linkCosts, sourceRouter);
+ for (int i = 0 ; i < numOfRouter ; ++i)
+ {
+ int k = 0;
+ if (i != sourceRouter)
+ {
+ allocateLinkFaces();
+ allocateDistanceToNeighbor();
+ allocateDistFromNbrToDest();
+ for (int j = 0; j < vNoLink; j++)
+ {
+ string nextHopRouterName = pMap.getRouterNameByMappingNo(links[j]);
+ int nextHopFace =
+ pnlsr.getAdl().getAdjacent(nextHopRouterName).getConnectingFace();
+ double distToNbr = getHyperbolicDistance(pnlsr, pMap,
+ sourceRouter, links[j]);
+ double distToDestFromNbr = getHyperbolicDistance(pnlsr,
+ pMap, links[j], i);
+ if (distToDestFromNbr >= 0)
+ {
+ m_linkFaces[k] = nextHopFace;
+ m_distanceToNeighbor[k] = distToNbr;
+ m_distFromNbrToDest[k] = distToDestFromNbr;
+ k++;
+ }
+ }
+ addHypNextHopsToRoutingTable(pnlsr, pMap, rt, k, i);
+ freeLinkFaces();
+ freeDistanceToNeighbor();
+ freeDistFromNbrToDest();
+ }
+ }
+ freeLinks();
+ freeLinksCosts();
+ freeAdjMatrix();
+}
+
+void
+HypRoutingTableCalculator::addHypNextHopsToRoutingTable(Nlsr& pnlsr, Map& pMap,
+ RoutingTable& rt, int noFaces, int dest)
+{
+ for (int i = 0 ; i < noFaces ; ++i)
+ {
+ string destRouter = pMap.getRouterNameByMappingNo(dest);
+ NextHop nh(m_linkFaces[i], m_distFromNbrToDest[i]);
+ rt.addNextHop(destRouter, nh);
+ if (m_isDryRun)
+ {
+ rt.addNextHopToDryTable(destRouter, nh);
+ }
+ }
+}
+
+double
+HypRoutingTableCalculator::getHyperbolicDistance(Nlsr& pnlsr,
+ Map& pMap, int src, int dest)
+{
+ double distance = 0.0;
+ string srcRouterKey = pMap.getRouterNameByMappingNo(src) + "/3";
+ string destRouterKey = pMap.getRouterNameByMappingNo(dest) + "/3";
+ double srcRadius = (pnlsr.getLsdb().getCorLsa(
+ srcRouterKey).first).getCorRadius();
+ double srcTheta = (pnlsr.getLsdb().getCorLsa(srcRouterKey).first).getCorTheta();
+ double destRadius = (pnlsr.getLsdb().getCorLsa(
+ destRouterKey).first).getCorRadius();
+ double destTheta = (pnlsr.getLsdb().getCorLsa(
+ destRouterKey).first).getCorTheta();
+ double diffTheta = fabs(srcTheta - destTheta);
+ if (diffTheta > MATH_PI)
+ {
+ diffTheta = 2 * MATH_PI - diffTheta;
+ }
+ if (srcRadius != -1 && destRadius != -1)
+ {
+ if (diffTheta == 0)
+ distance = fabs(srcRadius - destRadius);
+ else
+ distance = acosh((cosh(srcRadius) * cosh(destRadius)) -
+ (sinh(srcRadius) * sinh(destRadius) * cos(diffTheta)));
+ }
+ else
+ {
+ distance = -1;
+ }
+ return distance;
+}
+
+void
+HypRoutingTableCalculator::allocateLinkFaces()
+{
+ m_linkFaces = new int[vNoLink];
+}
+
+void
+HypRoutingTableCalculator::allocateDistanceToNeighbor()
+{
+ m_distanceToNeighbor = new double[vNoLink];
+}
+
+void
+HypRoutingTableCalculator::allocateDistFromNbrToDest()
+{
+ m_distFromNbrToDest = new double[vNoLink];
+}
+
+void
+HypRoutingTableCalculator::freeLinkFaces()
+{
+ delete [] m_linkFaces;
+}
+
+void
+HypRoutingTableCalculator::freeDistanceToNeighbor()
+{
+ delete [] m_distanceToNeighbor;
+}
+
+void
+HypRoutingTableCalculator::freeDistFromNbrToDest()
+{
+ delete [] m_distFromNbrToDest;
+}
+
+}//namespace nlsr
diff --git a/src/route/routing-table-calculator.hpp b/src/route/routing-table-calculator.hpp
new file mode 100644
index 0000000..b248b15
--- /dev/null
+++ b/src/route/routing-table-calculator.hpp
@@ -0,0 +1,201 @@
+#ifndef NLSR_RTC_HPP
+#define NLSR_RTC_HPP
+
+#include <list>
+#include <iostream>
+
+namespace nlsr {
+
+class Map;
+class RoutingTable;
+class Nlsr;
+
+class RoutingTableCalculator
+{
+public:
+ RoutingTableCalculator()
+ {
+ }
+ RoutingTableCalculator(int rn)
+ {
+ numOfRouter = rn;
+ }
+protected:
+ void
+ allocateAdjMatrix();
+
+ void
+ initMatrix();
+
+ void
+ makeAdjMatrix(Nlsr& pnlsr, Map pMap);
+
+ void
+ printAdjMatrix();
+
+ int
+ getNumOfLinkfromAdjMatrix(int sRouter);
+
+ void
+ freeAdjMatrix();
+
+ void
+ adjustAdMatrix(int source, int link, double linkCost);
+
+ void
+ getLinksFromAdjMatrix(int* links, double* linkCosts, int source);
+
+ void
+ allocateLinks();
+
+ void
+ allocateLinkCosts();
+
+ void
+ freeLinks();
+
+ void
+ freeLinksCosts();
+
+ void
+ setNoLink(int nl)
+ {
+ vNoLink = nl;
+ }
+
+protected:
+ double** adjMatrix;
+ int numOfRouter;
+
+ int vNoLink;
+ int* links;
+ double* linkCosts;
+};
+
+class LinkStateRoutingTableCalculator: public RoutingTableCalculator
+{
+public:
+ LinkStateRoutingTableCalculator(int rn)
+ : EMPTY_PARENT(-12345)
+ , INF_DISTANCE(2147483647)
+ , NO_MAPPING_NUM(-1)
+ , NO_NEXT_HOP(-12345)
+ {
+ numOfRouter = rn;
+ }
+
+
+ void
+ calculatePath(Map& pMap, RoutingTable& rt, Nlsr& pnlsr);
+
+
+private:
+ void
+ doDijkstraPathCalculation(int sourceRouter);
+
+ void
+ sortQueueByDistance(int* Q, double* dist, int start, int element);
+
+ int
+ isNotExplored(int* Q, int u, int start, int element);
+
+ void
+ printAllLsPath(int sourceRouter);
+
+ void
+ printLsPath(int destRouter);
+
+ void
+ addAllLsNextHopsToRoutingTable(Nlsr& pnlsr, RoutingTable& rt,
+ Map& pMap, int sourceRouter);
+
+ int
+ getLsNextHop(int dest, int source);
+
+ void
+ allocateParent();
+
+ void
+ allocateDistance();
+
+ void
+ freeParent();
+
+ void
+ freeDistance();
+
+
+
+
+private:
+ int* m_parent;
+ double* m_distance;
+
+
+ const int EMPTY_PARENT;
+ const double INF_DISTANCE;
+ const int NO_MAPPING_NUM;
+ const int NO_NEXT_HOP;
+
+};
+
+class HypRoutingTableCalculator: public RoutingTableCalculator
+{
+public:
+ HypRoutingTableCalculator(int rn)
+ : MATH_PI(3.141592654)
+ {
+ numOfRouter = rn;
+ m_isDryRun = 0;
+ }
+
+ HypRoutingTableCalculator(int rn, int idr)
+ : MATH_PI(3.141592654)
+ {
+ numOfRouter = rn;
+ m_isDryRun = idr;
+ }
+
+ void
+ calculatePath(Map& pMap, RoutingTable& rt, Nlsr& pnlsr);
+
+private:
+ void
+ allocateLinkFaces();
+
+ void
+ allocateDistanceToNeighbor();
+
+ void
+ allocateDistFromNbrToDest();
+
+ void
+ freeLinkFaces();
+
+ void
+ freeDistanceToNeighbor();
+
+ void
+ freeDistFromNbrToDest();
+
+ double
+ getHyperbolicDistance(Nlsr& pnlsr, Map& pMap, int src, int dest);
+
+ void
+ addHypNextHopsToRoutingTable(Nlsr& pnlsr, Map& pMap,
+ RoutingTable& rt, int noFaces, int dest);
+
+private:
+ bool m_isDryRun;
+
+ int* m_linkFaces;
+ double* m_distanceToNeighbor;
+ double* m_distFromNbrToDest;
+
+ const double MATH_PI;
+
+};
+
+}//namespace nlsr
+
+#endif //NLSR_RTC_HPP
diff --git a/src/route/routing-table-entry.cpp b/src/route/routing-table-entry.cpp
new file mode 100644
index 0000000..5222cb9
--- /dev/null
+++ b/src/route/routing-table-entry.cpp
@@ -0,0 +1,25 @@
+#include <iostream>
+#include <string>
+
+#include "routing-table-entry.hpp"
+
+namespace nlsr {
+
+using namespace std;
+
+ostream&
+operator<<(ostream& os, RoutingTableEntry& rte)
+{
+ os << "Destination: " << rte.getDestination() << endl;
+ os << "Nexthops: " << endl;
+ int i = 1;
+ std::list<NextHop> nhl = rte.getNhl().getNextHopList();
+ for (std::list<NextHop>::iterator it = nhl.begin();
+ it != nhl.end() ; it++, i++)
+ {
+ os << " Nexthop " << i << ": " << (*it) << endl;
+ }
+ return os;
+}
+
+}//namespace nlsr
diff --git a/src/route/routing-table-entry.hpp b/src/route/routing-table-entry.hpp
new file mode 100644
index 0000000..f185e61
--- /dev/null
+++ b/src/route/routing-table-entry.hpp
@@ -0,0 +1,51 @@
+#ifndef NLSR_RTE_HPP
+#define NLSR_RTE_HPP
+
+#include <iostream>
+
+#include "nhl.hpp"
+
+namespace nlsr {
+
+class RoutingTableEntry
+{
+public:
+ RoutingTableEntry()
+ : m_destination()
+ , m_nhl()
+ {
+ }
+
+ ~RoutingTableEntry()
+ {
+ }
+
+ RoutingTableEntry(std::string dest)
+ : m_nhl()
+ {
+ m_destination = dest;
+ }
+
+ std::string
+ getDestination()
+ {
+ return m_destination;
+ }
+
+ Nhl&
+ getNhl()
+ {
+ return m_nhl;
+ }
+
+private:
+ std::string m_destination;
+ Nhl m_nhl;
+};
+
+std::ostream&
+operator<<(std::ostream& os, RoutingTableEntry& rte);
+
+} //namespace nlsr
+
+#endif //NLSR_RTE_HPP
diff --git a/src/route/routing-table.cpp b/src/route/routing-table.cpp
new file mode 100644
index 0000000..9e2c19c
--- /dev/null
+++ b/src/route/routing-table.cpp
@@ -0,0 +1,232 @@
+#include <iostream>
+#include <string>
+#include <list>
+
+#include "routing-table.hpp"
+#include "nlsr.hpp"
+#include "map.hpp"
+#include "routing-table-calculator.hpp"
+#include "routing-table-entry.hpp"
+#include "npt.hpp"
+
+namespace nlsr {
+
+using namespace std;
+
+void
+RoutingTable::calculate(Nlsr& pnlsr)
+{
+ //debugging purpose
+ std::cout << pnlsr.getConfParameter() << std::endl;
+ pnlsr.getNpt().print();
+ pnlsr.getLsdb().printAdjLsdb();
+ pnlsr.getLsdb().printCorLsdb();
+ pnlsr.getLsdb().printNameLsdb();
+ if (pnlsr.getIsRoutingTableCalculating() == 0)
+ {
+ pnlsr.setIsRoutingTableCalculating(1); //setting routing table calculation
+ if (pnlsr.getLsdb().doesLsaExist(
+ pnlsr.getConfParameter().getRouterPrefix() + "/" + "2", 2))
+ {
+ if (pnlsr.getIsBuildAdjLsaSheduled() != 1)
+ {
+ std::cout << "CLearing old routing table ....." << std::endl;
+ clearRoutingTable();
+ clearDryRoutingTable(); // for dry run options
+ // calculate Link State routing
+ if ((pnlsr.getConfParameter().getIsHyperbolicCalc() == 0)
+ || (pnlsr.getConfParameter().getIsHyperbolicCalc() == 2))
+ {
+ calculateLsRoutingTable(pnlsr);
+ }
+ //calculate hyperbolic routing
+ if (pnlsr.getConfParameter().getIsHyperbolicCalc() == 1)
+ {
+ calculateHypRoutingTable(pnlsr);
+ }
+ //calculate dry hyperbolic routing
+ if (pnlsr.getConfParameter().getIsHyperbolicCalc() == 2)
+ {
+ calculateHypDryRoutingTable(pnlsr);
+ }
+ //need to update NPT here
+ pnlsr.getNpt().updateWithNewRoute(pnlsr);
+ //debugging purpose
+ printRoutingTable();
+ pnlsr.getNpt().print();
+ pnlsr.getFib().print();
+ //debugging purpose end
+ }
+ else
+ {
+ std::cout << "Adjacency building is scheduled, so ";
+ std::cout << "routing table can not be calculated :(" << std::endl;
+ }
+ }
+ else
+ {
+ std::cout << "No Adj LSA of router itself,";
+ std::cout << " so Routing table can not be calculated :(" << std::endl;
+ clearRoutingTable();
+ clearDryRoutingTable(); // for dry run options
+ // need to update NPT here
+ std::cout << "Calling Update NPT With new Route" << std::endl;
+ pnlsr.getNpt().updateWithNewRoute(pnlsr);
+ //debugging purpose
+ printRoutingTable();
+ pnlsr.getNpt().print();
+ pnlsr.getFib().print();
+ //debugging purpose end
+ }
+ pnlsr.setIsRouteCalculationScheduled(0); //clear scheduled flag
+ pnlsr.setIsRoutingTableCalculating(0); //unsetting routing table calculation
+ }
+ else
+ {
+ scheduleRoutingTableCalculation(pnlsr);
+ }
+}
+
+
+void
+RoutingTable::calculateLsRoutingTable(Nlsr& pnlsr)
+{
+ std::cout << "RoutingTable::calculateLsRoutingTable Called" << std::endl;
+ Map vMap;
+ vMap.createFromAdjLsdb(pnlsr);
+ int numOfRouter = vMap.getMapSize();
+ LinkStateRoutingTableCalculator lsrtc(numOfRouter);
+ lsrtc.calculatePath(vMap, boost::ref(*this), pnlsr);
+}
+
+void
+RoutingTable::calculateHypRoutingTable(Nlsr& pnlsr)
+{
+ Map vMap;
+ vMap.createFromAdjLsdb(pnlsr);
+ int numOfRouter = vMap.getMapSize();
+ HypRoutingTableCalculator hrtc(numOfRouter, 0);
+ hrtc.calculatePath(vMap, boost::ref(*this), pnlsr);
+}
+
+void
+RoutingTable::calculateHypDryRoutingTable(Nlsr& pnlsr)
+{
+ Map vMap;
+ vMap.createFromAdjLsdb(pnlsr);
+ int numOfRouter = vMap.getMapSize();
+ HypRoutingTableCalculator hrtc(numOfRouter, 1);
+ hrtc.calculatePath(vMap, boost::ref(*this), pnlsr);
+}
+
+void
+RoutingTable::scheduleRoutingTableCalculation(Nlsr& pnlsr)
+{
+ if (pnlsr.getIsRouteCalculationScheduled() != 1)
+ {
+ pnlsr.getScheduler().scheduleEvent(ndn::time::seconds(15),
+ ndn::bind(&RoutingTable::calculate, this, boost::ref(pnlsr)));
+ pnlsr.setIsRouteCalculationScheduled(1);
+ }
+}
+
+static bool
+routingTableEntryCompare(RoutingTableEntry& rte, string& destRouter)
+{
+ return rte.getDestination() == destRouter;
+}
+
+// function related to manipulation of routing table
+void
+RoutingTable::addNextHop(string destRouter, NextHop& nh)
+{
+ std::pair<RoutingTableEntry&, bool> rte = findRoutingTableEntry(destRouter);
+ if (!rte.second)
+ {
+ RoutingTableEntry rte(destRouter);
+ rte.getNhl().addNextHop(nh);
+ m_rTable.push_back(rte);
+ }
+ else
+ {
+ (rte.first).getNhl().addNextHop(nh);
+ }
+}
+
+std::pair<RoutingTableEntry&, bool>
+RoutingTable::findRoutingTableEntry(string destRouter)
+{
+ std::list<RoutingTableEntry>::iterator it = std::find_if(m_rTable.begin(),
+ m_rTable.end(),
+ bind(&routingTableEntryCompare, _1, destRouter));
+ if (it != m_rTable.end())
+ {
+ return std::make_pair(boost::ref((*it)), true);
+ }
+ RoutingTableEntry rteEmpty;
+ return std::make_pair(boost::ref(rteEmpty), false);
+}
+
+void
+RoutingTable::printRoutingTable()
+{
+ std::cout << "---------------Routing Table------------------" << std::endl;
+ for (std::list<RoutingTableEntry>::iterator it = m_rTable.begin() ;
+ it != m_rTable.end(); ++it)
+ {
+ std::cout << (*it) << std::endl;
+ }
+}
+
+
+//function related to manipulation of dry routing table
+void
+RoutingTable::addNextHopToDryTable(string destRouter, NextHop& nh)
+{
+ std::list<RoutingTableEntry>::iterator it = std::find_if(m_dryTable.begin(),
+ m_dryTable.end(),
+ bind(&routingTableEntryCompare, _1, destRouter));
+ if (it == m_dryTable.end())
+ {
+ RoutingTableEntry rte(destRouter);
+ rte.getNhl().addNextHop(nh);
+ m_dryTable.push_back(rte);
+ }
+ else
+ {
+ (*it).getNhl().addNextHop(nh);
+ }
+}
+
+void
+RoutingTable::printDryRoutingTable()
+{
+ std::cout << "--------Dry Run's Routing Table--------------" << std::endl;
+ for (std::list<RoutingTableEntry>::iterator it = m_dryTable.begin() ;
+ it != m_dryTable.end(); ++it)
+ {
+ cout << (*it) << endl;
+ }
+}
+
+
+void
+RoutingTable::clearRoutingTable()
+{
+ if (m_rTable.size() > 0)
+ {
+ m_rTable.clear();
+ }
+}
+
+void
+RoutingTable::clearDryRoutingTable()
+{
+ if (m_dryTable.size() > 0)
+ {
+ m_dryTable.clear();
+ }
+}
+
+}//namespace nlsr
+
diff --git a/src/route/routing-table.hpp b/src/route/routing-table.hpp
new file mode 100644
index 0000000..cc04915
--- /dev/null
+++ b/src/route/routing-table.hpp
@@ -0,0 +1,73 @@
+#ifndef NLSR_RT_HPP
+#define NLSR_RT_HPP
+
+#include <iostream>
+#include <utility>
+#include <string>
+
+#include "routing-table-entry.hpp"
+
+namespace nlsr {
+
+class Nlsr;
+class NextHop;
+
+class RoutingTable
+{
+public:
+ RoutingTable()
+ : m_NO_NEXT_HOP(-12345)
+ {
+ }
+ void
+ calculate(Nlsr& pnlsr);
+
+ void
+ addNextHop(std::string destRouter, NextHop& nh);
+
+ void
+ printRoutingTable();
+
+ void
+ addNextHopToDryTable(std::string destRouter, NextHop& nh);
+
+ void
+ printDryRoutingTable();
+
+ std::pair<RoutingTableEntry&, bool>
+ findRoutingTableEntry(std::string destRouter);
+
+ void
+ scheduleRoutingTableCalculation(Nlsr& pnlsr);
+
+ int
+ getNoNextHop()
+ {
+ return m_NO_NEXT_HOP;
+ }
+
+private:
+ void
+ calculateLsRoutingTable(Nlsr& pnlsr);
+
+ void
+ calculateHypRoutingTable(Nlsr& pnlsr);
+
+ void
+ calculateHypDryRoutingTable(Nlsr& pnlsr);
+
+ void
+ clearRoutingTable();
+
+ void
+ clearDryRoutingTable();
+
+ const int m_NO_NEXT_HOP;
+
+ std::list<RoutingTableEntry> m_rTable;
+ std::list<RoutingTableEntry> m_dryTable;
+};
+
+}//namespace nlsr
+
+#endif //NLSR_RT_HPP
diff --git a/src/security/certificate-store-entry.cpp b/src/security/certificate-store-entry.cpp
new file mode 100644
index 0000000..5cb7933
--- /dev/null
+++ b/src/security/certificate-store-entry.cpp
@@ -0,0 +1,17 @@
+#include <ndn-cpp-dev/security/signature-sha256-with-rsa.hpp>
+#include "certificate-store-entry.hpp"
+
+namespace nlsr {
+std::ostream&
+operator<<(std::ostream& os, const CertificateStoreEntry& ncse)
+{
+ os << "------Certificate Entry---------------" << std::endl;
+ os << *(ncse.getCert()) << std::endl;
+ ndn::SignatureSha256WithRsa sig(ncse.getCert()->getSignature());
+ ndn::Name keyName = sig.getKeyLocator().getName();
+ os << "Signee : " << keyName.toUri() << std::endl;
+ os << "Cert Seq Num: " << ncse.getCertSeqNum() << std::endl;
+ os << "Is Signer Verified: " << ncse.getIsSignerVerified() << std::endl;
+ return os;
+}
+}//namespace nlsr
diff --git a/src/security/certificate-store-entry.hpp b/src/security/certificate-store-entry.hpp
new file mode 100644
index 0000000..1257129
--- /dev/null
+++ b/src/security/certificate-store-entry.hpp
@@ -0,0 +1,72 @@
+#ifndef NLSR_CERT_STORE_ENTRY_HPP
+#define NLSR_CERT_STORE_ENTRY_HPP
+
+#include <iostream>
+#include <ndn-cpp-dev/face.hpp>
+#include <ndn-cpp-dev/security/identity-certificate.hpp>
+
+namespace nlsr {
+class CertificateStoreEntry
+{
+public:
+ CertificateStoreEntry()
+ : m_cert(ndn::make_shared<ndn::IdentityCertificate>())
+ , m_certSeqNum(0)
+ , m_isSignerVerified(false)
+ {}
+
+ CertificateStoreEntry(ndn::shared_ptr<ndn::IdentityCertificate> pcert
+ , uint32_t csn, bool isv)
+ : m_cert(pcert)
+ , m_certSeqNum(csn)
+ , m_isSignerVerified(isv)
+ {}
+
+ ndn::shared_ptr<ndn::IdentityCertificate>
+ getCert() const
+ {
+ return m_cert;
+ }
+
+ void
+ setCert(ndn::shared_ptr<ndn::IdentityCertificate> pcert)
+ {
+ m_cert = pcert;
+ }
+
+ uint32_t
+ getCertSeqNum() const
+ {
+ return m_certSeqNum;
+ }
+
+ void
+ setCertSeqNum(uint32_t csn)
+ {
+ m_certSeqNum = csn;
+ }
+
+ bool
+ getIsSignerVerified() const
+ {
+ return m_isSignerVerified;
+ }
+
+ void
+ setIsSignerVerified(bool isv)
+ {
+ m_isSignerVerified = isv;
+ }
+
+private:
+ ndn::shared_ptr<ndn::IdentityCertificate> m_cert;
+ uint32_t m_certSeqNum;
+ bool m_isSignerVerified;
+};
+/* Debugging Purpose */
+std::ostream&
+operator <<(std::ostream& os, const CertificateStoreEntry& ncse);
+
+}//namespace NLSR
+
+#endif //NLSR_CERT_STORE_ENTRY_HPP
diff --git a/src/security/certificate-store.cpp b/src/security/certificate-store.cpp
new file mode 100644
index 0000000..3ac5361
--- /dev/null
+++ b/src/security/certificate-store.cpp
@@ -0,0 +1,233 @@
+#include <ndn-cpp-dev/security/signature-sha256-with-rsa.hpp>
+#include <ndn-cpp-dev/security/key-chain.hpp>
+#include "certificate-store.hpp"
+#include "waiting-list-entry.hpp"
+#include "key-manager.hpp"
+
+
+namespace nlsr {
+static bool
+nlsrCertificateStoreEntryCompare(CertificateStoreEntry& ncse1,
+ CertificateStoreEntry& ncse2)
+
+{
+ int sizeDiff = ncse1.getCert()->getName().size() -
+ ncse2.getCert()->getName().size();
+ return (ncse2.getCert()->getName().isPrefixOf(ncse1.getCert()->getName()) &&
+ (sizeDiff <= 1 && sizeDiff >= 0));
+}
+
+static bool
+nlsrCertificateStoreEntryCompareByName(CertificateStoreEntry& ncse1,
+ std::string compCertName)
+
+{
+ ndn::Name ccn(compCertName);
+ int sizeDiff = ncse1.getCert()->getName().size() - ccn.size();
+ return (ccn.isPrefixOf(ncse1.getCert()->getName()) &&
+ (sizeDiff <= 1 && sizeDiff >= 0));
+}
+
+void
+CertificateStore::updateWaitingList(std::string respCertName)
+{
+ ndn::Name tmpName(respCertName);
+ respCertName = tmpName.getPrefix(-1).toUri();
+ std::pair<WaitingListEntry, bool> chkWle =
+ m_waitingList.getWaitingListEntry(respCertName);
+ if (chkWle.second)
+ {
+ std::pair<ndn::shared_ptr<ndn::IdentityCertificate>, bool> sc =
+ getCertificateFromStore(respCertName);
+ std::list<std::string> waitees = (chkWle.first).getWaitingCerts();
+ for (std::list<std::string>::iterator it = waitees.begin();
+ it != waitees.end(); ++it)
+ {
+ KeyManager km;
+ std::pair<ndn::shared_ptr<ndn::IdentityCertificate>, bool> wc =
+ getCertificateFromStore(*(it));
+ if (wc.second && sc.second)
+ {
+ if (km.verifySignature(*(wc.first), sc.first->getPublicKeyInfo()))
+ {
+ //1. Update Certificate Store
+ setCertificateIsVerified(*(it), true);
+ //2. Call updateWaitingList for waitee ( *(it) )
+ updateWaitingList(*(it));
+ }
+ }
+ }
+ }
+
+ //remove that entry from waiting list
+ m_waitingList.remove(respCertName);
+}
+
+void
+CertificateStore::updateWaitingList(CertificateStoreEntry& ncse)
+{
+ if (ncse.getIsSignerVerified())
+ {
+ updateWaitingList(ncse.getCert()->getName().toUri());
+ }
+ else
+ {
+ ndn::SignatureSha256WithRsa signature(ncse.getCert()->getSignature());
+ m_waitingList.add(signature.getKeyLocator().getName().toUri(),
+ ncse.getCert()->getName().toUri());
+ }
+}
+
+bool
+CertificateStore::addCertificate(CertificateStoreEntry& ncse)
+{
+ std::list<CertificateStoreEntry>::iterator it =
+ std::find_if(m_certTable.begin(), m_certTable.end(),
+ bind(&nlsrCertificateStoreEntryCompare, _1, ncse));
+ if (it == m_certTable.end())
+ {
+ m_certTable.push_back(ncse);
+ updateWaitingList(ncse);
+ return true;
+ }
+ else if (it != m_certTable.end())
+ {
+ if ((*it).getCertSeqNum() < ncse.getCertSeqNum())
+ {
+ m_certTable.erase(it);
+ m_certTable.push_back(ncse);
+ updateWaitingList(ncse);
+ return true;
+ }
+ }
+ return false;
+}
+
+bool
+CertificateStore::addCertificate(
+ ndn::shared_ptr<ndn::IdentityCertificate> pcert, uint32_t csn, bool isv)
+{
+ CertificateStoreEntry ncse(pcert, csn, isv);
+ return addCertificate(ncse);
+}
+
+std::pair<uint32_t, bool>
+CertificateStore::getCertificateSeqNum(std::string certName)
+{
+ std::list<CertificateStoreEntry>::iterator it =
+ std::find_if(m_certTable.begin(), m_certTable.end(),
+ bind(&nlsrCertificateStoreEntryCompareByName, _1, certName));
+ if (it == m_certTable.end())
+ {
+ return std::make_pair(0, false);
+ }
+ return std::make_pair((*it).getCertSeqNum(), true);
+}
+
+
+
+void
+CertificateStore::setCertificateIsVerified(std::string certName,
+ bool isVerified)
+{
+ std::list<CertificateStoreEntry>::iterator it =
+ std::find_if(m_certTable.begin(), m_certTable.end(),
+ bind(&nlsrCertificateStoreEntryCompareByName, _1, certName));
+ if (it != m_certTable.end())
+ {
+ it->setIsSignerVerified(true);
+ }
+}
+
+bool
+CertificateStore::getCertificateIsVerified(std::string certName)
+{
+ std::list<CertificateStoreEntry>::iterator it =
+ std::find_if(m_certTable.begin(), m_certTable.end(),
+ bind(&nlsrCertificateStoreEntryCompareByName, _1, certName));
+ if (it != m_certTable.end())
+ {
+ return it->getIsSignerVerified();
+ }
+
+ return false;
+}
+
+std::pair<ndn::shared_ptr<ndn::IdentityCertificate>, bool>
+CertificateStore::getCertificateFromStore(const std::string certName)
+{
+ std::list<CertificateStoreEntry>::iterator it =
+ std::find_if(m_certTable.begin(), m_certTable.end(),
+ bind(&nlsrCertificateStoreEntryCompareByName, _1, certName));
+ if (it == m_certTable.end())
+ {
+ ndn::shared_ptr<ndn::IdentityCertificate> cert =
+ ndn::make_shared<ndn::IdentityCertificate>();
+ return std::make_pair(cert, false);
+ }
+ return std::make_pair((*it).getCert(), true);
+}
+
+std::pair<ndn::shared_ptr<ndn::IdentityCertificate>, bool>
+CertificateStore::getCertificateFromStore(
+ const std::string certName, uint64_t checkSeqNum)
+{
+ std::list<CertificateStoreEntry>::iterator it =
+ std::find_if(m_certTable.begin(), m_certTable.end(),
+ bind(&nlsrCertificateStoreEntryCompareByName, _1, certName));
+ if (it == m_certTable.end())
+ {
+ ndn::shared_ptr<ndn::IdentityCertificate> cert =
+ ndn::make_shared<ndn::IdentityCertificate>();
+ return std::make_pair(cert, false);
+ }
+ else
+ {
+ if ((*it).getCertSeqNum() == checkSeqNum)
+ {
+ return std::make_pair((*it).getCert(), true);
+ }
+ }
+ return std::make_pair((*it).getCert(), false);
+}
+
+bool
+CertificateStore::isCertificateNewInStore(const std::string certName,
+ int checkSeqNo)
+{
+ std::list<CertificateStoreEntry>::iterator it =
+ std::find_if(m_certTable.begin(), m_certTable.end(),
+ bind(&nlsrCertificateStoreEntryCompareByName, _1, certName));
+ if (it != m_certTable.end())
+ {
+ return (*it).getCertSeqNum() < checkSeqNo ;
+ }
+ return true;
+}
+
+bool
+CertificateStore::removeCertificateFromStroe(const std::string certName)
+{
+ std::list<CertificateStoreEntry>::iterator it =
+ std::find_if(m_certTable.begin(), m_certTable.end(),
+ bind(&nlsrCertificateStoreEntryCompareByName, _1, certName));
+ if (it != m_certTable.end())
+ {
+ m_certTable.erase(it);
+ return true;
+ }
+ return false;
+}
+
+void
+CertificateStore::print()
+{
+ std::list<CertificateStoreEntry>::iterator it;
+ for (it = m_certTable.begin(); it != m_certTable.end(); ++it)
+ {
+ std::cout << (*it) << std::endl;
+ }
+ std::cout << m_waitingList << std::endl;
+}
+
+} //namespace nlsr
diff --git a/src/security/certificate-store.hpp b/src/security/certificate-store.hpp
new file mode 100644
index 0000000..01495d9
--- /dev/null
+++ b/src/security/certificate-store.hpp
@@ -0,0 +1,63 @@
+#ifndef NLSR_CERT_STORE_HPP
+#define NLSR_CERT_STORE_HPP
+
+#include <list>
+#include <ndn-cpp-dev/security/identity-certificate.hpp>
+#include "certificate-store-entry.hpp"
+#include "waiting-list.hpp"
+
+namespace nlsr {
+class CertificateStore
+{
+public:
+ CertificateStore()
+ : m_certTable()
+ , m_waitingList()
+ {}
+
+ bool
+ addCertificate(CertificateStoreEntry& ncse);
+
+ bool
+ addCertificate(ndn::shared_ptr<ndn::IdentityCertificate> pcert
+ , uint32_t csn, bool isv);
+
+ std::pair<ndn::shared_ptr<ndn::IdentityCertificate>, bool>
+ getCertificateFromStore(const std::string certName);
+
+ std::pair<ndn::shared_ptr<ndn::IdentityCertificate>, bool>
+ getCertificateFromStore(const std::string certName, uint64_t checkSeqNum);
+
+ bool
+ removeCertificateFromStroe(const std::string certName);
+
+ bool
+ isCertificateNewInStore(const std::string certName, int checkSeqNo);
+
+ std::pair<uint32_t, bool>
+ getCertificateSeqNum(std::string certName);
+
+ void
+ print();
+
+ void
+ setCertificateIsVerified(std::string certName, bool isVerified);
+
+ bool
+ getCertificateIsVerified(std::string certName);
+
+private:
+ void
+ updateWaitingList(CertificateStoreEntry& ncse);
+
+ void
+ updateWaitingList(std::string respCertName);
+
+private:
+ std::list<CertificateStoreEntry> m_certTable;
+ WaitingList m_waitingList;
+};
+
+} //namespace nlsr
+
+#endif // NLSR_CERT_STORE_HPP
diff --git a/src/security/key-manager.cpp b/src/security/key-manager.cpp
new file mode 100644
index 0000000..5ab63a8
--- /dev/null
+++ b/src/security/key-manager.cpp
@@ -0,0 +1,406 @@
+#include <ndn-cpp-dev/security/identity-certificate.hpp>
+#include <ndn-cpp-dev/encoding/block.hpp>
+#include <ndn-cpp-dev/util/io.hpp>
+#include <stdexcept>
+
+#include "sequencing-manager.hpp"
+#include "key-manager.hpp"
+#include "nlsr.hpp"
+
+
+namespace nlsr {
+bool
+KeyManager::initialize(ConfParameter& cp)
+{
+ initCertSeqFromFile(cp.getSeqFileDir());
+ if (!loadAllCertificates(cp.getCertDir()))
+ {
+ return false;
+ }
+ m_nlsrRootKeyPrefix = cp.getRootKeyPrefix();
+ string processIdentityName(cp.getRootKeyPrefix());
+ processIdentityName += "/";
+ processIdentityName += cp.getSiteName();
+ processIdentityName += "/";
+ processIdentityName += "R.Start";
+ processIdentityName += "/";
+ processIdentityName += cp.getRouterName();
+ ndn::Name ri(processIdentityName);
+ std::cout << "Router Identity: " << ri.toUri() << std::endl;
+ m_routerIdentity = ri;
+ processIdentityName += "/";
+ processIdentityName += "nlsr";
+ cout << "Proces Identity Name: " << processIdentityName << endl;
+ ndn::Name identityName(processIdentityName);
+ m_processIdentity = identityName;
+ ndn::KeyChain::deleteIdentity(m_processIdentity);
+ m_processCertName = ndn::KeyChain::createIdentity(m_processIdentity);
+ cout << "Certificate Name: " << m_processCertName.toUri() << endl;
+ m_processKeyName = m_processCertName.getPrefix(-2);
+ cout << "Key Name: " << m_processKeyName.toUri() << endl;
+ ndn::shared_ptr<ndn::IdentityCertificate> cert =
+ getCertificate(m_processCertName);
+ signByIdentity(*(cert), m_routerIdentity);
+ m_certStore.addCertificate(cert, m_certSeqNo, true);
+ m_certStore.print();
+ return true;
+}
+
+bool
+KeyManager::loadAllCertificates(std::string certDirPath)
+{
+ std::string filePath = certDirPath;
+ if (filePath.empty())
+ {
+ SequencingManager sm;
+ filePath = sm.getUserHomeDirectory();
+ filePath += "/nlsrCertDir";
+ }
+ return loadCertificate(filePath + "/root.cert", KEY_TYPE_ROOT)
+ && loadCertificate(filePath + "/site.cert", KEY_TYPE_SITE)
+ && loadCertificate(filePath + "/operator.cert", KEY_TYPE_OPERATOR)
+ && loadCertificate(filePath + "/router.cert", KEY_TYPE_ROUTER) ;
+}
+
+bool
+KeyManager::loadCertificate(std::string inputFile, nlsrKeyType keyType)
+{
+ try
+ {
+ ndn::shared_ptr<ndn::IdentityCertificate> cert =
+ ndn::io::load<ndn::IdentityCertificate>(inputFile, ndn::io::BASE_64);
+ ndn::Name certName = cert->getName();
+ switch (keyType)
+ {
+ case KEY_TYPE_ROOT:
+ m_certStore.addCertificate(cert, 10, true);
+ m_rootCertName = certName;
+ std::cout << "Root Cert: " << m_rootCertName << std::endl;
+ break;
+ case KEY_TYPE_SITE:
+ m_certStore.addCertificate(cert, 10, true);
+ m_siteCertName = certName;
+ std::cout << "Site Cert: " << m_siteCertName << std::endl;
+ break;
+ case KEY_TYPE_OPERATOR:
+ m_certStore.addCertificate(cert, 10, true);
+ m_opCertName = certName;
+ std::cout << "Operator Cert: " << m_opCertName << std::endl;
+ break;
+ case KEY_TYPE_ROUTER:
+ m_certStore.addCertificate(cert, m_certSeqNo, true);
+ m_routerCertName = certName;
+ std::cout << "Router Cert: " << m_routerCertName << std::endl;
+ break;
+ case KEY_TYPE_PROCESS:
+ m_certStore.addCertificate(cert, m_certSeqNo, true);
+ m_processCertName = certName;
+ std::cout << "Process Cert: " << m_processCertName << std::endl;
+ break;
+ default:
+ break;
+ }
+ return true;
+ }
+ catch (std::exception& e)
+ {
+ return false;
+ }
+ return false;
+}
+
+ndn::Name
+KeyManager::getProcessCertName()
+{
+ return m_processCertName;
+}
+
+ndn::Name
+KeyManager::getRouterCertName()
+{
+ return m_routerCertName;
+}
+
+ndn::Name
+KeyManager::getOperatorCertName()
+{
+ return m_opCertName;
+}
+
+ndn::Name
+KeyManager::getSiteCertName()
+{
+ return m_siteCertName;
+}
+
+ndn::Name
+KeyManager::getRootCertName()
+{
+ return m_rootCertName;
+}
+
+uint32_t
+KeyManager::getCertSeqNo()
+{
+ return m_certSeqNo;
+}
+
+void
+KeyManager::setCerSeqNo(uint32_t csn)
+{
+ m_certSeqNo = csn;
+}
+
+void
+KeyManager::initCertSeqFromFile(string certSeqFileDir)
+{
+ m_certSeqFileNameWithPath = certSeqFileDir;
+ if (m_certSeqFileNameWithPath.empty())
+ {
+ SequencingManager sm;
+ m_certSeqFileNameWithPath = sm.getUserHomeDirectory();
+ }
+ m_certSeqFileNameWithPath += "/nlsrCertSeqNo.txt";
+ cout << "Key Seq File Name: " << m_certSeqFileNameWithPath << endl;
+ std::ifstream inputFile(m_certSeqFileNameWithPath.c_str(), ios::binary);
+ if (inputFile.good())
+ {
+ inputFile >> m_certSeqNo;
+ m_certSeqNo++;
+ }
+ else
+ {
+ m_certSeqNo = 1;
+ }
+ writeCertSeqToFile();
+}
+
+void
+KeyManager::writeCertSeqToFile()
+{
+ std::ofstream outputFile(m_certSeqFileNameWithPath.c_str(), ios::binary);
+ outputFile << m_certSeqNo;
+ outputFile.close();
+}
+
+bool
+KeyManager::isNewCertificate(std::string certName, int checkSeqNum)
+{
+ return m_certStore.isCertificateNewInStore(certName, checkSeqNum);
+}
+
+std::pair<ndn::shared_ptr<ndn::IdentityCertificate>, bool>
+KeyManager::getCertificateFromStore(const std::string certName, int checkSeqNum)
+{
+ return m_certStore.getCertificateFromStore(certName, checkSeqNum);
+}
+
+std::pair<ndn::shared_ptr<ndn::IdentityCertificate>, bool>
+KeyManager::getCertificateFromStore(const std::string certName)
+{
+ return m_certStore.getCertificateFromStore(certName);
+}
+
+bool
+KeyManager::addCertificate(ndn::shared_ptr<ndn::IdentityCertificate> pcert
+ , uint32_t csn, bool isv)
+{
+ return m_certStore.addCertificate(pcert, csn, isv);
+}
+
+std::pair<uint32_t, bool>
+KeyManager::getCertificateSeqNum(std::string certName)
+{
+ return m_certStore.getCertificateSeqNum(certName);
+}
+
+nlsrKeyType
+KeyManager::getKeyTypeFromName(const std::string keyName)
+{
+ Tokenizer nt(keyName, "/");
+ std::string KEY("KEY");
+ std::string opHandle("O.Start");
+ std::string routerHandle("R.Start");
+ std::string processHandle("nlsr");
+ if (nt.getTokenString(0, nt.getTokenPosition(KEY) - 1) == m_nlsrRootKeyPrefix)
+ {
+ return KEY_TYPE_ROOT;
+ }
+ else if (nt.doesTokenExist(opHandle))
+ {
+ return KEY_TYPE_OPERATOR;
+ }
+ else if (nt.doesTokenExist(routerHandle) &&
+ nt.doesTokenExist(processHandle))
+ {
+ return KEY_TYPE_PROCESS;
+ }
+ else if (nt.doesTokenExist(routerHandle) &&
+ !nt.doesTokenExist(processHandle))
+ {
+ return KEY_TYPE_ROUTER;
+ }
+ else
+ {
+ return KEY_TYPE_SITE;
+ }
+}
+
+std::string
+KeyManager::getRouterName(const std::string name)
+{
+ std::string routerName;
+ std::string rkp(m_nlsrRootKeyPrefix);
+ Tokenizer ntRkp(rkp, "/");
+ Tokenizer nt(name, "/");
+ std::string KEY("KEY");
+ std::string opHandle("O.Start");
+ std::string routerHandle("R.Start");
+ std::string processHandle("nlsr");
+ std::string infoHandle("info");
+ std::string lsaHandle("LSA");
+ if (nt.doesTokenExist(processHandle) && nt.doesTokenExist(routerHandle))
+ {
+ routerName = "/ndn" +
+ nt.getTokenString(ntRkp.getTokenNumber(),
+ nt.getTokenPosition(routerHandle) - 1) +
+ nt.getTokenString(nt.getTokenPosition(routerHandle) + 1,
+ nt.getTokenPosition(processHandle) - 1);
+ }
+ else if (nt.doesTokenExist(routerHandle) && !nt.doesTokenExist(infoHandle)
+ && !nt.doesTokenExist(lsaHandle))
+ {
+ routerName = "/ndn" +
+ nt.getTokenString(ntRkp.getTokenNumber(),
+ nt.getTokenPosition(routerHandle) - 1) +
+ nt.getTokenString(nt.getTokenPosition(routerHandle) + 1,
+ nt.getTokenPosition(KEY) - 1);
+ }
+ else
+ {
+ if (nt.doesTokenExist(infoHandle))
+ {
+ routerName = nt.getTokenString(0, nt.getTokenPosition(infoHandle) - 1);
+ }
+ else
+ {
+ routerName = nt.getTokenString(nt.getTokenPosition(lsaHandle) + 1,
+ nt.getTokenNumber() - 4);
+ }
+ }
+ return routerName;
+}
+
+std::string
+KeyManager::getSiteName(const std::string name)
+{
+ std::string siteName;
+ std::string routerName;
+ std::string rkp(m_nlsrRootKeyPrefix);
+ Tokenizer ntRkp(rkp, "/");
+ Tokenizer nt(name, "/");
+ std::string KEY("KEY");
+ std::string opHandle("O.Start");
+ std::string routerHandle("R.Start");
+ if (nt.doesTokenExist(routerHandle))
+ {
+ siteName = "/ndn" + nt.getTokenString(ntRkp.getTokenNumber(),
+ nt.getTokenPosition(routerHandle) - 1);
+ }
+ else if (nt.doesTokenExist(opHandle))
+ {
+ siteName = "/ndn" + nt.getTokenString(ntRkp.getTokenNumber(),
+ nt.getTokenPosition(opHandle) - 1);
+ }
+ else
+ {
+ siteName = "/ndn" + nt.getTokenString(ntRkp.getTokenNumber(),
+ nt.getTokenPosition(KEY) - 1);
+ }
+ return siteName;
+}
+
+std::string
+KeyManager::getRootName(const std::string name)
+{
+ std::string rName;
+ Tokenizer nt(name, "/");
+ std::string rkp(m_nlsrRootKeyPrefix);
+ Tokenizer ntRkp(rkp, "/");
+ rName = nt.getTokenString(0, ntRkp.getTokenNumber() - 1);
+ return rName;
+}
+
+
+bool
+KeyManager::verifyCertPacket(Nlsr& pnlsr, ndn::IdentityCertificate& packet)
+{
+ std::cout << "KeyManager::verifyCertPacket Called" << std::endl;
+ ndn::SignatureSha256WithRsa signature(packet.getSignature());
+ std::string signingCertName = signature.getKeyLocator().getName().toUri();
+ std::string packetName = packet.getName().toUri();
+
+ std::cout << "Packet Name: " << packetName << std::endl;
+ std::cout << "Signee Name: " << signingCertName << std::endl;
+
+ int paketCertType = getKeyTypeFromName(packetName);
+ int signingCertType = getKeyTypeFromName(signingCertName);
+
+ if (signingCertType > paketCertType) //lower level Cert can not sign
+ {
+ //upper level Cert
+ return false;
+ }
+
+ if ((signingCertType == paketCertType) && (paketCertType != KEY_TYPE_ROOT))
+ {
+ return false;
+ }
+
+ std::pair<ndn::shared_ptr<ndn::IdentityCertificate>, bool> signee =
+ m_certStore.getCertificateFromStore(signingCertName);
+
+ if (signee.second)
+ {
+ switch (paketCertType)
+ {
+ case KEY_TYPE_ROOT:
+ return ((getRootName(packetName) == m_nlsrRootKeyPrefix) &&
+ verifySignature(packet, signee.first->getPublicKeyInfo()));
+ break;
+ case KEY_TYPE_SITE:
+ return ((getRootName(packetName) == getRootName(signingCertName)) &&
+ verifySignature(packet, signee.first->getPublicKeyInfo()) &&
+ m_certStore.getCertificateIsVerified(signingCertName));
+ break;
+ case KEY_TYPE_OPERATOR:
+ return ((getSiteName(packetName) == getSiteName(signingCertName)) &&
+ verifySignature(packet, signee.first->getPublicKeyInfo()) &&
+ m_certStore.getCertificateIsVerified(signingCertName));
+ break;
+ case KEY_TYPE_ROUTER:
+ return ((getSiteName(packetName) == getSiteName(signingCertName)) &&
+ verifySignature(packet, signee.first->getPublicKeyInfo()) &&
+ m_certStore.getCertificateIsVerified(signingCertName));
+ break;
+ case KEY_TYPE_PROCESS:
+ return ((getRouterName(packetName) == getRouterName(signingCertName)) &&
+ verifySignature(packet, signee.first->getPublicKeyInfo()) &&
+ m_certStore.getCertificateIsVerified(signingCertName));
+ break;
+ }
+ }
+ else
+ {
+ std::cout << "Certificate Not Found in store. Sending Interest" << std::endl;
+ pnlsr.getIm().expressInterest(pnlsr, signingCertName, 3,
+ pnlsr.getConfParameter().getInterestResendTime());
+ return false;
+ }
+ return false;
+}
+
+}//namespace nlsr
+
+
+
diff --git a/src/security/key-manager.hpp b/src/security/key-manager.hpp
new file mode 100644
index 0000000..9becfe2
--- /dev/null
+++ b/src/security/key-manager.hpp
@@ -0,0 +1,275 @@
+#ifndef NLSR_KM_HPP
+#define NLSR_KM_HPP
+
+#include <ndn-cpp-dev/face.hpp>
+#include <ndn-cpp-dev/data.hpp>
+#include <ndn-cpp-dev/security/key-chain.hpp>
+#include <ndn-cpp-dev/security/validator.hpp>
+#include <ndn-cpp-dev/util/random.hpp>
+#include <ndn-cpp-dev/security/identity-certificate.hpp>
+#include <list>
+#include "conf-parameter.hpp"
+#include "certificate-store.hpp"
+#include "utility/tokenizer.hpp"
+
+namespace nlsr {
+class Nlsr;
+enum nlsrKeyType
+{
+ KEY_TYPE_ROOT,
+ KEY_TYPE_SITE,
+ KEY_TYPE_OPERATOR,
+ KEY_TYPE_ROUTER,
+ KEY_TYPE_PROCESS,
+ KEY_TYPE_UNKNOWN
+};
+
+enum nlsrContentType
+{
+ CONTENT_TYPE_DATA,
+ CONTENT_TYPE_CERT
+};
+
+class KeyManager: public ndn::KeyChain, public ndn::Validator
+{
+ typedef SecPublicInfo::Error InfoError;
+ typedef SecTpm::Error TpmError;
+public:
+ using ndn::KeyChain::addCertificate;
+ KeyManager()
+ : m_certSeqNo(1)
+ , m_nlsrRootKeyPrefix()
+ , m_certStore()
+ {
+ }
+
+ bool
+ initialize(ConfParameter& cp);
+
+
+
+ void
+ checkPolicy(const ndn::Data& data,
+ int stepCount,
+ const ndn::OnDataValidated& onValidated,
+ const ndn::OnDataValidationFailed& onValidationFailed,
+ std::vector<ndn::shared_ptr<ndn::ValidationRequest> >& nextSteps)
+ {}
+
+ void
+ checkPolicy(const ndn::Interest& interest,
+ int stepCount,
+ const ndn::OnInterestValidated& onValidated,
+ const ndn::OnInterestValidationFailed& onValidationFailed,
+ std::vector<ndn::shared_ptr<ndn::ValidationRequest> >& nextSteps)
+ {}
+
+ void
+ signData(ndn::Data& data)
+ {
+ ndn::KeyChain::signByIdentity(data, m_processIdentity);
+ }
+
+ template<typename T> void
+ signByIdentity(T& packet, ndn::Name signeeIdentity)
+ {
+ ndn::KeyChain::signByIdentity(packet, signeeIdentity);
+ }
+
+ ndn::Name
+ createIdentity(const ndn::Name identityName)
+ {
+ return ndn::KeyChain::createIdentity(identityName);
+ }
+
+ ndn::Name
+ createIdentity(const ndn::Name identityName, const ndn::Name signee)
+ {
+ ndn::KeyChain::addIdentity(identityName);
+ ndn::Name keyName;
+ try
+ {
+ keyName = ndn::KeyChain::getDefaultKeyNameForIdentity(identityName);
+ }
+ catch (InfoError& e)
+ {
+ keyName = ndn::KeyChain::generateRSAKeyPairAsDefault(identityName, true);
+ }
+ ndn::shared_ptr<ndn::PublicKey> pubKey;
+ try
+ {
+ pubKey = ndn::KeyChain::getPublicKey(keyName);
+ }
+ catch (InfoError& e)
+ {
+ return identityName;
+ }
+ ndn::Name certName;
+ try
+ {
+ certName = ndn::KeyChain::getDefaultCertificateNameForKey(keyName);
+ }
+ catch (InfoError& e)
+ {
+ ndn::shared_ptr<ndn::IdentityCertificate> certificate =
+ ndn::make_shared<ndn::IdentityCertificate>();
+ ndn::Name certificateName = keyName.getPrefix(-1);
+ certificateName.append("KEY").append(
+ keyName.get(-1)).append("ID-CERT").appendVersion();
+ certificate->setName(certificateName);
+ certificate->setNotBefore(ndn::time::system_clock::now());
+ certificate->setNotAfter(ndn::time::system_clock::now() + ndn::time::days(
+ 7300) /* 1 year*/);
+ certificate->setPublicKeyInfo(*pubKey);
+ certificate->addSubjectDescription(
+ ndn::CertificateSubjectDescription("2.5.4.41",
+ keyName.toUri()));
+ certificate->encode();
+ try
+ {
+ ndn::KeyChain::signByIdentity(*certificate, signee);
+ }
+ catch (InfoError& e)
+ {
+ try
+ {
+ ndn::KeyChain::deleteIdentity(identityName);
+ }
+ catch (InfoError& e)
+ {
+ }
+ return identityName;
+ }
+ certName = certificate->getName();
+ }
+ return certName;
+ }
+
+ void
+ printCertStore()
+ {
+ m_certStore.print();
+ }
+
+private:
+ bool
+ verifyDataPacket(ndn::Data packet)
+ {
+ std::cout << "KeyManager::verifyDataPacket Called" << std::endl;
+ ndn::SignatureSha256WithRsa signature(packet.getSignature());
+ std::string signingCertName = signature.getKeyLocator().getName().toUri();
+ std::string packetName = packet.getName().toUri();
+ std::pair<ndn::shared_ptr<ndn::IdentityCertificate>, bool> signee =
+ m_certStore.getCertificateFromStore(signingCertName);
+ if (signee.second)
+ {
+ std::string routerNameFromPacketName = getRouterName(packetName);
+ std::string routerNameFromCertName = getRouterName(signingCertName);
+ return ((routerNameFromPacketName == routerNameFromCertName) &&
+ verifySignature(packet, signee.first->getPublicKeyInfo()) &&
+ m_certStore.getCertificateIsVerified(signingCertName));
+ }
+ return false;
+ }
+
+ bool
+ verifyCertPacket(Nlsr& pnlsr, ndn::IdentityCertificate& packet);
+
+public:
+ template<typename T> bool
+ verify(T& packet)
+ {
+ std::cout << "KeyManager::verify Called" << std::endl;
+
+ return verifyDataPacket(packet);
+
+ return false;
+ }
+
+ bool
+ verify(Nlsr& pnlsr, ndn::IdentityCertificate& packet)
+ {
+ return verifyCertPacket(pnlsr, packet);
+ }
+
+ ndn::Name
+ getProcessCertName();
+
+ ndn::Name
+ getRouterCertName();
+
+ ndn::Name
+ getOperatorCertName();
+
+ ndn::Name
+ getSiteCertName();
+
+ ndn::Name
+ getRootCertName();
+
+ uint32_t
+ getCertSeqNo();
+
+ std::pair<uint32_t, bool>
+ getCertificateSeqNum(std::string certName);
+
+ void
+ setCerSeqNo(uint32_t csn);
+
+ void
+ initCertSeqFromFile(std::string certSeqFileDir);
+
+ void
+ writeCertSeqToFile();
+
+ bool
+ isNewCertificate(std::string certName, int checkSeqNum);
+
+ std::pair<ndn::shared_ptr<ndn::IdentityCertificate>, bool>
+ getCertificateFromStore(const std::string certName, int checkSeqNum);
+
+ std::pair<ndn::shared_ptr<ndn::IdentityCertificate>, bool>
+ getCertificateFromStore(const std::string certName);
+
+ bool
+ addCertificate(ndn::shared_ptr<ndn::IdentityCertificate> pcert,
+ uint32_t csn, bool isv);
+
+
+private:
+ bool
+ loadAllCertificates(std::string certDirPath);
+
+ bool
+ loadCertificate(std::string inputFile, nlsrKeyType keyType);
+
+ nlsrKeyType
+ getKeyTypeFromName(const std::string keyName);
+
+ std::string
+ getRouterName(const std::string name);
+
+ std::string
+ getSiteName(const std::string name);
+
+ std::string
+ getRootName(const std::string name);
+
+private:
+ ndn::Name m_processIdentity;
+ ndn::Name m_routerIdentity;
+ ndn::Name m_processCertName;
+ ndn::Name m_routerCertName;
+ ndn::Name m_opCertName;
+ ndn::Name m_siteCertName;
+ ndn::Name m_rootCertName;
+ ndn::Name m_processKeyName;
+ uint32_t m_certSeqNo;
+ std::string m_certSeqFileNameWithPath;
+ std::string m_nlsrRootKeyPrefix;
+ CertificateStore m_certStore;
+
+};
+}//namespace nlsr
+
+#endif //NLSR_KM_HPP
diff --git a/src/security/nlsr_cert_store.cpp b/src/security/nlsr_cert_store.cpp
deleted file mode 100644
index fa84ad9..0000000
--- a/src/security/nlsr_cert_store.cpp
+++ /dev/null
@@ -1,236 +0,0 @@
-#include <ndn-cpp-dev/security/signature-sha256-with-rsa.hpp>
-#include <ndn-cpp-dev/security/key-chain.hpp>
-#include "nlsr_cert_store.hpp"
-#include "nlsr_wle.hpp"
-#include "nlsr_km.hpp"
-
-#define THIS_FILE "nlsr_cert_store.cpp"
-
-namespace nlsr
-{
- static bool
- nlsrCertificateStoreEntryCompare(NlsrCertificateStoreEntry& ncse1,
- NlsrCertificateStoreEntry& ncse2)
-
- {
- int sizeDiff=ncse1.getCert()->getName().size()-
- ncse2.getCert()->getName().size();
- return (ncse2.getCert()->getName().isPrefixOf(ncse1.getCert()->getName()) &&
- (sizeDiff <= 1 && sizeDiff>= 0));
-
-
- }
-
- static bool
- nlsrCertificateStoreEntryCompareByName(NlsrCertificateStoreEntry& ncse1,
- std::string compCertName)
-
- {
- ndn::Name ccn(compCertName);
- int sizeDiff= ncse1.getCert()->getName().size() -ccn.size();
- return ( ccn.isPrefixOf(ncse1.getCert()->getName()) &&
- (sizeDiff <= 1 && sizeDiff>= 0));
- }
-
- void
- NlsrCertificateStore::updateWaitingList(std::string respCertName)
- {
- ndn::Name tmpName(respCertName);
- respCertName=tmpName.getPrefix(-1).toUri();
- std::pair<WaitingListEntry, bool> chkWle=
- m_waitingList.getWaitingListEntry(respCertName);
- if( chkWle.second )
- {
- std::pair<ndn::shared_ptr<ndn::IdentityCertificate>, bool> sc=
- getCertificateFromStore(respCertName);
- std::list<std::string> waitees=(chkWle.first).getWaitingCerts();
- for(std::list<std::string>::iterator it = waitees.begin();
- it != waitees.end();++it)
- {
- KeyManager km;
- std::pair<ndn::shared_ptr<ndn::IdentityCertificate>, bool> wc=
- getCertificateFromStore(*(it));
- if( wc.second && sc.second )
- {
- if(km.verifySignature(*(wc.first),sc.first->getPublicKeyInfo()))
- {
- //1. Update Certificate Store
- setCertificateIsVerified(*(it),true);
- //2. Call updateWaitingList for waitee ( *(it) )
- updateWaitingList(*(it));
- }
- }
- }
- }
-
- //remove that entry from waiting list
- m_waitingList.remove(respCertName);
- }
-
- void
- NlsrCertificateStore::updateWaitingList(NlsrCertificateStoreEntry& ncse)
- {
- if( ncse.getIsSignerVerified())
- {
- updateWaitingList(ncse.getCert()->getName().toUri());
- }
- else
- {
- ndn::SignatureSha256WithRsa signature(ncse.getCert()->getSignature());
- m_waitingList.add(signature.getKeyLocator().getName().toUri(),
- ncse.getCert()->getName().toUri());
- }
- }
-
- bool
- NlsrCertificateStore::addCertificate(NlsrCertificateStoreEntry & ncse)
- {
- std::list<NlsrCertificateStoreEntry>::iterator it =
- std::find_if( m_certTable.begin(), m_certTable.end(),
- bind(&nlsrCertificateStoreEntryCompare, _1, ncse));
- if(it == m_certTable.end())
- {
- m_certTable.push_back(ncse);
- updateWaitingList(ncse);
- return true;
- }
- else if( it != m_certTable.end() )
- {
- if ( (*it).getCertSeqNum() < ncse.getCertSeqNum() )
- {
- m_certTable.erase(it);
- m_certTable.push_back(ncse);
- updateWaitingList(ncse);
- return true;
- }
- }
- return false;
- }
-
- bool
- NlsrCertificateStore::addCertificate(
- ndn::shared_ptr<ndn::IdentityCertificate> pcert, uint32_t csn, bool isv)
- {
- NlsrCertificateStoreEntry ncse(pcert, csn, isv);
- return addCertificate(ncse);
- }
-
- std::pair<uint32_t, bool>
- NlsrCertificateStore::getCertificateSeqNum(std::string certName)
- {
- std::list<NlsrCertificateStoreEntry>::iterator it =
- std::find_if( m_certTable.begin(), m_certTable.end(),
- bind(&nlsrCertificateStoreEntryCompareByName, _1, certName));
- if(it == m_certTable.end())
- {
- return std::make_pair(0,false);
- }
- return std::make_pair((*it).getCertSeqNum(),true);
- }
-
-
-
- void
- NlsrCertificateStore::setCertificateIsVerified(std::string certName,
- bool isVerified)
- {
- std::list<NlsrCertificateStoreEntry>::iterator it =
- std::find_if( m_certTable.begin(), m_certTable.end(),
- bind(&nlsrCertificateStoreEntryCompareByName, _1, certName));
- if(it != m_certTable.end())
- {
- it->setIsSignerVerified(true);
- }
- }
-
- bool
- NlsrCertificateStore::getCertificateIsVerified( std::string certName )
- {
- std::list<NlsrCertificateStoreEntry>::iterator it =
- std::find_if( m_certTable.begin(), m_certTable.end(),
- bind(&nlsrCertificateStoreEntryCompareByName, _1, certName));
- if(it != m_certTable.end())
- {
- return it->getIsSignerVerified();
- }
-
- return false;
- }
-
- std::pair<ndn::shared_ptr<ndn::IdentityCertificate>, bool>
- NlsrCertificateStore::getCertificateFromStore(const std::string certName)
- {
- std::list<NlsrCertificateStoreEntry>::iterator it =
- std::find_if( m_certTable.begin(), m_certTable.end(),
- bind(&nlsrCertificateStoreEntryCompareByName, _1, certName));
- if(it == m_certTable.end())
- {
- ndn::shared_ptr<ndn::IdentityCertificate> cert=
- ndn::make_shared<ndn::IdentityCertificate>();
- return std::make_pair(cert,false);
- }
- return std::make_pair((*it).getCert(),true);
- }
-
- std::pair<ndn::shared_ptr<ndn::IdentityCertificate>, bool>
- NlsrCertificateStore::getCertificateFromStore(
- const std::string certName, int checkSeqNum)
- {
- std::list<NlsrCertificateStoreEntry>::iterator it =
- std::find_if( m_certTable.begin(), m_certTable.end(),
- bind(&nlsrCertificateStoreEntryCompareByName, _1, certName));
- if(it == m_certTable.end())
- {
- ndn::shared_ptr<ndn::IdentityCertificate> cert=
- ndn::make_shared<ndn::IdentityCertificate>();
- return std::make_pair(cert,false);
- }
- else
- {
- if( (*it).getCertSeqNum() == checkSeqNum )
- {
- return std::make_pair((*it).getCert(),true);
- }
- }
- return std::make_pair((*it).getCert(),false);
- }
-
- bool
- NlsrCertificateStore::isCertificateNewInStore(const std::string certName,
- int checkSeqNo)
- {
- std::list<NlsrCertificateStoreEntry>::iterator it =
- std::find_if( m_certTable.begin(), m_certTable.end(),
- bind(&nlsrCertificateStoreEntryCompareByName, _1, certName));
- if(it != m_certTable.end())
- {
- return (*it).getCertSeqNum() < checkSeqNo ;
- }
- return true;
- }
-
- bool
- NlsrCertificateStore::removeCertificateFromStroe(const std::string certName)
- {
- std::list<NlsrCertificateStoreEntry>::iterator it =
- std::find_if( m_certTable.begin(), m_certTable.end(),
- bind(&nlsrCertificateStoreEntryCompareByName, _1, certName));
- if(it != m_certTable.end())
- {
- m_certTable.erase(it);
- return true;
- }
- return false;
- }
-
- void
- NlsrCertificateStore::print()
- {
- std::list<NlsrCertificateStoreEntry>::iterator it;
- for(it=m_certTable.begin(); it!=m_certTable.end(); ++it)
- {
- std::cout<<(*it)<<std::endl;
- }
- std::cout<<m_waitingList<<std::endl;
- }
-}
diff --git a/src/security/nlsr_cert_store.hpp b/src/security/nlsr_cert_store.hpp
deleted file mode 100644
index 2ef4513..0000000
--- a/src/security/nlsr_cert_store.hpp
+++ /dev/null
@@ -1,42 +0,0 @@
-#ifndef NLSR_CERT_STORE_HPP
-#define NLSR_CERT_STORE_HPP
-
-#include<list>
-#include <ndn-cpp-dev/security/identity-certificate.hpp>
-#include "nlsr_cse.hpp"
-#include "nlsr_wl.hpp"
-
-namespace nlsr
-{
- class NlsrCertificateStore
- {
- public:
- NlsrCertificateStore()
- : m_certTable()
- , m_waitingList()
- {}
-
- bool addCertificate(NlsrCertificateStoreEntry& ncse);
- bool addCertificate(ndn::shared_ptr<ndn::IdentityCertificate> pcert
- , uint32_t csn, bool isv);
- std::pair<ndn::shared_ptr<ndn::IdentityCertificate>, bool>
- getCertificateFromStore(const std::string certName);
- std::pair<ndn::shared_ptr<ndn::IdentityCertificate>, bool>
- getCertificateFromStore(const std::string certName, int checkSeqNum);
- bool removeCertificateFromStroe(const std::string certName);
- bool isCertificateNewInStore(const std::string certName, int checkSeqNo);
- std::pair<uint32_t, bool> getCertificateSeqNum(std::string certName);
- void print();
- void setCertificateIsVerified(std::string certName, bool isVerified);
- bool getCertificateIsVerified(std::string certName);
- private:
- void updateWaitingList(NlsrCertificateStoreEntry& ncse);
- void updateWaitingList(std::string respCertName);
-
- private:
- std::list<NlsrCertificateStoreEntry> m_certTable;
- WaitingList m_waitingList;
- };
-}
-
-#endif
diff --git a/src/security/nlsr_cse.cpp b/src/security/nlsr_cse.cpp
deleted file mode 100644
index 91c0150..0000000
--- a/src/security/nlsr_cse.cpp
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <ndn-cpp-dev/security/signature-sha256-with-rsa.hpp>
-#include "nlsr_cse.hpp"
-
-#define THIS_FILE "nlsr_cse.cpp"
-
-namespace nlsr
-{
- std::ostream&
- operator <<(std::ostream& os, const NlsrCertificateStoreEntry& ncse)
- {
- os<<"------Certificate Entry---------------"<<std::endl;
- os<<*(ncse.getCert())<<std::endl;
- ndn::SignatureSha256WithRsa sig(ncse.getCert()->getSignature());
- ndn::Name keyName=sig.getKeyLocator().getName();
- os<<"Signee : "<<keyName.toUri()<<std::endl;
- os<<"Cert Seq Num: "<<ncse.getCertSeqNum()<<std::endl;
- os<<"Is Signer Verified: "<<ncse.getIsSignerVerified()<<std::endl;
- return os;
- }
-}
diff --git a/src/security/nlsr_cse.hpp b/src/security/nlsr_cse.hpp
deleted file mode 100644
index 238d511..0000000
--- a/src/security/nlsr_cse.hpp
+++ /dev/null
@@ -1,66 +0,0 @@
-#ifndef NLSR_CERT_STORE_ENTRY_HPP
-#define NLSR_CERT_STORE_ENTRY_HPP
-
-#include <iostream>
-#include <ndn-cpp-dev/face.hpp>
-#include <ndn-cpp-dev/security/identity-certificate.hpp>
-
-namespace nlsr
-{
- class NlsrCertificateStoreEntry
- {
- public:
- NlsrCertificateStoreEntry()
- : m_cert(ndn::make_shared<ndn::IdentityCertificate>())
- , m_certSeqNum(0)
- , m_isSignerVerified(false)
- {}
-
- NlsrCertificateStoreEntry(ndn::shared_ptr<ndn::IdentityCertificate> pcert
- , uint32_t csn, bool isv)
- : m_cert(pcert)
- , m_certSeqNum(csn)
- , m_isSignerVerified(isv)
- {}
-
- ndn::shared_ptr<ndn::IdentityCertificate> getCert() const
- {
- return m_cert;
- }
-
- void setCert(ndn::shared_ptr<ndn::IdentityCertificate> pcert)
- {
- m_cert=pcert;
- }
-
- uint32_t getCertSeqNum() const
- {
- return m_certSeqNum;
- }
-
- void setCertSeqNum(uint32_t csn)
- {
- m_certSeqNum=csn;
- }
-
- bool getIsSignerVerified() const
- {
- return m_isSignerVerified;
- }
-
- void setIsSignerVerified(bool isv)
- {
- m_isSignerVerified=isv;
- }
-
- private:
- ndn::shared_ptr<ndn::IdentityCertificate> m_cert;
- uint32_t m_certSeqNum;
- bool m_isSignerVerified;
- };
- /* Debugging Purpose */
- std::ostream&
- operator <<(std::ostream& os, const NlsrCertificateStoreEntry& ncse);
-}
-
-#endif
diff --git a/src/security/nlsr_km.cpp b/src/security/nlsr_km.cpp
deleted file mode 100644
index d357795..0000000
--- a/src/security/nlsr_km.cpp
+++ /dev/null
@@ -1,405 +0,0 @@
-#include <ndn-cpp-dev/security/identity-certificate.hpp>
-#include <ndn-cpp-dev/encoding/block.hpp>
-#include <ndn-cpp-dev/util/io.hpp>
-#include <stdexcept>
-#include "nlsr_sm.hpp"
-#include "nlsr_km.hpp"
-#include "nlsr.hpp"
-
-#define THIS_FILE "nlsr_km.cpp"
-
-namespace nlsr
-{
- bool
- KeyManager::initialize(ConfParameter &cp)
- {
- initCertSeqFromFile(cp.getSeqFileDir());
- if( !loadAllCertificates(cp.getCertDir()) )
- {
- return false;
- }
- m_nlsrRootKeyPrefix=cp.getRootKeyPrefix();
- string processIdentityName(cp.getRootKeyPrefix());
- processIdentityName += "/";
- processIdentityName += cp.getSiteName();
- processIdentityName += "/";
- processIdentityName += "R.Start";
- processIdentityName += "/";
- processIdentityName += cp.getRouterName();
- ndn::Name ri(processIdentityName);
- std::cout<<"Router Identity: "<<ri.toUri()<<std::endl;
- m_routerIdentity=ri;
- processIdentityName += "/";
- processIdentityName += "nlsr";
- cout<<"Proces Identity Name: "<<processIdentityName<<endl;
- ndn::Name identityName(processIdentityName);
- m_processIdentity=identityName;
- ndn::KeyChain::deleteIdentity(m_processIdentity);
- m_processCertName = ndn::KeyChain::createIdentity(m_processIdentity);
- cout<<"Certificate Name: "<<m_processCertName.toUri()<<endl;
- m_processKeyName=m_processCertName.getPrefix(-2);
- cout<<"Key Name: "<<m_processKeyName.toUri()<<endl;
- ndn::shared_ptr<ndn::IdentityCertificate> cert =
- getCertificate(m_processCertName);
- signByIdentity(*(cert),m_routerIdentity);
- m_certStore.addCertificate(cert, m_certSeqNo, true);
- m_certStore.print();
- return true;
- }
-
- bool
- KeyManager::loadAllCertificates(std::string certDirPath)
- {
- std::string filePath=certDirPath;
- if(filePath.empty())
- {
- SequencingManager sm;
- filePath=sm.getUserHomeDirectory();
- filePath+="/nlsrCertDir";
- }
- return loadCertificate(filePath+"/root.cert", KEY_TYPE_ROOT)
- && loadCertificate(filePath+"/site.cert", KEY_TYPE_SITE)
- && loadCertificate(filePath+"/operator.cert", KEY_TYPE_OPERATOR)
- && loadCertificate(filePath+"/router.cert", KEY_TYPE_ROUTER) ;
- }
-
- bool
- KeyManager::loadCertificate(std::string inputFile, nlsrKeyType keyType)
- {
- try
- {
- ndn::shared_ptr<ndn::IdentityCertificate> cert =
- ndn::io::load<ndn::IdentityCertificate>(inputFile, ndn::io::BASE_64);
- ndn::Name certName=cert->getName();
- switch(keyType)
- {
- case KEY_TYPE_ROOT:
- m_certStore.addCertificate(cert, 10, true);
- m_rootCertName=certName;
- std::cout<<"Root Cert: "<<m_rootCertName<<std::endl;
- break;
- case KEY_TYPE_SITE:
- m_certStore.addCertificate(cert, 10, true);
- m_siteCertName=certName;
- std::cout<<"Site Cert: "<<m_siteCertName<<std::endl;
- break;
- case KEY_TYPE_OPERATOR:
- m_certStore.addCertificate(cert, 10, true);
- m_opCertName=certName;
- std::cout<<"Operator Cert: "<<m_opCertName<<std::endl;
- break;
- case KEY_TYPE_ROUTER:
- m_certStore.addCertificate(cert, m_certSeqNo, true);
- m_routerCertName=certName;
- std::cout<<"Router Cert: "<<m_routerCertName<<std::endl;
- break;
- case KEY_TYPE_PROCESS:
- m_certStore.addCertificate(cert, m_certSeqNo, true);
- m_processCertName=certName;
- std::cout<<"Process Cert: "<<m_processCertName<<std::endl;
- break;
- default:
- break;
- }
- return true;
- }
- catch(std::exception& e)
- {
- return false;
- }
- return false;
- }
-
- ndn::Name
- KeyManager::getProcessCertName()
- {
- return m_processCertName;
- }
-
- ndn::Name
- KeyManager::getRouterCertName()
- {
- return m_routerCertName;
- }
-
- ndn::Name
- KeyManager::getOperatorCertName()
- {
- return m_opCertName;
- }
-
- ndn::Name
- KeyManager::getSiteCertName()
- {
- return m_siteCertName;
- }
-
- ndn::Name
- KeyManager::getRootCertName()
- {
- return m_rootCertName;
- }
-
- uint32_t
- KeyManager::getCertSeqNo()
- {
- return m_certSeqNo;
- }
-
- void
- KeyManager::setCerSeqNo(uint32_t csn)
- {
- m_certSeqNo=csn;
- }
-
- void
- KeyManager::initCertSeqFromFile(string certSeqFileDir)
- {
- m_certSeqFileNameWithPath=certSeqFileDir;
- if( m_certSeqFileNameWithPath.empty() )
- {
- SequencingManager sm;
- m_certSeqFileNameWithPath=sm.getUserHomeDirectory();
- }
- m_certSeqFileNameWithPath += "/nlsrCertSeqNo.txt";
- cout<<"Key Seq File Name: "<< m_certSeqFileNameWithPath<<endl;
- std::ifstream inputFile(m_certSeqFileNameWithPath.c_str(),ios::binary);
- if ( inputFile.good() )
- {
- inputFile>>m_certSeqNo;
- m_certSeqNo++;
- }
- else
- {
- m_certSeqNo=1;
- }
- writeCertSeqToFile();
- }
-
- void
- KeyManager::writeCertSeqToFile()
- {
- std::ofstream outputFile(m_certSeqFileNameWithPath.c_str(),ios::binary);
- outputFile<<m_certSeqNo;
- outputFile.close();
- }
-
- bool
- KeyManager::isNewCertificate(std::string certName, int checkSeqNum)
- {
- return m_certStore.isCertificateNewInStore(certName,checkSeqNum);
- }
-
- std::pair<ndn::shared_ptr<ndn::IdentityCertificate>, bool>
- KeyManager::getCertificateFromStore(const std::string certName, int checkSeqNum)
- {
- return m_certStore.getCertificateFromStore(certName, checkSeqNum);
- }
-
- std::pair<ndn::shared_ptr<ndn::IdentityCertificate>, bool>
- KeyManager::getCertificateFromStore(const std::string certName)
- {
- return m_certStore.getCertificateFromStore(certName);
- }
-
- bool
- KeyManager::addCertificate(ndn::shared_ptr<ndn::IdentityCertificate> pcert
- , uint32_t csn, bool isv)
- {
- return m_certStore.addCertificate(pcert, csn, isv);
- }
-
- std::pair<uint32_t, bool>
- KeyManager::getCertificateSeqNum(std::string certName)
- {
- return m_certStore.getCertificateSeqNum(certName);
- }
-
- nlsrKeyType
- KeyManager::getKeyTypeFromName(const std::string keyName)
- {
- nlsrTokenizer nt(keyName,"/");
- std::string KEY("KEY");
- std::string opHandle("O.Start");
- std::string routerHandle("R.Start");
- std::string processHandle("nlsr");
- if ( nt.getTokenString(0,nt.getTokenPosition(KEY)-1) == m_nlsrRootKeyPrefix)
- {
- return KEY_TYPE_ROOT;
- }
- else if ( nt.doesTokenExist(opHandle) )
- {
- return KEY_TYPE_OPERATOR;
- }
- else if ( nt.doesTokenExist(routerHandle) &&
- nt.doesTokenExist(processHandle))
- {
- return KEY_TYPE_PROCESS;
- }
- else if ( nt.doesTokenExist(routerHandle) &&
- !nt.doesTokenExist(processHandle))
- {
- return KEY_TYPE_ROUTER;
- }
- else
- {
- return KEY_TYPE_SITE;
- }
- }
-
- std::string
- KeyManager::getRouterName(const std::string name)
- {
- std::string routerName;
- std::string rkp(m_nlsrRootKeyPrefix);
- nlsrTokenizer ntRkp(rkp,"/");
- nlsrTokenizer nt(name,"/");
- std::string KEY("KEY");
- std::string opHandle("O.Start");
- std::string routerHandle("R.Start");
- std::string processHandle("nlsr");
- std::string infoHandle("info");
- std::string lsaHandle("LSA");
- if ( nt.doesTokenExist(processHandle) && nt.doesTokenExist(routerHandle))
- {
- routerName="/ndn" +
- nt.getTokenString(ntRkp.getTokenNumber(),
- nt.getTokenPosition(routerHandle)-1) +
- nt.getTokenString(nt.getTokenPosition(routerHandle)+1,
- nt.getTokenPosition(processHandle)-1);
- }
- else if(nt.doesTokenExist(routerHandle) && !nt.doesTokenExist(infoHandle)
- && !nt.doesTokenExist(lsaHandle))
- {
- routerName="/ndn" +
- nt.getTokenString(ntRkp.getTokenNumber(),
- nt.getTokenPosition(routerHandle)-1) +
- nt.getTokenString(nt.getTokenPosition(routerHandle)+1,
- nt.getTokenPosition(KEY)-1);
- }
- else
- {
- if (nt.doesTokenExist(infoHandle) )
- {
- routerName=nt.getTokenString(0,nt.getTokenPosition(infoHandle)-1);
- }
- else
- {
- routerName=nt.getTokenString(nt.getTokenPosition(lsaHandle)+1,
- nt.getTokenNumber()-4);
- }
- }
- return routerName;
- }
-
- std::string
- KeyManager::getSiteName(const std::string name)
- {
- std::string siteName;
- std::string routerName;
- std::string rkp(m_nlsrRootKeyPrefix);
- nlsrTokenizer ntRkp(rkp,"/");
- nlsrTokenizer nt(name,"/");
- std::string KEY("KEY");
- std::string opHandle("O.Start");
- std::string routerHandle("R.Start");
- if ( nt.doesTokenExist(routerHandle) )
- {
- siteName="/ndn" + nt.getTokenString(ntRkp.getTokenNumber(),
- nt.getTokenPosition(routerHandle) -1);
- }
- else if ( nt.doesTokenExist(opHandle) )
- {
- siteName="/ndn" + nt.getTokenString(ntRkp.getTokenNumber(),
- nt.getTokenPosition(opHandle) -1);
- }
- else
- {
- siteName="/ndn" + nt.getTokenString(ntRkp.getTokenNumber(),
- nt.getTokenPosition(KEY) -1);
- }
- return siteName;
- }
-
- std::string
- KeyManager::getRootName(const std::string name)
- {
- std::string rName;
- nlsrTokenizer nt(name,"/");
- std::string rkp(m_nlsrRootKeyPrefix);
- nlsrTokenizer ntRkp(rkp,"/");
- rName=nt.getTokenString(0,ntRkp.getTokenNumber()-1);
- return rName;
- }
-
-
- bool
- KeyManager::verifyCertPacket(Nlsr& pnlsr, ndn::IdentityCertificate& packet)
- {
- std::cout<<"KeyManager::verifyCertPacket Called"<<std::endl;
- ndn::SignatureSha256WithRsa signature(packet.getSignature());
- std::string signingCertName=signature.getKeyLocator().getName().toUri();
- std::string packetName=packet.getName().toUri();
-
- std::cout<<"Packet Name: "<<packetName<<std::endl;
- std::cout<<"Signee Name: "<<signingCertName<<std::endl;
-
- int paketCertType=getKeyTypeFromName(packetName);
- int signingCertType=getKeyTypeFromName(signingCertName);
-
- if( signingCertType > paketCertType ) //lower level Cert can not sign
- { //upper level Cert
- return false;
- }
-
- if((signingCertType == paketCertType) && (paketCertType != KEY_TYPE_ROOT))
- {
- return false;
- }
-
- std::pair<ndn::shared_ptr<ndn::IdentityCertificate>, bool> signee=
- m_certStore.getCertificateFromStore(signingCertName);
-
- if( signee.second )
- {
- switch(paketCertType)
- {
- case KEY_TYPE_ROOT:
- return ((getRootName(packetName) == m_nlsrRootKeyPrefix) &&
- verifySignature(packet,signee.first->getPublicKeyInfo()));
- break;
- case KEY_TYPE_SITE:
- return ((getRootName(packetName) == getRootName(signingCertName)) &&
- verifySignature(packet,signee.first->getPublicKeyInfo()) &&
- m_certStore.getCertificateIsVerified(signingCertName));
- break;
- case KEY_TYPE_OPERATOR:
- return ((getSiteName(packetName) == getSiteName(signingCertName)) &&
- verifySignature(packet,signee.first->getPublicKeyInfo()) &&
- m_certStore.getCertificateIsVerified(signingCertName));
- break;
- case KEY_TYPE_ROUTER:
- return ((getSiteName(packetName) == getSiteName(signingCertName)) &&
- verifySignature(packet,signee.first->getPublicKeyInfo()) &&
- m_certStore.getCertificateIsVerified(signingCertName));
- break;
- case KEY_TYPE_PROCESS:
- return ((getRouterName(packetName) == getRouterName(signingCertName)) &&
- verifySignature(packet,signee.first->getPublicKeyInfo()) &&
- m_certStore.getCertificateIsVerified(signingCertName));
- break;
- }
- }
- else
- {
- std::cout<<"Certificate Not Found in store. Sending Interest"<<std::endl;
- pnlsr.getIm().expressInterest(pnlsr, signingCertName, 3,
- pnlsr.getConfParameter().getInterestResendTime());
- return false;
- }
- return false;
- }
-}
-
-
-
diff --git a/src/security/nlsr_km.hpp b/src/security/nlsr_km.hpp
deleted file mode 100644
index 291d55c..0000000
--- a/src/security/nlsr_km.hpp
+++ /dev/null
@@ -1,249 +0,0 @@
-#ifndef NLSR_KM_HPP
-#define NLSR_KM_HPP
-
-#include <ndn-cpp-dev/face.hpp>
-#include <ndn-cpp-dev/data.hpp>
-#include <ndn-cpp-dev/security/key-chain.hpp>
-#include <ndn-cpp-dev/security/validator.hpp>
-#include <ndn-cpp-dev/util/random.hpp>
-#include <ndn-cpp-dev/security/identity-certificate.hpp>
-#include <list>
-#include "nlsr_conf_param.hpp"
-#include "nlsr_cert_store.hpp"
-#include "utility/nlsr_tokenizer.hpp"
-
-namespace nlsr
-{
- class Nlsr;
- enum nlsrKeyType
- {
- KEY_TYPE_ROOT,
- KEY_TYPE_SITE,
- KEY_TYPE_OPERATOR,
- KEY_TYPE_ROUTER,
- KEY_TYPE_PROCESS,
- KEY_TYPE_UNKNOWN
- };
-
- enum nlsrContentType
- {
- CONTENT_TYPE_DATA,
- CONTENT_TYPE_CERT
- };
-
- class KeyManager: public ndn::KeyChain, public ndn::Validator
- {
- typedef SecPublicInfo::Error InfoError;
- typedef SecTpm::Error TpmError;
- public:
- KeyManager()
- : m_certSeqNo(1)
- , m_certStore()
- , m_nlsrRootKeyPrefix()
- {
- }
-
- bool initialize(ConfParameter &cp);
-
-
-
- void
- checkPolicy (const ndn::Data& data,
- int stepCount,
- const ndn::OnDataValidated& onValidated,
- const ndn::OnDataValidationFailed& onValidationFailed,
- std::vector<ndn::shared_ptr<ndn::ValidationRequest> >& nextSteps)
- {}
-
- void
- checkPolicy (const ndn::Interest& interest,
- int stepCount,
- const ndn::OnInterestValidated& onValidated,
- const ndn::OnInterestValidationFailed& onValidationFailed,
- std::vector<ndn::shared_ptr<ndn::ValidationRequest> >& nextSteps)
- {}
-
- void signData(ndn::Data& data)
- {
- ndn::KeyChain::signByIdentity(data,m_processIdentity);
- }
-
- template<typename T>
- void signByIdentity(T& packet, ndn::Name signeeIdentity)
- {
- ndn::KeyChain::signByIdentity(packet,signeeIdentity);
- }
-
- ndn::shared_ptr<ndn::IdentityCertificate>
- getCertificate(ndn::Name certificateName)
- {
- return ndn::KeyChain::getCertificate(certificateName);
- }
-
- ndn::shared_ptr<ndn::IdentityCertificate>
- getCertificate()
- {
- return getCertificate(m_processCertName);
- }
-
- ndn::Name
- createIdentity(const ndn::Name identityName)
- {
- return ndn::KeyChain::createIdentity(identityName);
- }
-
- ndn::Name
- createIdentity(const ndn::Name identityName, const ndn::Name signee)
- {
- ndn::KeyChain::addIdentity(identityName);
- ndn::Name keyName;
- try
- {
- keyName = ndn::KeyChain::getDefaultKeyNameForIdentity(identityName);
- }
- catch(InfoError& e)
- {
- keyName = ndn::KeyChain::generateRSAKeyPairAsDefault(identityName, true);
- }
- ndn::shared_ptr<ndn::PublicKey> pubKey;
- try
- {
- pubKey = ndn::KeyChain::getPublicKey(keyName);
- }
- catch(InfoError& e)
- {
- return identityName;
- }
- ndn::Name certName;
- try
- {
- certName = ndn::KeyChain::getDefaultCertificateNameForKey(keyName);
- }
- catch(InfoError& e)
- {
- ndn::shared_ptr<ndn::IdentityCertificate> certificate =
- ndn::make_shared<ndn::IdentityCertificate>();
- ndn::Name certificateName = keyName.getPrefix(-1);
- certificateName.append("KEY").append(
- keyName.get(-1)).append("ID-CERT").appendVersion();
- certificate->setName(certificateName);
- certificate->setNotBefore(ndn::time::system_clock::now());
- certificate->setNotAfter(ndn::time::system_clock::now() + ndn::time::days(7300) /* 1 year*/);
- certificate->setPublicKeyInfo(*pubKey);
- certificate->addSubjectDescription(
- ndn::CertificateSubjectDescription("2.5.4.41",
- keyName.toUri()));
- certificate->encode();
- try
- {
- ndn::KeyChain::signByIdentity(*certificate,signee);
- }
- catch(InfoError& e)
- {
- try
- {
- ndn::KeyChain::deleteIdentity(identityName);
- }
- catch(InfoError& e)
- {
- }
- return identityName;
- }
- certName=certificate->getName();
- }
- return certName;
- }
-
- void printCertStore()
- {
- m_certStore.print();
- }
-
- private:
- bool
- verifyDataPacket(ndn::Data packet)
- {
- std::cout<<"KeyManager::verifyDataPacket Called"<<std::endl;
- ndn::SignatureSha256WithRsa signature(packet.getSignature());
- std::string signingCertName=signature.getKeyLocator().getName().toUri();
- std::string packetName=packet.getName().toUri();
- std::pair<ndn::shared_ptr<ndn::IdentityCertificate>, bool> signee=
- m_certStore.getCertificateFromStore(signingCertName);
- if( signee.second )
- {
- std::string routerNameFromPacketName=getRouterName(packetName);
- std::string routerNameFromCertName=getRouterName(signingCertName);
- return ( (routerNameFromPacketName== routerNameFromCertName) &&
- verifySignature(packet, signee.first->getPublicKeyInfo()) &&
- m_certStore.getCertificateIsVerified(signingCertName));
- }
- return false;
- }
-
- bool
- verifyCertPacket(Nlsr& pnlsr, ndn::IdentityCertificate& packet);
-
- public:
- template<typename T>
- bool
- verify(T& packet )
- {
- std::cout<<"KeyManager::verify Called"<<std::endl;
-
- return verifyDataPacket(packet);
-
- return false;
- }
-
- bool
- verify(Nlsr& pnlsr, ndn::IdentityCertificate& packet)
- {
- return verifyCertPacket(pnlsr, packet);
- }
-
- ndn::Name getProcessCertName();
- ndn::Name getRouterCertName();
- ndn::Name getOperatorCertName();
- ndn::Name getSiteCertName();
- ndn::Name getRootCertName();
-
- uint32_t getCertSeqNo();
- std::pair<uint32_t, bool> getCertificateSeqNum(std::string certName);
- void setCerSeqNo(uint32_t csn);
- void initCertSeqFromFile(string certSeqFileDir);
- void writeCertSeqToFile();
- bool isNewCertificate(std::string certName, int checkSeqNum);
- std::pair<ndn::shared_ptr<ndn::IdentityCertificate>, bool>
- getCertificateFromStore(const std::string certName, int checkSeqNum);
- std::pair<ndn::shared_ptr<ndn::IdentityCertificate>, bool>
- getCertificateFromStore(const std::string certName);
- bool addCertificate(ndn::shared_ptr<ndn::IdentityCertificate> pcert
- , uint32_t csn, bool isv);
-
-
- private:
- bool loadAllCertificates(std::string certDirPath);
- bool loadCertificate(std::string inputFile, nlsrKeyType keyType);
- nlsrKeyType getKeyTypeFromName(const std::string keyName);
- std::string getRouterName(const std::string name);
- std::string getSiteName(const std::string name);
- std::string getRootName(const std::string name);
-
- private:
- ndn::Name m_processIdentity;
- ndn::Name m_routerIdentity;
- ndn::Name m_processCertName;
- ndn::Name m_routerCertName;
- ndn::Name m_opCertName;
- ndn::Name m_siteCertName;
- ndn::Name m_rootCertName;
- ndn::Name m_processKeyName;
- uint32_t m_certSeqNo;
- string m_certSeqFileNameWithPath;
- string m_nlsrRootKeyPrefix;
- NlsrCertificateStore m_certStore;
-
- };
-}
-
-#endif
diff --git a/src/security/nlsr_wl.cpp b/src/security/nlsr_wl.cpp
deleted file mode 100644
index 442afe3..0000000
--- a/src/security/nlsr_wl.cpp
+++ /dev/null
@@ -1,77 +0,0 @@
-#include <ndn-cpp-dev/face.hpp>
-#include "nlsr_wl.hpp"
-
-#define THIS_FILE "nlsr_wl.cpp"
-
-namespace nlsr
-{
- static bool
- waitingListCompare(const WaitingListEntry& w1, const std::string& respCert)
- {
- return w1.getResponsibleCert() == respCert;
- }
-
- std::pair<WaitingListEntry, bool>
- WaitingList::getWaitingListEntry(std::string respCert)
- {
- std::list<WaitingListEntry>::iterator it = std::find_if( m_waitingTable.begin(),
- m_waitingTable.end(),ndn::bind(&waitingListCompare, _1, respCert));
- if( it != m_waitingTable.end() )
- {
- return std::make_pair(*(it),true);
- }
-
- WaitingListEntry wle;
- return std::make_pair(wle,false);
-
- }
-
- bool
- WaitingList::add(std::string respCert, std::string waitee)
- {
- std::list<WaitingListEntry>::iterator it = std::find_if( m_waitingTable.begin(),
- m_waitingTable.end(),ndn::bind(&waitingListCompare, _1, respCert));
- if( it == m_waitingTable.end() )
- {
- WaitingListEntry newWle(respCert);
- newWle.addWaitee(waitee);
- m_waitingTable.push_back(newWle);
- return true;
- }
- else
- {
- return it->addWaitee(waitee);
- }
- return false;
- }
-
- bool
- WaitingList::remove(std::string respCert)
- {
- std::list<WaitingListEntry>::iterator it = std::find_if( m_waitingTable.begin(),
- m_waitingTable.end(),ndn::bind(&waitingListCompare, _1, respCert));
- if( it == m_waitingTable.end() )
- {
- return false;
- }
- else
- {
- m_waitingTable.erase(it);
- return true;
- }
- return false;
- }
-
- std::ostream&
- operator<<(std::ostream& os, WaitingList wl)
- {
- os<<"-------Waiting List--------"<<std::endl;
- std::list<WaitingListEntry> wles=wl.getWaitingTable();
- for( std::list<WaitingListEntry> ::iterator it=wles.begin();
- it != wles.end(); ++it)
- {
- os<<*(it)<<std::endl;
- }
- return os;
- }
-}
diff --git a/src/security/nlsr_wl.hpp b/src/security/nlsr_wl.hpp
deleted file mode 100644
index 1a752ca..0000000
--- a/src/security/nlsr_wl.hpp
+++ /dev/null
@@ -1,31 +0,0 @@
-#ifndef NLSR_WL_HPP
-#define NLSR_WL_HPP
-
-#include "nlsr_wle.hpp"
-
-namespace nlsr
-{
- class WaitingList
- {
- public:
- WaitingList()
- : m_waitingTable()
- {}
-
- std::list<WaitingListEntry>& getWaitingTable()
- {
- return m_waitingTable;
- }
-
- bool add(std::string respCert, std::string waitee);
- std::pair<WaitingListEntry, bool> getWaitingListEntry(std::string respCert);
- bool remove(std::string respCert);
-
- private:
- std::list<WaitingListEntry> m_waitingTable;
- };
-
- std::ostream& operator<<(std::ostream& os, WaitingList wl);
-}
-
-#endif
diff --git a/src/security/nlsr_wle.cpp b/src/security/nlsr_wle.cpp
deleted file mode 100644
index 37caf6d..0000000
--- a/src/security/nlsr_wle.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-#include <iostream>
-#include <list>
-#include <ndn-cpp-dev/face.hpp>
-#include "nlsr_wle.hpp"
-
-#define THIS_FILE "nlsr_wle.cpp"
-
-namespace nlsr
-{
- static bool
- waiteeCompare(std::string& w1, std::string& w2)
- {
- return w1 == w2 ;
- }
-
- bool
- WaitingListEntry::addWaitee(std::string waiteeName)
- {
- std::list<std::string>::iterator it = std::find_if( m_waitingCerts.begin(),
- m_waitingCerts.end(),ndn::bind(&waiteeCompare, _1, waiteeName));
- if( it == m_waitingCerts.end() )
- {
- m_waitingCerts.push_back(waiteeName);
- return true;
- }
-
- return false;
- }
-
- std::ostream&
- operator<<(std::ostream& os, const WaitingListEntry& we)
- {
- os<<"-------------Wiating List Entry-------------"<<std::endl;
- os<<"Responsible Certificate: "<<we.getResponsibleCert()<<std::endl;
- std::list<std::string> waitee=we.getWaitingCerts();
- int i=1;
- for(std::list<std::string>::iterator it=waitee.begin();
- it!=waitee.end(); ++i, ++it)
- {
- os<<"Waite "<<i<<": "<<*(it)<<std::endl;
- }
- return os;
- }
-}
diff --git a/src/security/nlsr_wle.hpp b/src/security/nlsr_wle.hpp
deleted file mode 100644
index 0647382..0000000
--- a/src/security/nlsr_wle.hpp
+++ /dev/null
@@ -1,47 +0,0 @@
-#ifndef NLSR_WLE_HPP
-#define NLSR_WLE_HPP
-
-#include <list>
-#include <iostream>
-
-namespace nlsr
-{
- class WaitingListEntry
- {
- public:
- WaitingListEntry()
- : m_responsibleCert()
- , m_waitingCerts()
- {}
-
- WaitingListEntry(std::string resCert)
- : m_responsibleCert(resCert)
- , m_waitingCerts()
- {}
-
- std::string getResponsibleCert() const
- {
- return m_responsibleCert;
- }
-
- void setResponsibleCert(std::string resCert)
- {
- m_responsibleCert=resCert;
- }
-
- std::list<std::string> getWaitingCerts() const
- {
- return m_waitingCerts;
- }
-
- bool addWaitee(std::string waiteeName);
-
- private:
- std::string m_responsibleCert;
- std::list<std::string> m_waitingCerts;
- };
-
- std::ostream& operator<<(std::ostream& os, const WaitingListEntry& we);
-} //end name space
-
-#endif
diff --git a/src/security/waiting-list-entry.cpp b/src/security/waiting-list-entry.cpp
new file mode 100644
index 0000000..1172698
--- /dev/null
+++ b/src/security/waiting-list-entry.cpp
@@ -0,0 +1,41 @@
+#include <iostream>
+#include <list>
+#include <ndn-cpp-dev/face.hpp>
+#include "waiting-list-entry.hpp"
+
+namespace nlsr {
+static bool
+waiteeCompare(std::string& w1, std::string& w2)
+{
+ return w1 == w2 ;
+}
+
+bool
+WaitingListEntry::addWaitee(std::string waiteeName)
+{
+ std::list<std::string>::iterator it = std::find_if(m_waitingCerts.begin(),
+ m_waitingCerts.end(), ndn::bind(&waiteeCompare, _1, waiteeName));
+ if (it == m_waitingCerts.end())
+ {
+ m_waitingCerts.push_back(waiteeName);
+ return true;
+ }
+
+ return false;
+}
+
+std::ostream&
+operator<<(std::ostream& os, const WaitingListEntry& we)
+{
+ os << "-------------Wiating List Entry-------------" << std::endl;
+ os << "Responsible Certificate: " << we.getResponsibleCert() << std::endl;
+ std::list<std::string> waitee = we.getWaitingCerts();
+ int i = 1;
+ for (std::list<std::string>::iterator it = waitee.begin();
+ it != waitee.end(); ++i, ++it)
+ {
+ os << "Waite " << i << ": " << *(it) << std::endl;
+ }
+ return os;
+}
+}//namespace nlsr
diff --git a/src/security/waiting-list-entry.hpp b/src/security/waiting-list-entry.hpp
new file mode 100644
index 0000000..66b0a95
--- /dev/null
+++ b/src/security/waiting-list-entry.hpp
@@ -0,0 +1,51 @@
+#ifndef NLSR_WLE_HPP
+#define NLSR_WLE_HPP
+
+#include <list>
+#include <iostream>
+
+namespace nlsr {
+class WaitingListEntry
+{
+public:
+ WaitingListEntry()
+ : m_responsibleCert()
+ , m_waitingCerts()
+ {}
+
+ WaitingListEntry(std::string resCert)
+ : m_responsibleCert(resCert)
+ , m_waitingCerts()
+ {}
+
+ std::string
+ getResponsibleCert() const
+ {
+ return m_responsibleCert;
+ }
+
+ void
+ setResponsibleCert(std::string resCert)
+ {
+ m_responsibleCert = resCert;
+ }
+
+ std::list<std::string>
+ getWaitingCerts() const
+ {
+ return m_waitingCerts;
+ }
+
+ bool
+ addWaitee(std::string waiteeName);
+
+private:
+ std::string m_responsibleCert;
+ std::list<std::string> m_waitingCerts;
+};
+
+std::ostream&
+operator<<(std::ostream& os, const WaitingListEntry& we);
+} //end name space
+
+#endif //NLSR_WLE_HPP
diff --git a/src/security/waiting-list.cpp b/src/security/waiting-list.cpp
new file mode 100644
index 0000000..dbf9b68
--- /dev/null
+++ b/src/security/waiting-list.cpp
@@ -0,0 +1,74 @@
+#include <ndn-cpp-dev/face.hpp>
+#include "waiting-list.hpp"
+
+namespace nlsr {
+static bool
+waitingListCompare(const WaitingListEntry& w1, const std::string& respCert)
+{
+ return w1.getResponsibleCert() == respCert;
+}
+
+std::pair<WaitingListEntry, bool>
+WaitingList::getWaitingListEntry(std::string respCert)
+{
+ std::list<WaitingListEntry>::iterator it = std::find_if(m_waitingTable.begin(),
+ m_waitingTable.end(), ndn::bind(&waitingListCompare, _1, respCert));
+ if (it != m_waitingTable.end())
+ {
+ return std::make_pair(*(it), true);
+ }
+
+ WaitingListEntry wle;
+ return std::make_pair(wle, false);
+
+}
+
+bool
+WaitingList::add(std::string respCert, std::string waitee)
+{
+ std::list<WaitingListEntry>::iterator it = std::find_if(m_waitingTable.begin(),
+ m_waitingTable.end(), ndn::bind(&waitingListCompare, _1, respCert));
+ if (it == m_waitingTable.end())
+ {
+ WaitingListEntry newWle(respCert);
+ newWle.addWaitee(waitee);
+ m_waitingTable.push_back(newWle);
+ return true;
+ }
+ else
+ {
+ return it->addWaitee(waitee);
+ }
+ return false;
+}
+
+bool
+WaitingList::remove(std::string respCert)
+{
+ std::list<WaitingListEntry>::iterator it = std::find_if(m_waitingTable.begin(),
+ m_waitingTable.end(), ndn::bind(&waitingListCompare, _1, respCert));
+ if (it == m_waitingTable.end())
+ {
+ return false;
+ }
+ else
+ {
+ m_waitingTable.erase(it);
+ return true;
+ }
+ return false;
+}
+
+std::ostream&
+operator<<(std::ostream& os, WaitingList wl)
+{
+ os << "-------Waiting List--------" << std::endl;
+ std::list<WaitingListEntry> wles = wl.getWaitingTable();
+ for (std::list<WaitingListEntry> ::iterator it = wles.begin();
+ it != wles.end(); ++it)
+ {
+ os << *(it) << std::endl;
+ }
+ return os;
+}
+}//namespace nlsr
diff --git a/src/security/waiting-list.hpp b/src/security/waiting-list.hpp
new file mode 100644
index 0000000..d7e89ce
--- /dev/null
+++ b/src/security/waiting-list.hpp
@@ -0,0 +1,38 @@
+#ifndef NLSR_WL_HPP
+#define NLSR_WL_HPP
+
+#include "waiting-list-entry.hpp"
+
+namespace nlsr {
+class WaitingList
+{
+public:
+ WaitingList()
+ : m_waitingTable()
+ {}
+
+ std::list<WaitingListEntry>&
+ getWaitingTable()
+ {
+ return m_waitingTable;
+ }
+
+ bool
+ add(std::string respCert, std::string waitee);
+
+ std::pair<WaitingListEntry, bool>
+ getWaitingListEntry(std::string respCert);
+
+ bool
+ remove(std::string respCert);
+
+private:
+ std::list<WaitingListEntry> m_waitingTable;
+};
+
+std::ostream&
+operator<<(std::ostream& os, WaitingList wl);
+
+}//namespace nlsr
+
+#endif //NLSR_WL_HPP
diff --git a/src/sequencing-manager.cpp b/src/sequencing-manager.cpp
new file mode 100644
index 0000000..9a5ec89
--- /dev/null
+++ b/src/sequencing-manager.cpp
@@ -0,0 +1,96 @@
+#include <string>
+#include <iostream>
+#include <fstream>
+#include <pwd.h>
+#include <cstdlib>
+#include <unistd.h>
+
+#include "sequencing-manager.hpp"
+
+namespace nlsr {
+
+using namespace std;
+
+void
+SequencingManager::splittSequenceNo(uint64_t seqNo)
+{
+ m_combinedSeqNo = seqNo;
+ m_adjLsaSeq = (m_combinedSeqNo & 0xFFFFF);
+ m_corLsaSeq = ((m_combinedSeqNo >> 20) & 0xFFFFF);
+ m_nameLsaSeq = ((m_combinedSeqNo >> 40) & 0xFFFFF);
+}
+
+void
+SequencingManager::combineSequenceNo()
+{
+ m_combinedSeqNo = 0;
+ m_combinedSeqNo = m_combinedSeqNo | m_adjLsaSeq;
+ m_combinedSeqNo = m_combinedSeqNo | (m_corLsaSeq << 20);
+ m_combinedSeqNo = m_combinedSeqNo | (m_nameLsaSeq << 40);
+}
+
+void
+SequencingManager::writeSeqNoToFile()
+{
+ std::ofstream outputFile(m_seqFileNameWithPath.c_str(), ios::binary);
+ outputFile << m_combinedSeqNo;
+ outputFile.close();
+}
+
+void
+SequencingManager::initiateSeqNoFromFile()
+{
+ cout << "Seq File Name: " << m_seqFileNameWithPath << endl;
+ std::ifstream inputFile(m_seqFileNameWithPath.c_str(), ios::binary);
+ if (inputFile.good())
+ {
+ inputFile >> m_combinedSeqNo;
+ splittSequenceNo(m_combinedSeqNo);
+ m_adjLsaSeq += 10;
+ m_corLsaSeq += 10;
+ m_nameLsaSeq += 10;
+ combineSequenceNo();
+ inputFile.close();
+ }
+ else
+ {
+ splittSequenceNo(0);
+ }
+}
+
+void
+SequencingManager::setSeqFileName(string filePath)
+{
+ m_seqFileNameWithPath = filePath;
+ if (m_seqFileNameWithPath.empty())
+ {
+ m_seqFileNameWithPath = getUserHomeDirectory();
+ }
+ m_seqFileNameWithPath = m_seqFileNameWithPath + "/nlsrSeqNo.txt";
+}
+
+string
+SequencingManager::getUserHomeDirectory()
+{
+ string homeDirPath(getpwuid(getuid())->pw_dir);
+ if (homeDirPath.empty())
+ {
+ homeDirPath = getenv("HOME");
+ }
+ return homeDirPath;
+}
+
+ostream&
+operator<<(ostream& os, const SequencingManager& sm)
+{
+ std::cout << "----SequencingManager----" << std::endl;
+ std::cout << "Adj LSA seq no: " << sm.getAdjLsaSeq() << endl;
+ std::cout << "Cor LSA Seq no: " << sm.getCorLsaSeq() << endl;
+ std::cout << "Name LSA Seq no: " << sm.getNameLsaSeq() << endl;
+ std::cout << "Combined LSDB Seq no: " << sm.getCombinedSeqNo() << endl;
+ return os;
+}
+
+}//namespace nlsr
+
+
diff --git a/src/sequencing-manager.hpp b/src/sequencing-manager.hpp
new file mode 100644
index 0000000..32863a3
--- /dev/null
+++ b/src/sequencing-manager.hpp
@@ -0,0 +1,112 @@
+#ifndef NLSR_SM_HPP
+#define NLSR_SM_HPP
+
+#include <list>
+#include <string>
+#include <ndn-cpp-dev/face.hpp>
+
+namespace nlsr {
+class SequencingManager
+{
+public:
+ SequencingManager()
+ : m_nameLsaSeq(0)
+ , m_adjLsaSeq(0)
+ , m_corLsaSeq(0)
+ , m_combinedSeqNo(0)
+ , m_seqFileNameWithPath()
+ {
+ }
+
+ SequencingManager(uint64_t seqNo)
+ {
+ splittSequenceNo(seqNo);
+ }
+
+ SequencingManager(uint64_t nlsn, uint64_t alsn, uint64_t clsn)
+ {
+ m_nameLsaSeq = nlsn;
+ m_adjLsaSeq = alsn;
+ m_corLsaSeq = clsn;
+ combineSequenceNo();
+ }
+
+ uint64_t
+ getNameLsaSeq() const
+ {
+ return m_nameLsaSeq;
+ }
+
+ void
+ setNameLsaSeq(uint64_t nlsn)
+ {
+ m_nameLsaSeq = nlsn;
+ combineSequenceNo();
+ }
+
+ uint64_t
+ getAdjLsaSeq() const
+ {
+ return m_adjLsaSeq;
+ }
+
+ void
+ setAdjLsaSeq(uint64_t alsn)
+ {
+ m_adjLsaSeq = alsn;
+ combineSequenceNo();
+ }
+
+ uint64_t
+ getCorLsaSeq() const
+ {
+ return m_corLsaSeq;
+ }
+
+ void
+ setCorLsaSeq(uint64_t clsn)
+ {
+ m_corLsaSeq = clsn;
+ combineSequenceNo();
+ }
+
+ uint64_t
+ getCombinedSeqNo() const
+ {
+ return m_combinedSeqNo;
+ }
+
+ void
+ writeSeqNoToFile();
+
+ void
+ initiateSeqNoFromFile();
+
+ void
+ setSeqFileName(std::string filePath);
+
+ std::string
+ getUserHomeDirectory();
+
+private:
+ void
+ splittSequenceNo(uint64_t seqNo);
+
+ void
+ combineSequenceNo();
+
+
+private:
+ uint64_t m_nameLsaSeq;
+ uint64_t m_adjLsaSeq;
+ uint64_t m_corLsaSeq;
+ uint64_t m_combinedSeqNo;
+ std::string m_seqFileNameWithPath;
+};
+
+
+std::ostream&
+operator<<(std::ostream& os, const SequencingManager& sm);
+
+}//namespace nlsr
+#endif //NLSR_SM_HPP
diff --git a/src/utility/logger.cpp b/src/utility/logger.cpp
new file mode 100644
index 0000000..3d9a804
--- /dev/null
+++ b/src/utility/logger.cpp
@@ -0,0 +1,59 @@
+#include "logger.hpp"
+
+namespace nlsr {
+
+string
+Logger::getEpochTime()
+{
+ std::stringstream ss;
+ boost::posix_time::ptime time_t_epoch(boost::gregorian::date(1970, 1, 1));
+ boost::posix_time::ptime now = boost::posix_time::microsec_clock::local_time();
+ boost::posix_time::time_duration diff = now - time_t_epoch;
+ ss << diff.total_seconds() << "." << boost::format("%06i") %
+ (diff.total_microseconds()
+ % 1000000);
+ return ss.str();
+}
+
+string
+Logger::getUserHomeDirectory()
+{
+ string homeDirPath(getpwuid(getuid())->pw_dir);
+ if (homeDirPath.empty())
+ {
+ homeDirPath = getenv("HOME");
+ }
+ return homeDirPath;
+}
+
+void
+Logger::initialize(std::string dirPath)
+{
+ string logDirPath(dirPath);
+ if (dirPath.empty())
+ {
+ logDirPath = getUserHomeDirectory() + "/nlsrLog";
+ }
+ cout << "Log Dir Path: " << logDirPath << endl;
+ typedef sinks::synchronous_sink<sinks::text_file_backend> file_sink;
+ shared_ptr<file_sink> sink(new file_sink(
+ keywords::file_name = logDirPath
+ + "/NLSR%Y%m%d%H%M%S_%3N.log",
+ keywords::rotation_size = 16 * 1024 * 1024,
+ keywords::time_based_rotation = sinks::file::rotation_at_time_point(12, 0, 0),
+ keywords::auto_flush = true
+ ));
+ sink->locked_backend()->set_file_collector(sinks::file::make_collector(
+ keywords::target = logDirPath,
+ //keywords::max_size = 512 * 1024 * 1024,
+ keywords::min_free_space = 64 * 1024 * 1024
+ ));
+ sink->set_formatter(
+ expr::format("%1% %2%")
+ % getEpochTime()
+ % expr::smessage
+ );
+ logging::core::get()->add_sink(sink);
+}
+
+}//namespace nlsr
diff --git a/src/utility/logger.hpp b/src/utility/logger.hpp
new file mode 100644
index 0000000..97b8df4
--- /dev/null
+++ b/src/utility/logger.hpp
@@ -0,0 +1,64 @@
+#ifndef NLSR_LOGGER_HPP
+#define NLSR_LOGGER_HPP
+
+#define BOOST_LOG_DYN_LINK 1
+#include "boost-log.hpp"
+
+#include <stdexcept>
+#include <string>
+#include <iostream>
+#include <sstream>
+#include <pwd.h>
+#include <cstdlib>
+#include <string>
+#include <unistd.h>
+#include <boost/format.hpp>
+#include <boost/smart_ptr/shared_ptr.hpp>
+#include <boost/date_time/posix_time/posix_time.hpp>
+#include <boost/date_time/local_time/local_time.hpp>
+
+
+
+
+namespace nlsr {
+
+namespace logging = boost::log;
+namespace attrs = boost::log::attributes;
+namespace src = boost::log::sources;
+namespace sinks = boost::log::sinks;
+namespace expr = boost::log::expressions;
+namespace keywords = boost::log::keywords;
+
+using boost::shared_ptr;
+using namespace std;
+
+
+class Logger
+{
+public:
+ Logger()
+ {
+ }
+
+ void
+ initialize(std::string dirPath);
+
+ src::logger&
+ getLogger()
+ {
+ return m_Logger;
+ }
+
+private:
+ string
+ getEpochTime();
+
+ string
+ getUserHomeDirectory();
+
+private:
+ src::logger m_Logger;
+};
+
+}//namespace nlsr
+#endif //NLSR_LOGGER_HPP
diff --git a/src/utility/nlsr_logger.cpp b/src/utility/nlsr_logger.cpp
deleted file mode 100644
index f214c6a..0000000
--- a/src/utility/nlsr_logger.cpp
+++ /dev/null
@@ -1,59 +0,0 @@
-#include "nlsr_logger.hpp"
-
-namespace nlsr
-{
-
- string
- NlsrLogger::getEpochTime()
- {
- std::stringstream ss;
- boost::posix_time::ptime time_t_epoch(boost::gregorian::date(1970,1,1));
- boost::posix_time::ptime now = boost::posix_time::microsec_clock::local_time();
- boost::posix_time::time_duration diff = now - time_t_epoch;
- ss<<diff.total_seconds()<<"."<<boost::format("%06i")%(diff.total_microseconds()
- %1000000);
- return ss.str();
- }
-
- string
- NlsrLogger::getUserHomeDirectory()
- {
- string homeDirPath(getpwuid(getuid())->pw_dir);
- if( homeDirPath.empty() )
- {
- homeDirPath = getenv("HOME");
- }
- return homeDirPath;
- }
-
- void
- NlsrLogger::initNlsrLogger(std::string dirPath)
- {
- string logDirPath(dirPath);
- if( dirPath.empty() )
- {
- logDirPath=getUserHomeDirectory()+"/nlsrLog";
- }
- cout<<"Log Dir Path: "<< logDirPath<<endl;
- typedef sinks::synchronous_sink< sinks::text_file_backend > file_sink;
- shared_ptr< file_sink > sink(new file_sink(
- keywords::file_name = logDirPath
- +"/NLSR%Y%m%d%H%M%S_%3N.log",
- keywords::rotation_size = 16 * 1024 * 1024,
- keywords::time_based_rotation = sinks::file::rotation_at_time_point(12, 0, 0),
- keywords::auto_flush = true
- ));
- sink->locked_backend()->set_file_collector(sinks::file::make_collector(
- keywords::target = logDirPath,
- //keywords::max_size = 512 * 1024 * 1024,
- keywords::min_free_space = 64 * 1024 * 1024
- ));
- sink->set_formatter(
- expr::format("%1% %2%")
- % getEpochTime()
- % expr::smessage
- );
- logging::core::get()->add_sink(sink);
- }
-
-}//namespace nlsr
diff --git a/src/utility/nlsr_logger.hpp b/src/utility/nlsr_logger.hpp
deleted file mode 100644
index ca6be3e..0000000
--- a/src/utility/nlsr_logger.hpp
+++ /dev/null
@@ -1,60 +0,0 @@
-#ifndef NLSR_LOGGER_HPP
-#define NLSR_LOGGER_HPP
-
-#define BOOST_LOG_DYN_LINK 1
-#include "boost-log.hpp"
-
-#include <stdexcept>
-#include <string>
-#include <iostream>
-#include <sstream>
-#include <pwd.h>
-#include <cstdlib>
-#include <string>
-#include <unistd.h>
-#include <boost/format.hpp>
-#include <boost/smart_ptr/shared_ptr.hpp>
-#include <boost/date_time/posix_time/posix_time.hpp>
-#include <boost/date_time/local_time/local_time.hpp>
-
-
-
-
-namespace nlsr
-{
-
- namespace logging = boost::log;
- namespace attrs = boost::log::attributes;
- namespace src = boost::log::sources;
- namespace sinks = boost::log::sinks;
- namespace expr = boost::log::expressions;
- namespace keywords = boost::log::keywords;
-
- using boost::shared_ptr;
- using namespace std;
-
-
- class NlsrLogger
- {
- public:
- NlsrLogger()
- {
- }
-
- void initNlsrLogger(std::string dirPath);
-
- src::logger& getLogger()
- {
- return mLogger;
- }
-
- private:
- string getEpochTime();
- string getUserHomeDirectory();
-
- private:
- src::logger mLogger;
- };
-
-}//namespace nlsr
-#endif
diff --git a/src/utility/nlsr_tokenizer.cpp b/src/utility/nlsr_tokenizer.cpp
deleted file mode 100644
index a1ed2bd..0000000
--- a/src/utility/nlsr_tokenizer.cpp
+++ /dev/null
@@ -1,110 +0,0 @@
-#include <iostream>
-#include <boost/tokenizer.hpp>
-#include <boost/algorithm/string.hpp>
-#include <string>
-#include <algorithm>
-
-#include "nlsr_tokenizer.hpp"
-
-namespace nlsr
-{
-
- using namespace std;
- using namespace boost;
-
- void
- nlsrTokenizer::makeToken()
- {
- char_separator<char> sep(m_seps.c_str());
- tokenizer< char_separator<char> >tokens(m_originalString, sep);
- tokenizer< char_separator<char> >::iterator tok_iter = tokens.begin();
- for ( ; tok_iter != tokens.end(); ++tok_iter)
- {
- string oneToken(*tok_iter);
- trim(oneToken);
- if(!oneToken.empty())
- {
- insertToken(oneToken);
- }
- }
- m_firstToken=m_vTokenList[0];
- makeRestOfTheLine();
- }
-
- void
- nlsrTokenizer::insertToken(const string& token)
- {
- m_tokenList.push_back(token);
- m_vTokenList.push_back(token);
- }
-
- int
- nlsrTokenizer::getTokenPosition(string& token)
- {
- int pos=-1;
- int i=0;
- for(std::list<string>::iterator it=m_tokenList.begin();
- it!=m_tokenList.end(); it++)
- {
- if( (*it) == token )
- {
- break;
- }
- i++;
- }
- if( i < m_tokenList.size() )
- {
- pos=i;
- }
- return pos;
- }
-
- string
- nlsrTokenizer::getTokenString(int from , int to)
- {
- string returnString="";
- if((from>=0 && to<m_tokenList.size()) &&
- (to>=from && to <m_tokenList.size()))
- {
- for(int i=from; i<=to; i++)
- {
- returnString+=m_seps;
- returnString+=m_vTokenList[i];
- }
- }
- trim(returnString);
- return returnString;
- }
-
- string
- nlsrTokenizer::getTokenString(int from)
- {
- return getTokenString(from,m_tokenList.size()-1);
- }
-
- static bool
- tokenCompare(string& s1, string& s2)
- {
- return s1==s2;
- }
-
- void
- nlsrTokenizer::makeRestOfTheLine()
- {
- m_restOfTheLine=getTokenString(1);
- }
-
- bool
- nlsrTokenizer::doesTokenExist(string token)
- {
- std::list<string >::iterator it = std::find_if( m_tokenList.begin(),
- m_tokenList.end(),
- bind(&tokenCompare, _1 , token));
- if( it != m_tokenList.end() )
- {
- return true;
- }
- return false;
- }
-
-}//namespace nlsr
diff --git a/src/utility/nlsr_tokenizer.hpp b/src/utility/nlsr_tokenizer.hpp
deleted file mode 100644
index 02d6eea..0000000
--- a/src/utility/nlsr_tokenizer.hpp
+++ /dev/null
@@ -1,104 +0,0 @@
-#ifndef NLSR_TOKENIZER_HPP
-#define NLSR_TOKENIZER_HPP
-
-#include <iostream>
-#include <boost/tokenizer.hpp>
-#include <boost/algorithm/string.hpp>
-#include <string>
-#include <list>
-#include <vector>
-#include <ndn-cpp-dev/face.hpp>
-
-namespace nlsr
-{
-
- using namespace std;
- using namespace boost;
-
- class nlsrTokenizer
- {
- public:
- nlsrTokenizer(const string& inputString)
- : m_firstToken()
- , m_restOfTheLine()
- , m_currentPosition(0)
- {
- m_seps = " ";
- m_originalString = inputString;
- makeToken();
- }
-
- nlsrTokenizer(const string& inputString, const string& separator)
- : m_firstToken()
- , m_restOfTheLine()
- , m_currentPosition(0)
- {
- m_seps = separator;
- m_originalString = inputString;
- makeToken();
- }
-
- string getFirstToken()
- {
- return m_firstToken;
- }
-
- string getRestOfLine()
- {
- return m_restOfTheLine;
- }
-
- void resetCurrentPosition(uint32_t cp=0)
- {
- if( cp >=0 && cp <= m_vTokenList.size() )
- {
- m_currentPosition=cp;
- }
- }
-
- string getNextToken()
- {
- if(m_currentPosition >= 0 && m_currentPosition <= (m_vTokenList.size()-1))
- {
- return m_vTokenList[m_currentPosition++];
- }
- return "";
- }
-
- uint32_t getTokenNumber()
- {
- return m_tokenList.size();
- }
-
- string getToken(int position)
- {
- if( position >=0 && position <m_vTokenList.size() )
- {
- return m_vTokenList[position];
- }
- return "";
- }
-
- int getTokenPosition(string& token);
- string getTokenString(int from , int to);
- string getTokenString(int from);
- bool doesTokenExist(string token);
-
-
- private:
-
- void makeToken();
- void insertToken(const string& token);
- void makeRestOfTheLine();
-
- string m_seps;
- string m_originalString;
- string m_firstToken;
- string m_restOfTheLine;
- std::list<string> m_tokenList;
- std::vector<string> m_vTokenList;
- uint32_t m_currentPosition;
- };
-
-}//namespace nlsr
-#endif
diff --git a/src/utility/tokenizer.cpp b/src/utility/tokenizer.cpp
new file mode 100644
index 0000000..e326c2a
--- /dev/null
+++ b/src/utility/tokenizer.cpp
@@ -0,0 +1,109 @@
+#include <iostream>
+#include <boost/tokenizer.hpp>
+#include <boost/algorithm/string.hpp>
+#include <string>
+#include <algorithm>
+
+#include "tokenizer.hpp"
+
+namespace nlsr {
+
+using namespace std;
+using namespace boost;
+
+void
+Tokenizer::makeToken()
+{
+ char_separator<char> sep(m_seps.c_str());
+ tokenizer<char_separator<char> >tokens(m_originalString, sep);
+ tokenizer<char_separator<char> >::iterator tok_iter = tokens.begin();
+ for (; tok_iter != tokens.end(); ++tok_iter)
+ {
+ string oneToken(*tok_iter);
+ trim(oneToken);
+ if (!oneToken.empty())
+ {
+ insertToken(oneToken);
+ }
+ }
+ m_firstToken = m_vTokenList[0];
+ makeRestOfTheLine();
+}
+
+void
+Tokenizer::insertToken(const string& token)
+{
+ m_tokenList.push_back(token);
+ m_vTokenList.push_back(token);
+}
+
+uint32_t
+Tokenizer::getTokenPosition(string& token)
+{
+ int pos = -1;
+ int i = 0;
+ for (std::list<string>::iterator it = m_tokenList.begin();
+ it != m_tokenList.end(); it++)
+ {
+ if ((*it) == token)
+ {
+ break;
+ }
+ i++;
+ }
+ if (i < m_tokenList.size())
+ {
+ pos = i;
+ }
+ return pos;
+}
+
+string
+Tokenizer::getTokenString(uint32_t from , uint32_t to)
+{
+ string returnString = "";
+ if ((to < m_tokenList.size()) &&
+ (to >= from && to < m_tokenList.size()))
+ {
+ for (int i = from; i <= to; i++)
+ {
+ returnString += m_seps;
+ returnString += m_vTokenList[i];
+ }
+ }
+ trim(returnString);
+ return returnString;
+}
+
+string
+Tokenizer::getTokenString(uint32_t from)
+{
+ return getTokenString(from, m_tokenList.size() - 1);
+}
+
+static bool
+tokenCompare(string& s1, string& s2)
+{
+ return s1 == s2;
+}
+
+void
+Tokenizer::makeRestOfTheLine()
+{
+ m_restOfTheLine = getTokenString(1);
+}
+
+bool
+Tokenizer::doesTokenExist(string token)
+{
+ std::list<string>::iterator it = std::find_if(m_tokenList.begin(),
+ m_tokenList.end(),
+ bind(&tokenCompare, _1 , token));
+ if (it != m_tokenList.end())
+ {
+ return true;
+ }
+ return false;
+}
+
+}//namespace nlsr
diff --git a/src/utility/tokenizer.hpp b/src/utility/tokenizer.hpp
new file mode 100644
index 0000000..dd6254d
--- /dev/null
+++ b/src/utility/tokenizer.hpp
@@ -0,0 +1,118 @@
+#ifndef NLSR_TOKENIZER_HPP
+#define NLSR_TOKENIZER_HPP
+
+#include <iostream>
+#include <boost/tokenizer.hpp>
+#include <boost/algorithm/string.hpp>
+#include <string>
+#include <list>
+#include <vector>
+#include <ndn-cpp-dev/face.hpp>
+
+namespace nlsr {
+
+class Tokenizer
+{
+public:
+ Tokenizer(const std::string& inputString)
+ : m_firstToken()
+ , m_restOfTheLine()
+ , m_currentPosition(0)
+ {
+ m_seps = " ";
+ m_originalString = inputString;
+ makeToken();
+ }
+
+ Tokenizer(const std::string& inputString, const std::string& separator)
+ : m_firstToken()
+ , m_restOfTheLine()
+ , m_currentPosition(0)
+ {
+ m_seps = separator;
+ m_originalString = inputString;
+ makeToken();
+ }
+
+ std::string
+ getFirstToken()
+ {
+ return m_firstToken;
+ }
+
+ std::string
+ getRestOfLine()
+ {
+ return m_restOfTheLine;
+ }
+
+ void
+ resetCurrentPosition(uint32_t cp = 0)
+ {
+ if (cp <= m_vTokenList.size())
+ {
+ m_currentPosition = cp;
+ }
+ }
+
+ std::string
+ getNextToken()
+ {
+ if (m_currentPosition <= (m_vTokenList.size() - 1))
+ {
+ return m_vTokenList[m_currentPosition++];
+ }
+ return "";
+ }
+
+ uint32_t
+ getTokenNumber()
+ {
+ return m_tokenList.size();
+ }
+
+ std::string
+ getToken(unsigned int position)
+ {
+ if (position < m_vTokenList.size())
+ {
+ return m_vTokenList[position];
+ }
+ return "";
+ }
+
+ uint32_t
+ getTokenPosition(std::string& token);
+
+ std::string
+ getTokenString(uint32_t from , uint32_t to);
+
+ std::string
+ getTokenString(uint32_t from);
+
+ bool
+ doesTokenExist(std::string token);
+
+
+private:
+
+ void
+ makeToken();
+
+ void
+ insertToken(const std::string& token);
+
+ void
+ makeRestOfTheLine();
+
+ std::string m_seps;
+ std::string m_originalString;
+ std::string m_firstToken;
+ std::string m_restOfTheLine;
+ std::list<std::string> m_tokenList;
+ std::vector<std::string> m_vTokenList;
+ uint32_t m_currentPosition;
+};
+
+}//namespace nlsr
+#endif //NLSR_TOKENIZER_HPP