blob: c298e970efe44c2ae350a1ab20f24f5699020560 [file] [log] [blame]
akmhoque3d06e792014-05-27 16:23:20 -05001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
Ashlesh Gawande0421bc62020-05-08 20:42:19 -07002/*
3 * Copyright (c) 2014-2020, The University of Memphis,
Vince Lehmancae33b62015-06-05 09:21:30 -05004 * 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/>.
Ashlesh Gawande0421bc62020-05-08 20:42:19 -070020 */
Vince Lehmancae33b62015-06-05 09:21:30 -050021
akmhoquefdbddb12014-05-02 18:35:19 -050022#ifndef NLSR_NAME_PREFIX_TABLE_ENTRY_HPP
23#define NLSR_NAME_PREFIX_TABLE_ENTRY_HPP
akmhoque53353462014-04-22 08:43:45 -050024
Nick Gordonb50e51b2016-07-22 16:05:57 -050025#include "routing-table-pool-entry.hpp"
Nick Gordonb50e51b2016-07-22 16:05:57 -050026#include "test-access-control.hpp"
Vince Lehmancae33b62015-06-05 09:21:30 -050027
akmhoque53353462014-04-22 08:43:45 -050028#include <list>
29#include <utility>
akmhoque53353462014-04-22 08:43:45 -050030
31namespace nlsr {
32
akmhoquec8a10f72014-04-25 18:42:55 -050033class NamePrefixTableEntry
akmhoque53353462014-04-22 08:43:45 -050034{
35public:
akmhoquec8a10f72014-04-25 18:42:55 -050036 NamePrefixTableEntry()
akmhoque53353462014-04-22 08:43:45 -050037 {
38 }
39
akmhoque31d1d4b2014-05-05 22:08:14 -050040 NamePrefixTableEntry(const ndn::Name& namePrefix)
41 : m_namePrefix(namePrefix)
42 , m_nexthopList()
akmhoque53353462014-04-22 08:43:45 -050043 {
akmhoque53353462014-04-22 08:43:45 -050044 }
45
akmhoque31d1d4b2014-05-05 22:08:14 -050046 const ndn::Name&
akmhoquefdbddb12014-05-02 18:35:19 -050047 getNamePrefix() const
akmhoque53353462014-04-22 08:43:45 -050048 {
49 return m_namePrefix;
50 }
51
Nick Gordonb50e51b2016-07-22 16:05:57 -050052 const std::list<std::shared_ptr<RoutingTablePoolEntry>>&
Vince Lehmancae33b62015-06-05 09:21:30 -050053 getRteList() const
akmhoque53353462014-04-22 08:43:45 -050054 {
55 return m_rteList;
56 }
57
Nick Gordond0a7df32017-05-30 16:44:34 -050058 /*! \brief Resets the next hop lists of all routing table entries
59 * that advertise this name prefix.
60 */
akmhoque53353462014-04-22 08:43:45 -050061 void
62 resetRteListNextHop()
63 {
akmhoque157b0a42014-05-13 00:26:37 -050064 if (m_rteList.size() > 0) {
Nick Gordonb50e51b2016-07-22 16:05:57 -050065 for (auto it = m_rteList.begin(); it != m_rteList.end(); ++it) {
Ashlesh Gawande0421bc62020-05-08 20:42:19 -070066 (*it)->getNexthopList().clear();
akmhoque53353462014-04-22 08:43:45 -050067 }
68 }
69 }
70
akmhoquefdbddb12014-05-02 18:35:19 -050071 size_t
akmhoque53353462014-04-22 08:43:45 -050072 getRteListSize()
73 {
74 return m_rteList.size();
75 }
76
Ashlesh Gawandee8d8bd52018-08-09 17:18:51 -050077 const NexthopList&
78 getNexthopList() const
akmhoque53353462014-04-22 08:43:45 -050079 {
akmhoquefdbddb12014-05-02 18:35:19 -050080 return m_nexthopList;
akmhoque53353462014-04-22 08:43:45 -050081 }
82
Nick Gordond0a7df32017-05-30 16:44:34 -050083 /*! \brief Collect all next-hops that are advertised by this entry's
84 * routing entries.
85 */
akmhoque53353462014-04-22 08:43:45 -050086 void
87 generateNhlfromRteList();
88
Nick Gordonb50e51b2016-07-22 16:05:57 -050089 /*! \brief Removes a routing entry from this NPT entry.
Nick Gordond0a7df32017-05-30 16:44:34 -050090 * \return The number of NPTs using the just-removed routing entry.
91 */
Nick Gordonb50e51b2016-07-22 16:05:57 -050092 uint64_t
93 removeRoutingTableEntry(std::shared_ptr<RoutingTablePoolEntry> rtpePtr);
akmhoque53353462014-04-22 08:43:45 -050094
Nick Gordonb50e51b2016-07-22 16:05:57 -050095 /*! \brief Adds a routing entry to this NPT entry.
Nick Gordond0a7df32017-05-30 16:44:34 -050096 * \param rtpePtr The routing entry.
97 *
98 * Adds a routing table pool entry to this NPT entry's list
99 * (reminder: each RTPE has a next-hop list). They are used to
100 * calculate this entry's overall next-hop list.
101 */
akmhoque53353462014-04-22 08:43:45 -0500102 void
Nick Gordonb50e51b2016-07-22 16:05:57 -0500103 addRoutingTableEntry(std::shared_ptr<RoutingTablePoolEntry> rtpePtr);
akmhoque53353462014-04-22 08:43:45 -0500104
akmhoque674b0b12014-05-20 14:33:28 -0500105 void
106 writeLog();
107
akmhoque53353462014-04-22 08:43:45 -0500108private:
akmhoque31d1d4b2014-05-05 22:08:14 -0500109 ndn::Name m_namePrefix;
Nick Gordonb50e51b2016-07-22 16:05:57 -0500110
111PUBLIC_WITH_TESTS_ELSE_PRIVATE:
112 std::list<std::shared_ptr<RoutingTablePoolEntry>> m_rteList;
akmhoquefdbddb12014-05-02 18:35:19 -0500113 NexthopList m_nexthopList;
akmhoque53353462014-04-22 08:43:45 -0500114};
115
Nick Gordonb50e51b2016-07-22 16:05:57 -0500116bool
117operator==(const NamePrefixTableEntry& lhs, const NamePrefixTableEntry& rhs);
118
119bool
120operator==(const NamePrefixTableEntry& lhs, const ndn::Name& rhs);
121
Vince Lehmancae33b62015-06-05 09:21:30 -0500122std::ostream&
123operator<<(std::ostream& os, const NamePrefixTableEntry& entry);
akmhoque53353462014-04-22 08:43:45 -0500124
Vince Lehmancae33b62015-06-05 09:21:30 -0500125} // namespace nlsr
126
127#endif // NLSR_NAME_PREFIX_TABLE_ENTRY_HPP