blob: ffbbfac4794e5db262119686583eeba1004f7cf7 [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/*
Ashlesh Gawande0db4d4d2020-02-05 20:30:02 -08003 * Copyright (c) 2014-2020, 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/>.
Ashlesh Gawande0421bc62020-05-08 20:42:19 -070019 */
Nick Gordond0a7df32017-05-30 16:44:34 -050020
akmhoquefdbddb12014-05-02 18:35:19 -050021#ifndef NLSR_ROUTING_TABLE_ENTRY_HPP
22#define NLSR_ROUTING_TABLE_ENTRY_HPP
akmhoque53353462014-04-22 08:43:45 -050023
Nick Gordond0a7df32017-05-30 16:44:34 -050024#include "nexthop-list.hpp"
25
Ashlesh Gawande0421bc62020-05-08 20:42:19 -070026#include <ndn-cxx/encoding/block.hpp>
27#include <ndn-cxx/encoding/encoding-buffer.hpp>
28#include <ndn-cxx/encoding/tlv.hpp>
akmhoque31d1d4b2014-05-05 22:08:14 -050029#include <ndn-cxx/name.hpp>
akmhoque53353462014-04-22 08:43:45 -050030
31namespace nlsr {
32
Ashlesh Gawande0421bc62020-05-08 20:42:19 -070033/*! \brief Data abstraction for RouteTableInfo
34 *
35 * RoutingTableEntry := ROUTINGTABLEENTRY-TYPE TLV-LENGTH
36 * Name
37 * NexthopList*
38 *
39 * \sa https://redmine.named-data.net/projects/nlsr/wiki/Routing_Table_DataSet
40 */
akmhoque53353462014-04-22 08:43:45 -050041class RoutingTableEntry
42{
43public:
Ashlesh Gawande0421bc62020-05-08 20:42:19 -070044 using Error = ndn::tlv::Error;
akmhoque53353462014-04-22 08:43:45 -050045
Ashlesh Gawande0421bc62020-05-08 20:42:19 -070046 RoutingTableEntry() = default;
47
48 RoutingTableEntry(const ndn::Block& block)
akmhoque53353462014-04-22 08:43:45 -050049 {
Ashlesh Gawande0421bc62020-05-08 20:42:19 -070050 wireDecode(block);
akmhoque53353462014-04-22 08:43:45 -050051 }
52
akmhoque31d1d4b2014-05-05 22:08:14 -050053 RoutingTableEntry(const ndn::Name& dest)
akmhoque53353462014-04-22 08:43:45 -050054 {
55 m_destination = dest;
56 }
57
akmhoque31d1d4b2014-05-05 22:08:14 -050058 const ndn::Name&
59 getDestination() const
akmhoque53353462014-04-22 08:43:45 -050060 {
61 return m_destination;
62 }
63
akmhoquec8a10f72014-04-25 18:42:55 -050064 NexthopList&
akmhoquefdbddb12014-05-02 18:35:19 -050065 getNexthopList()
akmhoque53353462014-04-22 08:43:45 -050066 {
akmhoquefdbddb12014-05-02 18:35:19 -050067 return m_nexthopList;
akmhoque53353462014-04-22 08:43:45 -050068 }
69
Nick Gordonb50e51b2016-07-22 16:05:57 -050070 const NexthopList&
71 getNexthopList() const
72 {
73 return m_nexthopList;
74 }
75
76 inline bool
77 operator==(RoutingTableEntry& rhs)
78 {
Ashlesh Gawande0421bc62020-05-08 20:42:19 -070079 return m_destination == rhs.getDestination() &&
80 m_nexthopList == rhs.getNexthopList();
Nick Gordonb50e51b2016-07-22 16:05:57 -050081 }
82
Ashlesh Gawande0421bc62020-05-08 20:42:19 -070083 template<ndn::encoding::Tag TAG>
84 size_t
85 wireEncode(ndn::EncodingImpl<TAG>& block) const;
86
87 const ndn::Block&
88 wireEncode() const;
89
90 void
91 wireDecode(const ndn::Block& wire);
92
Nick Gordonb50e51b2016-07-22 16:05:57 -050093protected:
akmhoque31d1d4b2014-05-05 22:08:14 -050094 ndn::Name m_destination;
akmhoquefdbddb12014-05-02 18:35:19 -050095 NexthopList m_nexthopList;
Ashlesh Gawande0421bc62020-05-08 20:42:19 -070096
97 mutable ndn::Block m_wire;
akmhoque53353462014-04-22 08:43:45 -050098};
99
Ashlesh Gawande0421bc62020-05-08 20:42:19 -0700100NDN_CXX_DECLARE_WIRE_ENCODE_INSTANTIATIONS(RoutingTableEntry);
101
Nick Gordonb50e51b2016-07-22 16:05:57 -0500102std::ostream&
103operator<<(std::ostream& os, const RoutingTableEntry& rte);
104
Nick Gordonfad8e252016-08-11 14:21:38 -0500105} // namespace nlsr
akmhoque53353462014-04-22 08:43:45 -0500106
dmcoomes9f936662017-03-02 10:33:09 -0600107#endif // NLSR_ROUTING_TABLE_ENTRY_HPP