Own Cor LSA installation
diff --git a/nlsr.cpp b/nlsr.cpp
index 194fbe9..145fa47 100644
--- a/nlsr.cpp
+++ b/nlsr.cpp
@@ -61,6 +61,7 @@
nlsr.getConfParameter().buildRouterPrefix();
nlsr.getLsdb().buildAndInstallOwnNameLsa(nlsr);
+ nlsr.getLsdb().buildAndInstallOwnCorLsa(nlsr);
/* debugging purpose start */
@@ -68,6 +69,7 @@
nlsr.getAdl().printAdl();
nlsr.getNpl().printNpl();
nlsr.getLsdb().printNameLsdb();
+ nlsr.getLsdb().printCorLsdb();
/* debugging purpose end */
nlsr.setInterestFilterNlsr(nlsr.getConfParameter().getRouterPrefix());
nlsr.getIm().scheduleInfoInterest(nlsr,1);
diff --git a/nlsr_lsa.cpp b/nlsr_lsa.cpp
index dfc25e4..a92687e 100644
--- a/nlsr_lsa.cpp
+++ b/nlsr_lsa.cpp
@@ -69,3 +69,44 @@
return os;
}
+
+
+CorLsa::CorLsa(string origR, uint8_t lst, uint32_t lsn, uint32_t lt
+ , double r, double theta)
+{
+ origRouter=origR;
+ lsType=lst;
+ lsSeqNo=lsn;
+ lifeTime=lt;
+ corRad=r;
+ corTheta=theta;
+}
+
+string
+CorLsa::getCorLsaData()
+{
+ string corLsaData;
+ corLsaData=origRouter + "|";
+ corLsaData+=(boost::lexical_cast<std::string>(lsType) + "|");
+ corLsaData+=(boost::lexical_cast<std::string>(lsSeqNo) + "|");
+ corLsaData+=(boost::lexical_cast<std::string>(lifeTime) + "|");
+ corLsaData+=(boost::lexical_cast<std::string>(corRad) + "|");
+ corLsaData+=(boost::lexical_cast<std::string>(corTheta) + "|");
+
+ return corLsaData;
+}
+
+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;
+}
+
diff --git a/nlsr_lsa.hpp b/nlsr_lsa.hpp
index 0dd00c6..18a09d3 100644
--- a/nlsr_lsa.hpp
+++ b/nlsr_lsa.hpp
@@ -113,12 +113,38 @@
:Lsa()
{
}
+
+ CorLsa(string origR, uint8_t lst, uint32_t lsn, uint32_t lt
+ , double r, double theta);
+ string getCorLsaData();
+
+ double getCorRadius()
+ {
+ return corRad;
+ }
+
+ void setCorRadius(double cr)
+ {
+ corRad=cr;
+ }
+
+ double getCorTheta()
+ {
+ return corTheta;
+ }
+
+ void setCorTheta(double ct){
+ corTheta=ct;
+ }
private:
double corRad;
double corTheta;
};
+std::ostream&
+operator<<(std::ostream& os, CorLsa& cLsa);
+
diff --git a/nlsr_lsdb.cpp b/nlsr_lsdb.cpp
index a82c8a3..c6ae523 100644
--- a/nlsr_lsdb.cpp
+++ b/nlsr_lsdb.cpp
@@ -28,6 +28,8 @@
}
+//Name LSA and LSDB related functions start here
+
static bool
nameLsaCompare(NameLsa& nlsa1, NameLsa& nlsa2){
return nlsa1.getLsaKey()==nlsa1.getLsaKey();
@@ -48,7 +50,7 @@
, pnlsr.getConfParameter().getRouterDeadInterval()
, pnlsr.getNpl() );
pnlsr.setNameLsaSeq(pnlsr.getNameLsaSeq()+1);
- cout<<nameLsa;
+ //cout<<nameLsa;
return installNameLsa(nameLsa);
}
@@ -106,16 +108,6 @@
{
return false;
}
-
-void
-Lsdb::printNameLsdb()
-{
- for( std::list<NameLsa>::iterator it=nameLsdb.begin();
- it!= nameLsdb.end() ; it++)
- {
- cout<< (*it) <<endl;
- }
-}
bool
Lsdb::doesNameLsaExist(string key)
@@ -131,15 +123,145 @@
return true;
}
+void
+Lsdb::printNameLsdb()
+{
+ for( std::list<NameLsa>::iterator it=nameLsdb.begin();
+ it!= nameLsdb.end() ; it++)
+ {
+ cout<< (*it) <<endl;
+ }
+}
+
+// Cor LSA and LSDB related Functions start here
+
+static bool
+corLsaCompare(CorLsa& clsa1, CorLsa& clsa2){
+ return clsa1.getLsaKey()==clsa1.getLsaKey();
+}
+
+static bool
+corLsaCompareByKey(CorLsa& clsa, string& key){
+ return clsa.getLsaKey()==key;
+}
bool
-Lsdb::doesAdjLsaExist(string key)
+Lsdb::buildAndInstallOwnCorLsa(nlsr& pnlsr){
+ CorLsa corLsa(pnlsr.getConfParameter().getRouterPrefix()
+ , 1
+ , pnlsr.getCorLsaSeq()+1
+ , pnlsr.getConfParameter().getRouterDeadInterval()
+ , pnlsr.getConfParameter().getCorR()
+ , pnlsr.getConfParameter().getCorTheta() );
+ pnlsr.setCorLsaSeq(pnlsr.getCorLsaSeq()+1);
+ //cout<<corLsa;
+ installCorLsa(corLsa);
+
+}
+
+CorLsa&
+Lsdb::getCorLsa(string key)
{
+ std::list< CorLsa >::iterator it = std::find_if( corLsdb.begin(),
+ corLsdb.end(),
+ bind(corLsaCompareByKey, _1, key));
+
+ if( it != corLsdb.end()){
+ return (*it);
+ }
+}
+
+bool
+Lsdb::installCorLsa(CorLsa &clsa)
+{
+ bool doesLsaExist_ = doesCorLsaExist(clsa.getLsaKey());
+ if ( !doesLsaExist_ )
+ {
+ // add cor LSA
+ addCorLsa(clsa);
+ }
+ else
+ {
+ // check for newer cor LSA
+ CorLsa oldCorLsa=getCorLsa(clsa.getLsaKey());
+
+ }
+
+ return true;
+}
+
+bool
+Lsdb::addCorLsa(CorLsa& clsa)
+{
+ std::list<CorLsa >::iterator it = std::find_if( corLsdb.begin(),
+ corLsdb.end(),
+ bind(corLsaCompare, _1, clsa));
+
+ if( it == corLsdb.end()){
+ corLsdb.push_back(clsa);
+ return true;
+ }
return false;
}
bool
+Lsdb::removeCorLsa(string& key)
+{
+
+}
+
+bool
Lsdb::doesCorLsaExist(string key)
{
- return false;
+ std::list<CorLsa >::iterator it = std::find_if( corLsdb.begin(),
+ corLsdb.end(),
+ bind(corLsaCompareByKey, _1, key));
+
+ if( it == corLsdb.end()){
+ return false;
+ }
+
+ return true;
}
+
+void
+Lsdb::printCorLsdb() //debugging
+{
+ for( std::list<CorLsa>::iterator it=corLsdb.begin();
+ it!= corLsdb.end() ; it++)
+ {
+ cout<< (*it) <<endl;
+ }
+}
+
+
+// Adj LSA and LSDB related function starts here
+
+static bool
+adjLsaCompare(AdjLsa& alsa1, AdjLsa& alsa2){
+ return alsa1.getLsaKey()==alsa1.getLsaKey();
+}
+
+static bool
+adjLsaCompareByKey(AdjLsa& alsa, string& key){
+ return alsa.getLsaKey()==key;
+}
+
+
+
+
+bool
+Lsdb::doesAdjLsaExist(string key)
+{
+ std::list< AdjLsa >::iterator it = std::find_if( adjLsdb.begin(),
+ adjLsdb.end(),
+ bind(adjLsaCompareByKey, _1, key));
+
+ if( it == adjLsdb.end()){
+ return false;
+ }
+
+ return true;
+}
+
+
diff --git a/nlsr_lsdb.hpp b/nlsr_lsdb.hpp
index 4c37fb0..0b0e664 100644
--- a/nlsr_lsdb.hpp
+++ b/nlsr_lsdb.hpp
@@ -16,21 +16,22 @@
bool doesLsaExist(string key, int lsType);
// function related to Name LSDB
- bool buildAndInstallOwnNameLsa(nlsr& nlsr);
+ bool buildAndInstallOwnNameLsa(nlsr& pnlsr);
NameLsa& getNameLsa(string key);
bool installNameLsa(NameLsa &nlsa);
bool removeNameLsa(string& key);
void printNameLsdb(); //debugging
//function related to Cor LSDB
- bool buildAndInstallOwnCorLsa(nlsr& nlsr);
+ bool buildAndInstallOwnCorLsa(nlsr& pnlsr);
CorLsa& getCorLsa(string key);
- bool installCorLsa(CorLsa &nlsa);
+ bool installCorLsa(CorLsa &clsa);
bool removeCorLsa(string& key);
void printCorLsdb(); //debugging
private:
bool addNameLsa(NameLsa &nlsa);
+ bool addCorLsa(CorLsa& clsa);
bool doesNameLsaExist(string key);
bool doesAdjLsaExist(string key);
bool doesCorLsaExist(string key);