blob: 24bf73db9b1808fbb9cbda13ae5acfc6a46331f0 [file] [log] [blame]
#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()
: origRouter()
, lsSeqNo()
, lifeTime()
, lsaExpiringEventId()
{
}
void setLsType(uint8_t lst)
{
lsType=lst;
}
uint8_t getLsType()
{
return lsType;
}
void setLsSeqNo(uint32_t lsn)
{
lsSeqNo=lsn;
}
uint32_t getLsSeqNo()
{
return lsSeqNo;
}
string& getOrigRouter()
{
return origRouter;
}
void setOrigRouter(string& org)
{
origRouter=org;
}
uint32_t getLifeTime()
{
return lifeTime;
}
void setLifeTime(uint32_t lt)
{
lifeTime=lt;
}
void setLsaExpiringEventId(ndn::EventId leei)
{
lsaExpiringEventId=leei;
}
ndn::EventId getLsaExpiringEventId()
{
return lsaExpiringEventId;
}
protected:
string origRouter;
uint8_t lsType;
uint32_t lsSeqNo;
uint32_t lifeTime;
ndn::EventId lsaExpiringEventId;
};
class NameLsa:public Lsa
{
public:
NameLsa()
: Lsa()
, npl()
{
setLsType(1);
}
NameLsa(string origR, uint8_t lst, uint32_t lsn, uint32_t lt, Npl npl);
Npl& getNpl()
{
return npl;
}
void addNameToLsa(string& name)
{
npl.insertIntoNpl(name);
}
void removeNameFromLsa(string& name)
{
npl.removeFromNpl(name);
}
string getNameLsaKey();
string getNameLsaData();
private:
Npl npl;
};
std::ostream&
operator<<(std::ostream& os, NameLsa& nLsa);
class AdjLsa: public Lsa
{
public:
AdjLsa()
: Lsa()
, adl()
{
setLsType(2);
}
AdjLsa(string origR, uint8_t lst, uint32_t lsn, uint32_t lt,
uint32_t nl ,Adl padl);
Adl& getAdl()
{
return adl;
}
void addAdjacentToLsa(Adjacent adj)
{
adl.insert(adj);
}
string getAdjLsaKey();
string getAdjLsaData();
uint32_t getNoLink()
{
return noLink;
}
bool isLsaContentEqual(AdjLsa& alsa);
void addNptEntriesForAdjLsa(Nlsr& pnlsr);
void removeNptEntriesForAdjLsa(Nlsr& pnlsr);
private:
uint32_t noLink;
Adl adl;
};
std::ostream&
operator<<(std::ostream& os, AdjLsa& aLsa);
class CorLsa:public Lsa
{
public:
CorLsa()
:Lsa()
{
setLsType(3);
}
CorLsa(string origR, uint8_t lst, uint32_t lsn, uint32_t lt
, double r, double theta);
string getCorLsaKey();
string getCorLsaData();
double getCorRadius()
{
if ( corRad >= 0 )
{
return corRad;
}
else
{
return -1;
}
}
void setCorRadius(double cr)
{
corRad=cr;
}
double getCorTheta()
{
return corTheta;
}
void setCorTheta(double ct)
{
corTheta=ct;
}
bool isLsaContentEqual(CorLsa& clsa);
private:
double corRad;
double corTheta;
};
std::ostream&
operator<<(std::ostream& os, CorLsa& cLsa);
}//namespace nlsr
#endif