blob: 5596a05bad5c4e57b055e4b257747060c6ca791b [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/>.
akmhoque3d06e792014-05-27 16:23:20 -050019 **/
akmhoque53353462014-04-22 08:43:45 -050020
Nick Gordon22b5c952017-08-10 17:48:15 -050021#include "map.hpp"
akmhoque53353462014-04-22 08:43:45 -050022#include "nlsr.hpp"
23#include "adjacent.hpp"
24#include "lsa.hpp"
25#include "lsdb.hpp"
akmhoque2f423352014-06-03 11:49:35 -050026#include "logger.hpp"
Nick Gordon22b5c952017-08-10 17:48:15 -050027
28#include <iostream>
29#include <list>
30
akmhoque53353462014-04-22 08:43:45 -050031namespace nlsr {
32
akmhoque2f423352014-06-03 11:49:35 -050033INIT_LOGGER("Map");
34
akmhoque53353462014-04-22 08:43:45 -050035static bool
akmhoque31d1d4b2014-05-05 22:08:14 -050036mapEntryCompareByRouter(MapEntry& mpe1, const ndn::Name& rtrName)
akmhoque53353462014-04-22 08:43:45 -050037{
38 return mpe1.getRouter() == rtrName;
39}
40
41static bool
akmhoquefdbddb12014-05-02 18:35:19 -050042mapEntryCompareByMappingNo(MapEntry& mpe1, int32_t mappingNo)
akmhoque53353462014-04-22 08:43:45 -050043{
44 return mpe1.getMappingNumber() == mappingNo;
45}
46
47void
akmhoque31d1d4b2014-05-05 22:08:14 -050048Map::addEntry(const ndn::Name& rtrName)
akmhoque53353462014-04-22 08:43:45 -050049{
50 MapEntry me(rtrName, m_mappingIndex);
akmhoque157b0a42014-05-13 00:26:37 -050051 if (addEntry(me)) {
akmhoque53353462014-04-22 08:43:45 -050052 m_mappingIndex++;
53 }
54}
55
56bool
akmhoquefdbddb12014-05-02 18:35:19 -050057Map::addEntry(MapEntry& mpe)
akmhoque53353462014-04-22 08:43:45 -050058{
59 //cout << mpe;
60 std::list<MapEntry>::iterator it = std::find_if(m_table.begin(),
61 m_table.end(),
dmcoomes9f936662017-03-02 10:33:09 -060062 std::bind(&mapEntryCompareByRouter,
akmhoque157b0a42014-05-13 00:26:37 -050063 _1, mpe.getRouter()));
64 if (it == m_table.end()) {
akmhoque53353462014-04-22 08:43:45 -050065 m_table.push_back(mpe);
66 return true;
67 }
68 return false;
69}
70
akmhoque31d1d4b2014-05-05 22:08:14 -050071const ndn::Name
akmhoquefdbddb12014-05-02 18:35:19 -050072Map::getRouterNameByMappingNo(int32_t mn)
akmhoque53353462014-04-22 08:43:45 -050073{
74 std::list<MapEntry>::iterator it = std::find_if(m_table.begin(),
75 m_table.end(),
dmcoomes9f936662017-03-02 10:33:09 -060076 std::bind(&mapEntryCompareByMappingNo,
akmhoque157b0a42014-05-13 00:26:37 -050077 _1, mn));
78 if (it != m_table.end()) {
akmhoque53353462014-04-22 08:43:45 -050079 return (*it).getRouter();
80 }
akmhoque31d1d4b2014-05-05 22:08:14 -050081 return ndn::Name();
akmhoque53353462014-04-22 08:43:45 -050082}
83
akmhoquefdbddb12014-05-02 18:35:19 -050084int32_t
akmhoque31d1d4b2014-05-05 22:08:14 -050085Map::getMappingNoByRouterName(const ndn::Name& rName)
akmhoque53353462014-04-22 08:43:45 -050086{
87 std::list<MapEntry>::iterator it = std::find_if(m_table.begin(),
88 m_table.end(),
dmcoomes9f936662017-03-02 10:33:09 -060089 std::bind(&mapEntryCompareByRouter,
akmhoque157b0a42014-05-13 00:26:37 -050090 _1, rName));
91 if (it != m_table.end()) {
akmhoque53353462014-04-22 08:43:45 -050092 return (*it).getMappingNumber();
93 }
94 return -1;
95}
96
97void
akmhoque53353462014-04-22 08:43:45 -050098Map::reset()
99{
100 m_table.clear();
101 m_mappingIndex = 0;
102}
103
akmhoque2f423352014-06-03 11:49:35 -0500104void
105Map::writeLog()
akmhoque53353462014-04-22 08:43:45 -0500106{
akmhoque2f423352014-06-03 11:49:35 -0500107 _LOG_DEBUG("---------------Map----------------------");
108 for (std::list<MapEntry>::iterator it = m_table.begin(); it != m_table.end() ; it++) {
109 _LOG_DEBUG("MapEntry: ( Router: " << (*it).getRouter() << " Mapping No: "
110 << (*it).getMappingNumber() << " )");
akmhoque53353462014-04-22 08:43:45 -0500111 }
akmhoque53353462014-04-22 08:43:45 -0500112}
113
Nick Gordonfad8e252016-08-11 14:21:38 -0500114} // namespace nlsr