blob: 2a7294a8b39ebf7493ace3ae0d4b84bc143f7e4c [file] [log] [blame]
akmhoquefd1dd0a2014-02-01 01:11:35 -06001#ifndef NLSR_LSA_HPP
2#define NLSR_LSA_HPP
3
4#include "nlsr_adjacent.hpp"
5#include "nlsr_npl.hpp"
6#include "nlsr_adl.hpp"
7
8using namespace std;
9
10class Lsa{
11public:
12 Lsa()
13 : origRouter()
14 , lsSeqNo()
15 , lifeTime()
16 {
17 }
18
19
20 void setLsType(uint8_t lst)
21 {
22 lsType=lst;
23 }
24
25 uint8_t getLsType()
26 {
27 return lsType;
28 }
29
30 void setLsSeqNo(uint32_t lsn)
31 {
32 lsSeqNo=lsn;
33 }
34
35 uint32_t getLsSeqNo()
36 {
37 return lsSeqNo;
38 }
39
40 string& getOrigRouter()
41 {
42 return origRouter;
43 }
44
45 void setOrigRouter(string& org)
46 {
47 origRouter=org;
48 }
49
50 uint32_t getLifeTime()
51 {
52 return lifeTime;
53 }
54
55 void setLifeTime(uint32_t lt)
56 {
57 lifeTime=lt;
58 }
akmhoque3fdf7612014-02-04 21:18:23 -060059 //string getLsaKey();
akmhoquefd1dd0a2014-02-01 01:11:35 -060060protected:
61 string origRouter;
62 uint8_t lsType;
63 uint32_t lsSeqNo;
64 uint32_t lifeTime;
65};
66
akmhoquebd7c8e62014-02-01 14:57:40 -060067class NameLsa:public Lsa{
akmhoquefd1dd0a2014-02-01 01:11:35 -060068public:
69 NameLsa()
70 : Lsa()
71 , npl()
72 {
73 setLsType(1);
74 }
75
akmhoquecd552472014-02-01 21:22:16 -060076 NameLsa(string origR, uint8_t lst, uint32_t lsn, uint32_t lt, Npl npl);
akmhoquefd1dd0a2014-02-01 01:11:35 -060077
78 Npl& getNpl(){
79 return npl;
80 }
81
82 void addNameToLsa(string& name)
83 {
84 npl.insertIntoNpl(name);
85 }
86
akmhoque3fdf7612014-02-04 21:18:23 -060087 string getNameLsaKey();
88
akmhoquefd1dd0a2014-02-01 01:11:35 -060089 string getNameLsaData();
90
91private:
92 Npl npl;
93
94};
95
akmhoquebd7c8e62014-02-01 14:57:40 -060096std::ostream&
97operator<<(std::ostream& os, NameLsa& nLsa);
98
99class AdjLsa: public Lsa{
akmhoquefd1dd0a2014-02-01 01:11:35 -0600100public:
101 AdjLsa()
102 : Lsa()
103 , adl()
104 {
akmhoquecd552472014-02-01 21:22:16 -0600105 setLsType(2);
106 }
107
108 AdjLsa(string origR, uint8_t lst, uint32_t lsn, uint32_t lt,
109 uint32_t nl ,Adl padl);
110 Adl& getAdl(){
111 return adl;
112 }
113
114 void addAdjacentToLsa(Adjacent adj)
115 {
116 adl.insert(adj);
117 }
akmhoque3fdf7612014-02-04 21:18:23 -0600118 string getAdjLsaKey();
akmhoquecd552472014-02-01 21:22:16 -0600119 string getAdjLsaData();
120 uint32_t getNoLink()
121 {
122 return noLink;
akmhoquefd1dd0a2014-02-01 01:11:35 -0600123 }
124
125private:
126 uint32_t noLink;
127 Adl adl;
128};
129
akmhoquecd552472014-02-01 21:22:16 -0600130std::ostream&
131operator<<(std::ostream& os, AdjLsa& aLsa);
132
akmhoquebd7c8e62014-02-01 14:57:40 -0600133class CorLsa:public Lsa{
akmhoquefd1dd0a2014-02-01 01:11:35 -0600134public:
135 CorLsa()
136 :Lsa()
137 {
akmhoquecd552472014-02-01 21:22:16 -0600138 setLsType(3);
akmhoquefd1dd0a2014-02-01 01:11:35 -0600139 }
akmhoque3c6bd922014-02-01 17:10:17 -0600140
141 CorLsa(string origR, uint8_t lst, uint32_t lsn, uint32_t lt
142 , double r, double theta);
akmhoque3fdf7612014-02-04 21:18:23 -0600143 string getCorLsaKey();
akmhoque3c6bd922014-02-01 17:10:17 -0600144 string getCorLsaData();
145
146 double getCorRadius()
147 {
akmhoquef7c2c7c2014-02-06 11:32:43 -0600148 if ( corRad >= 0 )
149 {
150 return corRad;
151 }
152 else
153 {
154 return -1;
155 }
akmhoque3c6bd922014-02-01 17:10:17 -0600156 }
157
158 void setCorRadius(double cr)
159 {
160 corRad=cr;
161 }
162
163 double getCorTheta()
164 {
165 return corTheta;
166 }
167
168 void setCorTheta(double ct){
169 corTheta=ct;
170 }
akmhoquefd1dd0a2014-02-01 01:11:35 -0600171private:
172 double corRad;
173 double corTheta;
174
175};
176
akmhoque3c6bd922014-02-01 17:10:17 -0600177std::ostream&
178operator<<(std::ostream& os, CorLsa& cLsa);
179
akmhoquefd1dd0a2014-02-01 01:11:35 -0600180
181
182
183#endif