blob: a97be112ae070b9afcda771d28aac254f59a4233 [file] [log] [blame]
akmhoque3d06e792014-05-27 16:23:20 -05001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/**
Nick Gordonfeae5572017-01-13 12:06:26 -06003 * Copyright (c) 2014-2017, The University of Memphis,
Nick Gordonf8b5bcd2016-08-11 15:06:50 -05004 * Regents of the University of California
akmhoque3d06e792014-05-27 16:23:20 -05005 *
6 * This file is part of NLSR (Named-data Link State Routing).
7 * See AUTHORS.md for complete list of NLSR authors and contributors.
8 *
9 * NLSR is free software: you can redistribute it and/or modify it under the terms
10 * of the GNU General Public License as published by the Free Software Foundation,
11 * either version 3 of the License, or (at your option) any later version.
12 *
13 * NLSR is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
14 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 * PURPOSE. See the GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License along with
18 * NLSR, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
19 *
20 * \author A K M Mahmudul Hoque <ahoque1@memphis.edu>
21 *
22 **/
akmhoque53353462014-04-22 08:43:45 -050023#include <iostream>
24#include <list>
25
26#include "nlsr.hpp"
27#include "adjacent.hpp"
28#include "lsa.hpp"
29#include "lsdb.hpp"
30#include "map.hpp"
akmhoque2f423352014-06-03 11:49:35 -050031#include "logger.hpp"
akmhoque53353462014-04-22 08:43:45 -050032namespace nlsr {
33
akmhoque2f423352014-06-03 11:49:35 -050034INIT_LOGGER("Map");
35
akmhoque53353462014-04-22 08:43:45 -050036using namespace std;
37
akmhoque53353462014-04-22 08:43:45 -050038static bool
akmhoque31d1d4b2014-05-05 22:08:14 -050039mapEntryCompareByRouter(MapEntry& mpe1, const ndn::Name& rtrName)
akmhoque53353462014-04-22 08:43:45 -050040{
41 return mpe1.getRouter() == rtrName;
42}
43
44static bool
akmhoquefdbddb12014-05-02 18:35:19 -050045mapEntryCompareByMappingNo(MapEntry& mpe1, int32_t mappingNo)
akmhoque53353462014-04-22 08:43:45 -050046{
47 return mpe1.getMappingNumber() == mappingNo;
48}
49
50void
akmhoque31d1d4b2014-05-05 22:08:14 -050051Map::addEntry(const ndn::Name& rtrName)
akmhoque53353462014-04-22 08:43:45 -050052{
53 MapEntry me(rtrName, m_mappingIndex);
akmhoque157b0a42014-05-13 00:26:37 -050054 if (addEntry(me)) {
akmhoque53353462014-04-22 08:43:45 -050055 m_mappingIndex++;
56 }
57}
58
59bool
akmhoquefdbddb12014-05-02 18:35:19 -050060Map::addEntry(MapEntry& mpe)
akmhoque53353462014-04-22 08:43:45 -050061{
62 //cout << mpe;
63 std::list<MapEntry>::iterator it = std::find_if(m_table.begin(),
64 m_table.end(),
dmcoomes9f936662017-03-02 10:33:09 -060065 std::bind(&mapEntryCompareByRouter,
akmhoque157b0a42014-05-13 00:26:37 -050066 _1, mpe.getRouter()));
67 if (it == m_table.end()) {
akmhoque53353462014-04-22 08:43:45 -050068 m_table.push_back(mpe);
69 return true;
70 }
71 return false;
72}
73
akmhoque31d1d4b2014-05-05 22:08:14 -050074const ndn::Name
akmhoquefdbddb12014-05-02 18:35:19 -050075Map::getRouterNameByMappingNo(int32_t mn)
akmhoque53353462014-04-22 08:43:45 -050076{
77 std::list<MapEntry>::iterator it = std::find_if(m_table.begin(),
78 m_table.end(),
dmcoomes9f936662017-03-02 10:33:09 -060079 std::bind(&mapEntryCompareByMappingNo,
akmhoque157b0a42014-05-13 00:26:37 -050080 _1, mn));
81 if (it != m_table.end()) {
akmhoque53353462014-04-22 08:43:45 -050082 return (*it).getRouter();
83 }
akmhoque31d1d4b2014-05-05 22:08:14 -050084 return ndn::Name();
akmhoque53353462014-04-22 08:43:45 -050085}
86
akmhoquefdbddb12014-05-02 18:35:19 -050087int32_t
akmhoque31d1d4b2014-05-05 22:08:14 -050088Map::getMappingNoByRouterName(const ndn::Name& rName)
akmhoque53353462014-04-22 08:43:45 -050089{
90 std::list<MapEntry>::iterator it = std::find_if(m_table.begin(),
91 m_table.end(),
dmcoomes9f936662017-03-02 10:33:09 -060092 std::bind(&mapEntryCompareByRouter,
akmhoque157b0a42014-05-13 00:26:37 -050093 _1, rName));
94 if (it != m_table.end()) {
akmhoque53353462014-04-22 08:43:45 -050095 return (*it).getMappingNumber();
96 }
97 return -1;
98}
99
100void
101Map::createFromAdjLsdb(Nlsr& pnlsr)
102{
103 std::list<AdjLsa> adjLsdb = pnlsr.getLsdb().getAdjLsdb();
104 for (std::list<AdjLsa>::iterator it = adjLsdb.begin();
akmhoque157b0a42014-05-13 00:26:37 -0500105 it != adjLsdb.end() ; it++) {
akmhoque31d1d4b2014-05-05 22:08:14 -0500106 addEntry((*it).getOrigRouter());
akmhoque53353462014-04-22 08:43:45 -0500107 std::list<Adjacent> adl = (*it).getAdl().getAdjList();
108 for (std::list<Adjacent>::iterator itAdl = adl.begin();
akmhoque157b0a42014-05-13 00:26:37 -0500109 itAdl != adl.end() ; itAdl++) {
akmhoque31d1d4b2014-05-05 22:08:14 -0500110 addEntry((*itAdl).getName());
akmhoque53353462014-04-22 08:43:45 -0500111 }
112 }
113}
114
115void
Nick Gordone8e03ac2016-07-07 14:24:38 -0500116Map::createFromCoordinateLsdb(Nlsr& nlsr)
117{
118 for (CoordinateLsa lsa : nlsr.getLsdb().getCoordinateLsdb()) {
119 addEntry(lsa.getOrigRouter());
120 }
121}
122
123void
akmhoque53353462014-04-22 08:43:45 -0500124Map::reset()
125{
126 m_table.clear();
127 m_mappingIndex = 0;
128}
129
akmhoque2f423352014-06-03 11:49:35 -0500130void
131Map::writeLog()
akmhoque53353462014-04-22 08:43:45 -0500132{
akmhoque2f423352014-06-03 11:49:35 -0500133 _LOG_DEBUG("---------------Map----------------------");
134 for (std::list<MapEntry>::iterator it = m_table.begin(); it != m_table.end() ; it++) {
135 _LOG_DEBUG("MapEntry: ( Router: " << (*it).getRouter() << " Mapping No: "
136 << (*it).getMappingNumber() << " )");
akmhoque53353462014-04-22 08:43:45 -0500137 }
akmhoque53353462014-04-22 08:43:45 -0500138}
139
Nick Gordonfad8e252016-08-11 14:21:38 -0500140} // namespace nlsr