blob: 24bf73db9b1808fbb9cbda13ae5acfc6a46331f0 [file] [log] [blame]
akmhoque298385a2014-02-13 14:13:09 -06001#ifndef NLSR_LSA_HPP
2#define NLSR_LSA_HPP
3
akmhoque85d88332014-02-17 21:11:21 -06004#include <ndn-cpp-dev/util/scheduler.hpp>
akmhoque298385a2014-02-13 14:13:09 -06005#include "nlsr_adjacent.hpp"
6#include "nlsr_npl.hpp"
7#include "nlsr_adl.hpp"
8
akmhoque1fd8c1e2014-02-19 19:41:49 -06009namespace nlsr
10{
akmhoqueb1710aa2014-02-19 17:13:36 -060011
akmhoque1fd8c1e2014-02-19 19:41:49 -060012 using namespace std;
13 using namespace ndn;
akmhoque298385a2014-02-13 14:13:09 -060014
akmhoque1fd8c1e2014-02-19 19:41:49 -060015 class Lsa
16 {
17 public:
18 Lsa()
19 : origRouter()
20 , lsSeqNo()
21 , lifeTime()
22 , lsaExpiringEventId()
23 {
24 }
akmhoque298385a2014-02-13 14:13:09 -060025
26
akmhoque1fd8c1e2014-02-19 19:41:49 -060027 void setLsType(uint8_t lst)
28 {
29 lsType=lst;
30 }
akmhoque298385a2014-02-13 14:13:09 -060031
akmhoque1fd8c1e2014-02-19 19:41:49 -060032 uint8_t getLsType()
33 {
34 return lsType;
35 }
akmhoque298385a2014-02-13 14:13:09 -060036
akmhoque1fd8c1e2014-02-19 19:41:49 -060037 void setLsSeqNo(uint32_t lsn)
38 {
39 lsSeqNo=lsn;
40 }
akmhoque298385a2014-02-13 14:13:09 -060041
akmhoque1fd8c1e2014-02-19 19:41:49 -060042 uint32_t getLsSeqNo()
43 {
44 return lsSeqNo;
45 }
akmhoque298385a2014-02-13 14:13:09 -060046
akmhoque1fd8c1e2014-02-19 19:41:49 -060047 string& getOrigRouter()
48 {
49 return origRouter;
50 }
akmhoque298385a2014-02-13 14:13:09 -060051
akmhoque1fd8c1e2014-02-19 19:41:49 -060052 void setOrigRouter(string& org)
53 {
54 origRouter=org;
55 }
akmhoque298385a2014-02-13 14:13:09 -060056
akmhoque1fd8c1e2014-02-19 19:41:49 -060057 uint32_t getLifeTime()
58 {
59 return lifeTime;
60 }
akmhoque298385a2014-02-13 14:13:09 -060061
akmhoque1fd8c1e2014-02-19 19:41:49 -060062 void setLifeTime(uint32_t lt)
63 {
64 lifeTime=lt;
65 }
akmhoque85d88332014-02-17 21:11:21 -060066
akmhoque1fd8c1e2014-02-19 19:41:49 -060067 void setLsaExpiringEventId(ndn::EventId leei)
68 {
69 lsaExpiringEventId=leei;
70 }
akmhoque85d88332014-02-17 21:11:21 -060071
akmhoque1fd8c1e2014-02-19 19:41:49 -060072 ndn::EventId getLsaExpiringEventId()
73 {
74 return lsaExpiringEventId;
75 }
akmhoque298385a2014-02-13 14:13:09 -060076
akmhoque298385a2014-02-13 14:13:09 -060077
akmhoque1fd8c1e2014-02-19 19:41:49 -060078 protected:
79 string origRouter;
80 uint8_t lsType;
81 uint32_t lsSeqNo;
82 uint32_t lifeTime;
83 ndn::EventId lsaExpiringEventId;
84 };
akmhoque298385a2014-02-13 14:13:09 -060085
akmhoque1fd8c1e2014-02-19 19:41:49 -060086 class NameLsa:public Lsa
87 {
88 public:
89 NameLsa()
90 : Lsa()
91 , npl()
92 {
93 setLsType(1);
94 }
akmhoque298385a2014-02-13 14:13:09 -060095
akmhoque1fd8c1e2014-02-19 19:41:49 -060096 NameLsa(string origR, uint8_t lst, uint32_t lsn, uint32_t lt, Npl npl);
akmhoque298385a2014-02-13 14:13:09 -060097
akmhoque1fd8c1e2014-02-19 19:41:49 -060098 Npl& getNpl()
99 {
100 return npl;
101 }
akmhoque298385a2014-02-13 14:13:09 -0600102
akmhoque1fd8c1e2014-02-19 19:41:49 -0600103 void addNameToLsa(string& name)
104 {
105 npl.insertIntoNpl(name);
106 }
akmhoque298385a2014-02-13 14:13:09 -0600107
akmhoque1fd8c1e2014-02-19 19:41:49 -0600108 void removeNameFromLsa(string& name)
109 {
110 npl.removeFromNpl(name);
111 }
akmhoque298385a2014-02-13 14:13:09 -0600112
akmhoque1fd8c1e2014-02-19 19:41:49 -0600113 string getNameLsaKey();
akmhoque298385a2014-02-13 14:13:09 -0600114
akmhoque1fd8c1e2014-02-19 19:41:49 -0600115 string getNameLsaData();
akmhoque298385a2014-02-13 14:13:09 -0600116
akmhoque1fd8c1e2014-02-19 19:41:49 -0600117 private:
118 Npl npl;
akmhoque298385a2014-02-13 14:13:09 -0600119
akmhoque1fd8c1e2014-02-19 19:41:49 -0600120 };
akmhoque298385a2014-02-13 14:13:09 -0600121
akmhoque1fd8c1e2014-02-19 19:41:49 -0600122 std::ostream&
123 operator<<(std::ostream& os, NameLsa& nLsa);
akmhoque298385a2014-02-13 14:13:09 -0600124
akmhoque1fd8c1e2014-02-19 19:41:49 -0600125 class AdjLsa: public Lsa
126 {
127 public:
128 AdjLsa()
129 : Lsa()
130 , adl()
131 {
132 setLsType(2);
133 }
akmhoque298385a2014-02-13 14:13:09 -0600134
akmhoque1fd8c1e2014-02-19 19:41:49 -0600135 AdjLsa(string origR, uint8_t lst, uint32_t lsn, uint32_t lt,
136 uint32_t nl ,Adl padl);
137 Adl& getAdl()
138 {
139 return adl;
140 }
akmhoque298385a2014-02-13 14:13:09 -0600141
akmhoque1fd8c1e2014-02-19 19:41:49 -0600142 void addAdjacentToLsa(Adjacent adj)
143 {
144 adl.insert(adj);
145 }
146 string getAdjLsaKey();
147 string getAdjLsaData();
148 uint32_t getNoLink()
149 {
150 return noLink;
151 }
akmhoque298385a2014-02-13 14:13:09 -0600152
akmhoque1fd8c1e2014-02-19 19:41:49 -0600153 bool isLsaContentEqual(AdjLsa& alsa);
154 void addNptEntriesForAdjLsa(Nlsr& pnlsr);
155 void removeNptEntriesForAdjLsa(Nlsr& pnlsr);
akmhoque298385a2014-02-13 14:13:09 -0600156
akmhoque1fd8c1e2014-02-19 19:41:49 -0600157 private:
158 uint32_t noLink;
159 Adl adl;
160 };
akmhoque298385a2014-02-13 14:13:09 -0600161
akmhoque1fd8c1e2014-02-19 19:41:49 -0600162 std::ostream&
163 operator<<(std::ostream& os, AdjLsa& aLsa);
akmhoque298385a2014-02-13 14:13:09 -0600164
akmhoque1fd8c1e2014-02-19 19:41:49 -0600165 class CorLsa:public Lsa
166 {
167 public:
168 CorLsa()
169 :Lsa()
170 {
171 setLsType(3);
172 }
akmhoque298385a2014-02-13 14:13:09 -0600173
akmhoque1fd8c1e2014-02-19 19:41:49 -0600174 CorLsa(string origR, uint8_t lst, uint32_t lsn, uint32_t lt
175 , double r, double theta);
176 string getCorLsaKey();
177 string getCorLsaData();
akmhoque298385a2014-02-13 14:13:09 -0600178
akmhoque1fd8c1e2014-02-19 19:41:49 -0600179 double getCorRadius()
180 {
181 if ( corRad >= 0 )
182 {
183 return corRad;
184 }
185 else
186 {
187 return -1;
188 }
189 }
190
191 void setCorRadius(double cr)
192 {
193 corRad=cr;
194 }
195
196 double getCorTheta()
197 {
198 return corTheta;
199 }
200
201 void setCorTheta(double ct)
202 {
203 corTheta=ct;
204 }
205
206 bool isLsaContentEqual(CorLsa& clsa);
207 private:
208 double corRad;
209 double corTheta;
210
211 };
212
213 std::ostream&
214 operator<<(std::ostream& os, CorLsa& cLsa);
akmhoque298385a2014-02-13 14:13:09 -0600215
216
akmhoqueb1710aa2014-02-19 17:13:36 -0600217}//namespace nlsr
akmhoque298385a2014-02-13 14:13:09 -0600218
219#endif