blob: 5718b129b1034f41feea49bf176128d9cfdf2f19 [file] [log] [blame]
akmhoque3d06e792014-05-27 16:23:20 -05001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/**
Nick Gordonc6a85222017-01-03 16:54:34 -06003 * Copyright (c) 2014-2017, The University of Memphis,
Vince Lehmanc2e51f62015-01-20 15:03:11 -06004 * Regents of the University of California,
5 * Arizona Board of Regents.
akmhoque3d06e792014-05-27 16:23:20 -05006 *
7 * This file is part of NLSR (Named-data Link State Routing).
8 * See AUTHORS.md for complete list of NLSR authors and contributors.
9 *
10 * NLSR is free software: you can redistribute it and/or modify it under the terms
11 * of the GNU General Public License as published by the Free Software Foundation,
12 * either version 3 of the License, or (at your option) any later version.
13 *
14 * NLSR is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
15 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
16 * PURPOSE. See the GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License along with
19 * NLSR, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
akmhoque3d06e792014-05-27 16:23:20 -050020 **/
Vince Lehmanc2e51f62015-01-20 15:03:11 -060021
akmhoquefdbddb12014-05-02 18:35:19 -050022#ifndef CONF_PARAMETER_HPP
23#define CONF_PARAMETER_HPP
akmhoque53353462014-04-22 08:43:45 -050024
25#include <iostream>
akmhoquefdbddb12014-05-02 18:35:19 -050026#include <boost/cstdint.hpp>
akmhoque31d1d4b2014-05-05 22:08:14 -050027#include <ndn-cxx/common.hpp>
28#include <ndn-cxx/face.hpp>
Alexander Afanasyev411ee4b2014-08-16 23:17:03 -070029#include <ndn-cxx/util/time.hpp>
akmhoque53353462014-04-22 08:43:45 -050030
akmhoque674b0b12014-05-20 14:33:28 -050031#include "logger.hpp"
32
akmhoque53353462014-04-22 08:43:45 -050033namespace nlsr {
akmhoque157b0a42014-05-13 00:26:37 -050034
35enum {
36 LSA_REFRESH_TIME_MIN = 240,
37 LSA_REFRESH_TIME_DEFAULT = 1800,
38 LSA_REFRESH_TIME_MAX = 7200
39};
40
41enum {
Alexander Afanasyev411ee4b2014-08-16 23:17:03 -070042 LSA_INTEREST_LIFETIME_MIN = 1,
43 LSA_INTEREST_LIFETIME_DEFAULT = 4,
44 LSA_INTEREST_LIFETIME_MAX = 60
45};
46
47enum {
Vince Lehman7b616582014-10-17 16:25:39 -050048 ADJ_LSA_BUILD_INTERVAL_MIN = 0,
49 ADJ_LSA_BUILD_INTERVAL_DEFAULT = 5,
50 ADJ_LSA_BUILD_INTERVAL_MAX = 5
51};
52
53enum {
54 FIRST_HELLO_INTERVAL_MIN = 0,
55 FIRST_HELLO_INTERVAL_DEFAULT = 10,
56 FIRST_HELLO_INTERVAL_MAX = 10
57};
58
59enum {
60 ROUTING_CALC_INTERVAL_MIN = 0,
61 ROUTING_CALC_INTERVAL_DEFAULT = 15,
62 ROUTING_CALC_INTERVAL_MAX = 15
63};
64
65enum {
akmhoque157b0a42014-05-13 00:26:37 -050066 HELLO_RETRIES_MIN = 1,
67 HELLO_RETRIES_DEFAULT = 3,
68 HELLO_RETRIES_MAX = 15
69};
70
71enum {
72 HELLO_TIMEOUT_MIN = 1,
73 HELLO_TIMEOUT_DEFAULT = 3,
74 HELLO_TIMEOUT_MAX = 15
75};
76
77enum {
78 HELLO_INTERVAL_MIN = 30,
79 HELLO_INTERVAL_DEFAULT = 60,
80 HELLO_INTERVAL_MAX =90
81};
82
83enum {
84 MAX_FACES_PER_PREFIX_MIN = 0,
alvya2228c62014-12-09 10:25:11 -060085 MAX_FACES_PER_PREFIX_DEFAULT = 0,
akmhoque157b0a42014-05-13 00:26:37 -050086 MAX_FACES_PER_PREFIX_MAX = 60
87};
88
Nick Gordon5c467f02016-07-13 13:40:10 -050089enum HyperbolicState {
akmhoque157b0a42014-05-13 00:26:37 -050090 HYPERBOLIC_STATE_OFF = 0,
91 HYPERBOLIC_STATE_ON = 1,
alvya2228c62014-12-09 10:25:11 -060092 HYPERBOLIC_STATE_DRY_RUN = 2,
93 HYPERBOLIC_STATE_DEFAULT = 0
akmhoque157b0a42014-05-13 00:26:37 -050094};
95
akmhoque53353462014-04-22 08:43:45 -050096class ConfParameter
97{
98
99public:
100 ConfParameter()
akmhoque157b0a42014-05-13 00:26:37 -0500101 : m_lsaRefreshTime(LSA_REFRESH_TIME_DEFAULT)
Vince Lehman7b616582014-10-17 16:25:39 -0500102 , m_adjLsaBuildInterval(ADJ_LSA_BUILD_INTERVAL_DEFAULT)
103 , m_firstHelloInterval(FIRST_HELLO_INTERVAL_DEFAULT)
104 , m_routingCalcInterval(ROUTING_CALC_INTERVAL_DEFAULT)
Alexander Afanasyev411ee4b2014-08-16 23:17:03 -0700105 , m_lsaInterestLifetime(ndn::time::seconds(static_cast<int>(LSA_INTEREST_LIFETIME_DEFAULT)))
Alexander Afanasyev1cf1e102014-08-17 19:47:57 -0700106 , m_routerDeadInterval(2 * LSA_REFRESH_TIME_DEFAULT)
akmhoque157b0a42014-05-13 00:26:37 -0500107 , m_logLevel("INFO")
108 , m_interestRetryNumber(HELLO_RETRIES_DEFAULT)
109 , m_interestResendTime(HELLO_TIMEOUT_DEFAULT)
110 , m_infoInterestInterval(HELLO_INTERVAL_DEFAULT)
111 , m_hyperbolicState(HYPERBOLIC_STATE_OFF)
akmhoque53353462014-04-22 08:43:45 -0500112 , m_corR(0)
113 , m_corTheta(0)
akmhoque157b0a42014-05-13 00:26:37 -0500114 , m_maxFacesPerPrefix(MAX_FACES_PER_PREFIX_MIN)
Muktadir R Chowdhurybfa27602014-10-31 10:57:41 -0500115 , m_isLog4cxxConfAvailable(false)
Alexander Afanasyev411ee4b2014-08-16 23:17:03 -0700116 {
117 }
akmhoque53353462014-04-22 08:43:45 -0500118
119 void
akmhoque157b0a42014-05-13 00:26:37 -0500120 setNetwork(const ndn::Name& networkName)
akmhoque53353462014-04-22 08:43:45 -0500121 {
akmhoque157b0a42014-05-13 00:26:37 -0500122 m_network = networkName;
Ashlesh Gawande44395232016-12-13 14:35:29 -0600123
124 m_chronosyncPrefix.append("localhop");
akmhoquea816bee2014-06-24 14:37:40 -0500125 m_chronosyncPrefix.append("NLSR");
akmhoque157b0a42014-05-13 00:26:37 -0500126 m_chronosyncPrefix.append("sync");
Alexander Afanasyev411ee4b2014-08-16 23:17:03 -0700127
Ashlesh Gawande6077ea92017-01-19 11:48:29 -0600128 m_lsaPrefix.append("localhop");
129 m_lsaPrefix.append(m_network);
akmhoquea816bee2014-06-24 14:37:40 -0500130 m_lsaPrefix.append("NLSR");
akmhoque157b0a42014-05-13 00:26:37 -0500131 m_lsaPrefix.append("LSA");
akmhoque53353462014-04-22 08:43:45 -0500132 }
133
akmhoque31d1d4b2014-05-05 22:08:14 -0500134 const ndn::Name&
Alexander Afanasyev411ee4b2014-08-16 23:17:03 -0700135 getNetwork() const
akmhoque53353462014-04-22 08:43:45 -0500136 {
137 return m_network;
138 }
139
140 void
akmhoque157b0a42014-05-13 00:26:37 -0500141 setRouterName(const ndn::Name& routerName)
142 {
143 m_routerName = routerName;
144 }
145
146 const ndn::Name&
Alexander Afanasyev411ee4b2014-08-16 23:17:03 -0700147 getRouterName() const
akmhoque157b0a42014-05-13 00:26:37 -0500148 {
149 return m_routerName;
150 }
151
152 void
153 setSiteName(const ndn::Name& siteName)
154 {
155 m_siteName = siteName;
156 }
157
158 const ndn::Name&
Alexander Afanasyev411ee4b2014-08-16 23:17:03 -0700159 getSiteName() const
akmhoque157b0a42014-05-13 00:26:37 -0500160 {
161 return m_siteName;
162 }
163
164 void
akmhoque53353462014-04-22 08:43:45 -0500165 buildRouterPrefix()
166 {
akmhoque31d1d4b2014-05-05 22:08:14 -0500167 m_routerPrefix = m_network;
168 m_routerPrefix.append(m_siteName);
169 m_routerPrefix.append(m_routerName);
akmhoque53353462014-04-22 08:43:45 -0500170 }
171
akmhoque31d1d4b2014-05-05 22:08:14 -0500172 const ndn::Name&
Alexander Afanasyev411ee4b2014-08-16 23:17:03 -0700173 getRouterPrefix() const
akmhoque53353462014-04-22 08:43:45 -0500174 {
175 return m_routerPrefix;
176 }
177
akmhoque157b0a42014-05-13 00:26:37 -0500178
akmhoque31d1d4b2014-05-05 22:08:14 -0500179 const ndn::Name&
Alexander Afanasyev411ee4b2014-08-16 23:17:03 -0700180 getChronosyncPrefix() const
akmhoque53353462014-04-22 08:43:45 -0500181 {
akmhoque157b0a42014-05-13 00:26:37 -0500182 return m_chronosyncPrefix;
akmhoque53353462014-04-22 08:43:45 -0500183 }
184
akmhoque157b0a42014-05-13 00:26:37 -0500185 const ndn::Name&
Alexander Afanasyev411ee4b2014-08-16 23:17:03 -0700186 getLsaPrefix() const
akmhoque53353462014-04-22 08:43:45 -0500187 {
akmhoque157b0a42014-05-13 00:26:37 -0500188 return m_lsaPrefix;
akmhoque53353462014-04-22 08:43:45 -0500189 }
190
191 void
alvy5a454952014-12-15 12:49:54 -0600192 setLsaRefreshTime(uint32_t lrt)
akmhoque53353462014-04-22 08:43:45 -0500193 {
194 m_lsaRefreshTime = lrt;
akmhoque53353462014-04-22 08:43:45 -0500195 }
196
alvy5a454952014-12-15 12:49:54 -0600197 uint32_t
Alexander Afanasyev411ee4b2014-08-16 23:17:03 -0700198 getLsaRefreshTime() const
akmhoque53353462014-04-22 08:43:45 -0500199 {
200 return m_lsaRefreshTime;
201 }
202
203 void
Alexander Afanasyev411ee4b2014-08-16 23:17:03 -0700204 setLsaInterestLifetime(const ndn::time::seconds& lifetime)
205 {
206 m_lsaInterestLifetime = lifetime;
207 }
208
209 const ndn::time::seconds&
210 getLsaInterestLifetime() const
211 {
212 return m_lsaInterestLifetime;
213 }
214
215 void
Vince Lehman7b616582014-10-17 16:25:39 -0500216 setAdjLsaBuildInterval(uint32_t interval)
217 {
218 m_adjLsaBuildInterval = interval;
219 }
220
221 uint32_t
222 getAdjLsaBuildInterval() const
223 {
224 return m_adjLsaBuildInterval;
225 }
226
227 void
228 setFirstHelloInterval(uint32_t interval)
229 {
230 m_firstHelloInterval = interval;
231 }
232
233 uint32_t
234 getFirstHelloInterval() const
235 {
236 return m_firstHelloInterval;
237 }
238
239 void
240 setRoutingCalcInterval(uint32_t interval)
241 {
242 m_routingCalcInterval = interval;
243 }
244
245 uint32_t
246 getRoutingCalcInterval() const
247 {
248 return m_routingCalcInterval;
249 }
250
251 void
alvy5a454952014-12-15 12:49:54 -0600252 setRouterDeadInterval(uint32_t rdt)
akmhoque53353462014-04-22 08:43:45 -0500253 {
254 m_routerDeadInterval = rdt;
255 }
256
alvy5a454952014-12-15 12:49:54 -0600257 uint32_t
Alexander Afanasyev411ee4b2014-08-16 23:17:03 -0700258 getRouterDeadInterval() const
akmhoque53353462014-04-22 08:43:45 -0500259 {
260 return m_routerDeadInterval;
261 }
Alexander Afanasyev411ee4b2014-08-16 23:17:03 -0700262
263 void
akmhoque157b0a42014-05-13 00:26:37 -0500264 setLogLevel(const std::string& logLevel)
265 {
266 m_logLevel = logLevel;
267 }
Alexander Afanasyev411ee4b2014-08-16 23:17:03 -0700268
269 const std::string&
270 getLogLevel() const
akmhoque157b0a42014-05-13 00:26:37 -0500271 {
272 return m_logLevel;
273 }
akmhoque53353462014-04-22 08:43:45 -0500274
275 void
akmhoque157b0a42014-05-13 00:26:37 -0500276 setInterestRetryNumber(uint32_t irn)
akmhoque53353462014-04-22 08:43:45 -0500277 {
akmhoque157b0a42014-05-13 00:26:37 -0500278 m_interestRetryNumber = irn;
279 }
280
281 uint32_t
Alexander Afanasyev411ee4b2014-08-16 23:17:03 -0700282 getInterestRetryNumber() const
akmhoque157b0a42014-05-13 00:26:37 -0500283 {
284 return m_interestRetryNumber;
285 }
286
287 void
alvy5a454952014-12-15 12:49:54 -0600288 setInterestResendTime(uint32_t irt)
akmhoque157b0a42014-05-13 00:26:37 -0500289 {
290 m_interestResendTime = irt;
akmhoque53353462014-04-22 08:43:45 -0500291 }
292
alvy5a454952014-12-15 12:49:54 -0600293 uint32_t
Alexander Afanasyev411ee4b2014-08-16 23:17:03 -0700294 getInterestResendTime() const
akmhoque53353462014-04-22 08:43:45 -0500295 {
akmhoque157b0a42014-05-13 00:26:37 -0500296 return m_interestResendTime;
akmhoque53353462014-04-22 08:43:45 -0500297 }
298
alvy5a454952014-12-15 12:49:54 -0600299 uint32_t
Alexander Afanasyev411ee4b2014-08-16 23:17:03 -0700300 getInfoInterestInterval() const
akmhoque53353462014-04-22 08:43:45 -0500301 {
akmhoque157b0a42014-05-13 00:26:37 -0500302 return m_infoInterestInterval;
akmhoque53353462014-04-22 08:43:45 -0500303 }
304
305 void
alvy5a454952014-12-15 12:49:54 -0600306 setInfoInterestInterval(uint32_t iii)
akmhoque53353462014-04-22 08:43:45 -0500307 {
akmhoque157b0a42014-05-13 00:26:37 -0500308 m_infoInterestInterval = iii;
309 }
310
311 void
312 setHyperbolicState(int32_t ihc)
313 {
314 m_hyperbolicState = ihc;
akmhoque53353462014-04-22 08:43:45 -0500315 }
316
akmhoquefdbddb12014-05-02 18:35:19 -0500317 int32_t
Alexander Afanasyev411ee4b2014-08-16 23:17:03 -0700318 getHyperbolicState() const
akmhoque53353462014-04-22 08:43:45 -0500319 {
akmhoque157b0a42014-05-13 00:26:37 -0500320 return m_hyperbolicState;
akmhoque53353462014-04-22 08:43:45 -0500321 }
322
akmhoque157b0a42014-05-13 00:26:37 -0500323 bool
akmhoque53353462014-04-22 08:43:45 -0500324 setCorR(double cr)
325 {
akmhoque157b0a42014-05-13 00:26:37 -0500326 if ( cr >= 0 ) {
327 m_corR = cr;
328 return true;
329 }
330 return false;
akmhoque53353462014-04-22 08:43:45 -0500331 }
332
333 double
Alexander Afanasyev411ee4b2014-08-16 23:17:03 -0700334 getCorR() const
akmhoque53353462014-04-22 08:43:45 -0500335 {
336 return m_corR;
337 }
338
339 void
340 setCorTheta(double ct)
341 {
342 m_corTheta = ct;
343 }
344
345 double
Alexander Afanasyev411ee4b2014-08-16 23:17:03 -0700346 getCorTheta() const
akmhoque53353462014-04-22 08:43:45 -0500347 {
348 return m_corTheta;
349 }
Alexander Afanasyev411ee4b2014-08-16 23:17:03 -0700350
akmhoque53353462014-04-22 08:43:45 -0500351 void
Vince Lehman942eb7b2014-10-02 10:09:27 -0500352 setMaxFacesPerPrefix(uint32_t mfpp)
akmhoque53353462014-04-22 08:43:45 -0500353 {
akmhoque157b0a42014-05-13 00:26:37 -0500354 m_maxFacesPerPrefix = mfpp;
akmhoque53353462014-04-22 08:43:45 -0500355 }
356
Vince Lehman942eb7b2014-10-02 10:09:27 -0500357 uint32_t
Alexander Afanasyev411ee4b2014-08-16 23:17:03 -0700358 getMaxFacesPerPrefix() const
akmhoque53353462014-04-22 08:43:45 -0500359 {
akmhoque157b0a42014-05-13 00:26:37 -0500360 return m_maxFacesPerPrefix;
akmhoque53353462014-04-22 08:43:45 -0500361 }
362
363 void
akmhoque674b0b12014-05-20 14:33:28 -0500364 setLogDir(const std::string& logDir)
365 {
366 m_logDir = logDir;
367 }
368
369 const std::string&
Alexander Afanasyev411ee4b2014-08-16 23:17:03 -0700370 getLogDir() const
akmhoque674b0b12014-05-20 14:33:28 -0500371 {
372 return m_logDir;
373 }
374
375 void
akmhoque157b0a42014-05-13 00:26:37 -0500376 setSeqFileDir(const std::string& ssfd)
akmhoque53353462014-04-22 08:43:45 -0500377 {
akmhoque157b0a42014-05-13 00:26:37 -0500378 m_seqFileDir = ssfd;
akmhoque53353462014-04-22 08:43:45 -0500379 }
380
akmhoque157b0a42014-05-13 00:26:37 -0500381 const std::string&
Alexander Afanasyev411ee4b2014-08-16 23:17:03 -0700382 getSeqFileDir() const
akmhoque53353462014-04-22 08:43:45 -0500383 {
akmhoque157b0a42014-05-13 00:26:37 -0500384 return m_seqFileDir;
akmhoque53353462014-04-22 08:43:45 -0500385 }
386
Muktadir R Chowdhurybfa27602014-10-31 10:57:41 -0500387 bool
388 isLog4CxxConfAvailable() const
389 {
390 return m_isLog4cxxConfAvailable;
391 }
392
393 void
394 setLog4CxxConfPath(const std::string& path)
395 {
396 m_log4CxxConfPath = path;
397 m_isLog4cxxConfAvailable = true;
398 }
399
400 const std::string&
401 getLog4CxxConfPath() const
402 {
403 return m_log4CxxConfPath;
404 }
405
akmhoque674b0b12014-05-20 14:33:28 -0500406 void
407 writeLog();
akmhoque53353462014-04-22 08:43:45 -0500408
409private:
akmhoque31d1d4b2014-05-05 22:08:14 -0500410 ndn::Name m_routerName;
411 ndn::Name m_siteName;
412 ndn::Name m_network;
akmhoque53353462014-04-22 08:43:45 -0500413
akmhoque31d1d4b2014-05-05 22:08:14 -0500414 ndn::Name m_routerPrefix;
415 ndn::Name m_lsaRouterPrefix;
akmhoque53353462014-04-22 08:43:45 -0500416
akmhoque157b0a42014-05-13 00:26:37 -0500417 ndn::Name m_chronosyncPrefix;
418 ndn::Name m_lsaPrefix;
419
alvy5a454952014-12-15 12:49:54 -0600420 uint32_t m_lsaRefreshTime;
Vince Lehman7b616582014-10-17 16:25:39 -0500421
422 uint32_t m_adjLsaBuildInterval;
423 uint32_t m_firstHelloInterval;
424 uint32_t m_routingCalcInterval;
425
Alexander Afanasyev411ee4b2014-08-16 23:17:03 -0700426 ndn::time::seconds m_lsaInterestLifetime;
alvy5a454952014-12-15 12:49:54 -0600427 uint32_t m_routerDeadInterval;
akmhoque157b0a42014-05-13 00:26:37 -0500428 std::string m_logLevel;
akmhoque53353462014-04-22 08:43:45 -0500429
akmhoquefdbddb12014-05-02 18:35:19 -0500430 uint32_t m_interestRetryNumber;
alvy5a454952014-12-15 12:49:54 -0600431 uint32_t m_interestResendTime;
Alexander Afanasyev411ee4b2014-08-16 23:17:03 -0700432
alvy5a454952014-12-15 12:49:54 -0600433 uint32_t m_infoInterestInterval;
Alexander Afanasyev411ee4b2014-08-16 23:17:03 -0700434
akmhoque157b0a42014-05-13 00:26:37 -0500435 int32_t m_hyperbolicState;
akmhoque53353462014-04-22 08:43:45 -0500436 double m_corR;
437 double m_corTheta;
438
Vince Lehman942eb7b2014-10-02 10:09:27 -0500439 uint32_t m_maxFacesPerPrefix;
Alexander Afanasyev411ee4b2014-08-16 23:17:03 -0700440
akmhoque674b0b12014-05-20 14:33:28 -0500441 std::string m_logDir;
akmhoque157b0a42014-05-13 00:26:37 -0500442 std::string m_seqFileDir;
akmhoque53353462014-04-22 08:43:45 -0500443
Muktadir R Chowdhurybfa27602014-10-31 10:57:41 -0500444 bool m_isLog4cxxConfAvailable;
445 std::string m_log4CxxConfPath;
akmhoque53353462014-04-22 08:43:45 -0500446};
447
akmhoque53353462014-04-22 08:43:45 -0500448} // namespace nlsr
449
akmhoquefdbddb12014-05-02 18:35:19 -0500450#endif //CONF_PARAMETER_HPP