blob: 06dcbc65cbb787b1ce521afcfcc69c6a299f82fb [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
akmhoque5a44dd42014-03-12 18:11:32 -050012 using namespace std;
13 using namespace ndn;
akmhoque298385a2014-02-13 14:13:09 -060014
akmhoque5a44dd42014-03-12 18:11:32 -050015 class Lsa
16 {
17 public:
18 Lsa()
19 : origRouter()
20 , lsSeqNo()
21 , lifeTime()
22 , lsaExpiringEventId()
akmhoque1fd8c1e2014-02-19 19:41:49 -060023 {
akmhoque5a44dd42014-03-12 18:11:32 -050024 }
akmhoque298385a2014-02-13 14:13:09 -060025
26
akmhoque5a44dd42014-03-12 18:11:32 -050027 void setLsType(uint8_t lst)
akmhoque1fd8c1e2014-02-19 19:41:49 -060028 {
akmhoque5a44dd42014-03-12 18:11:32 -050029 lsType=lst;
30 }
akmhoque298385a2014-02-13 14:13:09 -060031
akmhoque5a44dd42014-03-12 18:11:32 -050032 uint8_t getLsType()
akmhoque1fd8c1e2014-02-19 19:41:49 -060033 {
akmhoque5a44dd42014-03-12 18:11:32 -050034 return lsType;
35 }
akmhoque298385a2014-02-13 14:13:09 -060036
akmhoque5a44dd42014-03-12 18:11:32 -050037 void setLsSeqNo(uint32_t lsn)
akmhoque1fd8c1e2014-02-19 19:41:49 -060038 {
akmhoque5a44dd42014-03-12 18:11:32 -050039 lsSeqNo=lsn;
40 }
akmhoque298385a2014-02-13 14:13:09 -060041
akmhoque5a44dd42014-03-12 18:11:32 -050042 uint32_t getLsSeqNo()
43 {
44 return lsSeqNo;
45 }
akmhoque1fd8c1e2014-02-19 19:41:49 -060046
akmhoque5a44dd42014-03-12 18:11:32 -050047 string& getOrigRouter()
48 {
49 return origRouter;
50 }
akmhoque1fd8c1e2014-02-19 19:41:49 -060051
akmhoque5a44dd42014-03-12 18:11:32 -050052 void setOrigRouter(string& org)
53 {
54 origRouter=org;
55 }
akmhoque1fd8c1e2014-02-19 19:41:49 -060056
akmhoque5a44dd42014-03-12 18:11:32 -050057 uint32_t getLifeTime()
58 {
59 return lifeTime;
60 }
akmhoque1fd8c1e2014-02-19 19:41:49 -060061
akmhoque5a44dd42014-03-12 18:11:32 -050062 void setLifeTime(uint32_t lt)
63 {
64 lifeTime=lt;
65 }
akmhoque1fd8c1e2014-02-19 19:41:49 -060066
akmhoque5a44dd42014-03-12 18:11:32 -050067 void setLsaExpiringEventId(ndn::EventId leei)
68 {
69 lsaExpiringEventId=leei;
70 }
akmhoque1fd8c1e2014-02-19 19:41:49 -060071
akmhoque5a44dd42014-03-12 18:11:32 -050072 ndn::EventId getLsaExpiringEventId()
73 {
74 return lsaExpiringEventId;
75 }
76
77
78 protected:
79 string origRouter;
80 uint8_t lsType;
81 uint32_t lsSeqNo;
82 uint32_t lifeTime;
83 ndn::EventId lsaExpiringEventId;
84 };
85
86 class NameLsa:public Lsa
87 {
88 public:
89 NameLsa()
90 : Lsa()
91 , npl()
92 {
93 setLsType(1);
94 }
95
96 NameLsa(string origR, uint8_t lst, uint32_t lsn, uint32_t lt, Npl npl);
97
98 Npl& getNpl()
99 {
100 return npl;
101 }
102
103 void addNameToLsa(string& name)
104 {
105 npl.insertIntoNpl(name);
106 }
107
108 void removeNameFromLsa(string& name)
109 {
110 npl.removeFromNpl(name);
111 }
112
113 string getNameLsaKey();
114
115 string getNameLsaData();
116 bool initNameLsaFromContent(string content);
117
118 private:
119 Npl npl;
120
121 };
122
123 std::ostream&
124 operator<<(std::ostream& os, NameLsa& nLsa);
125
126 class AdjLsa: public Lsa
127 {
128 public:
129 AdjLsa()
130 : Lsa()
131 , adl()
132 {
133 setLsType(2);
134 }
135
136 AdjLsa(string origR, uint8_t lst, uint32_t lsn, uint32_t lt,
137 uint32_t nl ,Adl padl);
138 Adl& getAdl()
139 {
140 return adl;
141 }
142
143 void addAdjacentToLsa(Adjacent adj)
144 {
145 adl.insert(adj);
146 }
147 string getAdjLsaKey();
148 string getAdjLsaData();
149 bool initAdjLsaFromContent(string content);
150 uint32_t getNoLink()
151 {
152 return noLink;
153 }
154
155 bool isLsaContentEqual(AdjLsa& alsa);
156 void addNptEntriesForAdjLsa(Nlsr& pnlsr);
157 void removeNptEntriesForAdjLsa(Nlsr& pnlsr);
158
159 private:
160 uint32_t noLink;
161 Adl adl;
162 };
163
164 std::ostream&
165 operator<<(std::ostream& os, AdjLsa& aLsa);
166
167 class CorLsa:public Lsa
168 {
169 public:
170 CorLsa()
171 : Lsa()
172 , corRad(0)
173 , corTheta(0)
174 {
175 setLsType(3);
176 }
177
178 CorLsa(string origR, uint8_t lst, uint32_t lsn, uint32_t lt
179 , double r, double theta);
180 string getCorLsaKey();
181 string getCorLsaData();
182 bool initCorLsaFromContent(string content);
183 double getCorRadius()
184 {
185 if ( corRad >= 0 )
186 {
187 return corRad;
188 }
189 else
190 {
191 return -1;
192 }
193 }
194
195 void setCorRadius(double cr)
196 {
197 corRad=cr;
198 }
199
200 double getCorTheta()
201 {
202 return corTheta;
203 }
204
205 void setCorTheta(double ct)
206 {
207 corTheta=ct;
208 }
209
210 bool isLsaContentEqual(CorLsa& clsa);
211 private:
212 double corRad;
213 double corTheta;
214
215 };
216
217 std::ostream&
218 operator<<(std::ostream& os, CorLsa& cLsa);
akmhoque298385a2014-02-13 14:13:09 -0600219
220
akmhoqueb1710aa2014-02-19 17:13:36 -0600221}//namespace nlsr
akmhoque298385a2014-02-13 14:13:09 -0600222
223#endif