blob: 99cc450287eba1136f7f0825c34b3368ca7b9775 [file] [log] [blame]
akmhoque87347a32014-01-31 11:00:44 -06001#include <ndn-cpp-dev/face.hpp>
2#include <ndn-cpp-dev/security/key-chain.hpp>
3#include <ndn-cpp-dev/util/scheduler.hpp>
4
5#include <cstdlib>
akmhoquedfa4a5b2014-02-03 20:12:29 -06006#include<string>
7#include <sstream>
akmhoque87347a32014-01-31 11:00:44 -06008
9#include "nlsr.hpp"
akmhoque204e7542014-01-31 16:08:25 -060010#include "nlsr_conf_param.hpp"
11#include "nlsr_conf_processor.hpp"
akmhoquebd7c8e62014-02-01 14:57:40 -060012#include "nlsr_lsdb.hpp"
akmhoquedfa4a5b2014-02-03 20:12:29 -060013//test purpose of NLSR
14#include "nlsr_test.hpp"
akmhoque87347a32014-01-31 11:00:44 -060015
16using namespace ndn;
17using namespace std;
18
akmhoque87347a32014-01-31 11:00:44 -060019void
20nlsr::nlsrRegistrationFailed(const ptr_lib::shared_ptr<const Name>&)
21{
akmhoque147f4992014-01-31 15:52:49 -060022 cerr << "ERROR: Failed to register prefix in local hub's daemon" << endl;
akmhoquea8cd6b92014-01-31 20:13:26 -060023 getNlsrFace().shutdown();
akmhoque87347a32014-01-31 11:00:44 -060024}
25
akmhoque147f4992014-01-31 15:52:49 -060026
akmhoque87347a32014-01-31 11:00:44 -060027void
akmhoque147f4992014-01-31 15:52:49 -060028nlsr::setInterestFilterNlsr(const string& name)
akmhoque87347a32014-01-31 11:00:44 -060029{
akmhoquea8cd6b92014-01-31 20:13:26 -060030 getNlsrFace().setInterestFilter(name,
akmhoque147f4992014-01-31 15:52:49 -060031 func_lib::bind(&interestManager::processInterest, &im,
32 boost::ref(*this), _1, _2),
akmhoque87347a32014-01-31 11:00:44 -060033 func_lib::bind(&nlsr::nlsrRegistrationFailed, this, _1));
34}
35
akmhoque147f4992014-01-31 15:52:49 -060036
akmhoque87347a32014-01-31 11:00:44 -060037void
akmhoque147f4992014-01-31 15:52:49 -060038nlsr::startEventLoop()
akmhoque87347a32014-01-31 11:00:44 -060039{
akmhoquea8cd6b92014-01-31 20:13:26 -060040 getNlsrFace().processEvents();
akmhoque87347a32014-01-31 11:00:44 -060041}
42
43int
akmhoque147f4992014-01-31 15:52:49 -060044nlsr::usage(const string& progname)
45{
akmhoque87347a32014-01-31 11:00:44 -060046
47 cout << "Usage: " << progname << " [OPTIONS...]"<<endl;
48 cout << " NDN routing...." << endl;
49 cout << " -d, --daemon Run in daemon mode" << endl;
50 cout << " -f, --config_file Specify configuration file name" <<endl;
51 cout << " -p, --api_port port where api client will connect" <<endl;
52 cout << " -h, --help Display this help message" << endl;
53
54 exit(EXIT_FAILURE);
55}
56
57int
akmhoquedfa4a5b2014-02-03 20:12:29 -060058main(int argc, char **argv){
akmhoque87347a32014-01-31 11:00:44 -060059
60 nlsr nlsr;
akmhoquedfa4a5b2014-02-03 20:12:29 -060061 string programName(argv[0]);
akmhoque87347a32014-01-31 11:00:44 -060062 nlsr.setConfFileName("nlsr.conf");
akmhoquedfa4a5b2014-02-03 20:12:29 -060063
64 int opt;
65 while ((opt = getopt(argc, argv, "df:p:h")) != -1) {
66 switch (opt) {
67 case 'f':
68 nlsr.setConfFileName(optarg);
69 break;
70 case 'd':
71 nlsr.setIsDaemonProcess(optarg);
72 break;
73 case 'p':
74 {
75 stringstream sst(optarg);
76 int ap;
77 sst>>ap;
78 nlsr.setApiPort(ap);
79 }
80 break;
81 case 'h':
82 default:
83 nlsr.usage(programName);
84 return EXIT_FAILURE;
85 }
86 }
87
88
akmhoque87347a32014-01-31 11:00:44 -060089 ConfFileProcessor cfp(nlsr.getConfFileName());
akmhoquedfa4a5b2014-02-03 20:12:29 -060090 int res=cfp.processConfFile(nlsr);
91 if ( res < 0 )
92 {
93 return EXIT_FAILURE;
94 }
akmhoquea8cd6b92014-01-31 20:13:26 -060095 nlsr.getConfParameter().buildRouterPrefix();
akmhoquebd7c8e62014-02-01 14:57:40 -060096
akmhoquedfa4a5b2014-02-03 20:12:29 -060097 /* debugging purpose start */
akmhoquecd552472014-02-01 21:22:16 -060098 cout << nlsr.getConfParameter();
akmhoquea8cd6b92014-01-31 20:13:26 -060099 nlsr.getAdl().printAdl();
100 nlsr.getNpl().printNpl();
akmhoquedfa4a5b2014-02-03 20:12:29 -0600101 /* debugging purpose end */
102
103 nlsr.getLsdb().buildAndInstallOwnNameLsa(nlsr);
104 nlsr.getLsdb().buildAndInstallOwnCorLsa(nlsr);
105
106 //testing purpose
107 nlsr.getNlsrTesting().schedlueAddingLsas(nlsr);
108
akmhoquea8cd6b92014-01-31 20:13:26 -0600109 nlsr.setInterestFilterNlsr(nlsr.getConfParameter().getRouterPrefix());
110 nlsr.getIm().scheduleInfoInterest(nlsr,1);
akmhoque87347a32014-01-31 11:00:44 -0600111
112
113
114
115 try{
116 nlsr.startEventLoop();
117 }catch(std::exception &e) {
118 std::cerr << "ERROR: " << e.what() << std::endl;
119 }
120
akmhoquedfa4a5b2014-02-03 20:12:29 -0600121 return EXIT_SUCCESS;
akmhoque87347a32014-01-31 11:00:44 -0600122}