**breaking** consolidate src/tlv/*lsa* into src/lsa/*lsa*
Lsa de/serialize functions are replaced by wireEncode/Decode.
Update LSA wire formats. Change TLV assignments as required.
Update nlsrc to print using new encoding.
refs: #4787
Change-Id: Ie8d40b7836d51ea5bb444c8db208dc2b3a0d1cec
diff --git a/src/tlv/adjacency-lsa.cpp b/src/tlv/adjacency-lsa.cpp
deleted file mode 100644
index 72f138b..0000000
--- a/src/tlv/adjacency-lsa.cpp
+++ /dev/null
@@ -1,138 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2014-2018, The University of Memphis,
- * Regents of the University of California,
- * Arizona Board of Regents.
- *
- * This file is part of NLSR (Named-data Link State Routing).
- * See AUTHORS.md for complete list of NLSR authors and contributors.
- *
- * NLSR is free software: you can redistribute it and/or modify it under the terms
- * of the GNU General Public License as published by the Free Software Foundation,
- * either version 3 of the License, or (at your option) any later version.
- *
- * NLSR is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * NLSR, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "adjacency-lsa.hpp"
-#include "tlv-nlsr.hpp"
-
-#include <ndn-cxx/util/concepts.hpp>
-#include <ndn-cxx/encoding/block-helpers.hpp>
-
-namespace nlsr {
-namespace tlv {
-
-BOOST_CONCEPT_ASSERT((ndn::WireEncodable<AdjacencyLsa>));
-BOOST_CONCEPT_ASSERT((ndn::WireDecodable<AdjacencyLsa>));
-static_assert(std::is_base_of<ndn::tlv::Error, AdjacencyLsa::Error>::value,
- "AdjacencyLsa::Error must inherit from tlv::Error");
-
-AdjacencyLsa::AdjacencyLsa()
- : m_hasAdjacencies(false)
-{
-}
-
-AdjacencyLsa::AdjacencyLsa(const ndn::Block& block)
-{
- wireDecode(block);
-}
-
-template<ndn::encoding::Tag TAG>
-size_t
-AdjacencyLsa::wireEncode(ndn::EncodingImpl<TAG>& block) const
-{
- size_t totalLength = 0;
-
- for (std::list<Adjacency>::const_reverse_iterator it = m_adjacencies.rbegin();
- it != m_adjacencies.rend(); ++it) {
- totalLength += it->wireEncode(block);
- }
-
- totalLength += m_lsaInfo.wireEncode(block);
-
- totalLength += block.prependVarNumber(totalLength);
- totalLength += block.prependVarNumber(ndn::tlv::nlsr::AdjacencyLsa);
-
- return totalLength;
-}
-
-NDN_CXX_DEFINE_WIRE_ENCODE_INSTANTIATIONS(AdjacencyLsa);
-
-const ndn::Block&
-AdjacencyLsa::wireEncode() const
-{
- if (m_wire.hasWire()) {
- return m_wire;
- }
-
- ndn::EncodingEstimator estimator;
- size_t estimatedSize = wireEncode(estimator);
-
- ndn::EncodingBuffer buffer(estimatedSize, 0);
- wireEncode(buffer);
-
- m_wire = buffer.block();
-
- return m_wire;
-}
-
-void
-AdjacencyLsa::wireDecode(const ndn::Block& wire)
-{
- m_hasAdjacencies = false;
- m_adjacencies.clear();
-
- m_wire = wire;
-
- if (m_wire.type() != ndn::tlv::nlsr::AdjacencyLsa) {
- BOOST_THROW_EXCEPTION(Error("Expected AdjacencyLsa Block, but Block is of a different type: #" +
- ndn::to_string(m_wire.type())));
- }
-
- m_wire.parse();
-
- ndn::Block::element_const_iterator val = m_wire.elements_begin();
-
- if (val != m_wire.elements_end() && val->type() == ndn::tlv::nlsr::LsaInfo) {
- m_lsaInfo.wireDecode(*val);
- ++val;
- }
- else {
- BOOST_THROW_EXCEPTION(Error("Missing required LsaInfo field"));
- }
-
- for (; val != m_wire.elements_end(); ++val) {
- if (val->type() == ndn::tlv::nlsr::Adjacency) {
- m_adjacencies.push_back(Adjacency(*val));
- m_hasAdjacencies = true;
- }
- else {
- BOOST_THROW_EXCEPTION(Error("Expected Adjacency Block, but Block is of a different type: #" +
- ndn::to_string(m_wire.type())));
- }
- }
-}
-
-std::ostream&
-operator<<(std::ostream& os, const AdjacencyLsa& adjacencyLsa)
-{
- os << "AdjacencyLsa("
- << adjacencyLsa.getLsaInfo();
-
- for (const auto& adjacency : adjacencyLsa) {
- os << ", " << adjacency;
- }
-
- os << ")";
-
- return os;
-}
-
-} // namespace tlv
-} // namespace nlsr
diff --git a/src/tlv/adjacency-lsa.hpp b/src/tlv/adjacency-lsa.hpp
deleted file mode 100644
index 20c775d..0000000
--- a/src/tlv/adjacency-lsa.hpp
+++ /dev/null
@@ -1,176 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2014-2018, The University of Memphis,
- * Regents of the University of California,
- * Arizona Board of Regents.
- *
- * This file is part of NLSR (Named-data Link State Routing).
- * See AUTHORS.md for complete list of NLSR authors and contributors.
- *
- * NLSR is free software: you can redistribute it and/or modify it under the terms
- * of the GNU General Public License as published by the Free Software Foundation,
- * either version 3 of the License, or (at your option) any later version.
- *
- * NLSR is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * NLSR, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NLSR_TLV_ADJACENCY_LSA_HPP
-#define NLSR_TLV_ADJACENCY_LSA_HPP
-
-#include "lsa-info.hpp"
-#include "adjacency.hpp"
-
-#include <ndn-cxx/util/time.hpp>
-#include <ndn-cxx/encoding/block.hpp>
-#include <ndn-cxx/encoding/encoding-buffer.hpp>
-#include <ndn-cxx/encoding/tlv.hpp>
-#include <ndn-cxx/name.hpp>
-
-#include <list>
-
-namespace nlsr {
-namespace tlv {
-
-/*!
- \brief Data abstraction for AdjacencyLsa
-
- AdjacencyLsa := ADJACENCY-LSA-TYPE TLV-LENGTH
- LsaInfo
- Adjacency*
-
- \sa https://redmine.named-data.net/projects/nlsr/wiki/LSDB_DataSet
- */
-class AdjacencyLsa
-{
-public:
- class Error : public ndn::tlv::Error
- {
- public:
- explicit
- Error(const std::string& what)
- : ndn::tlv::Error(what)
- {
- }
- };
-
- typedef std::list<Adjacency> AdjacencyList;
- typedef AdjacencyList::const_iterator iterator;
-
- AdjacencyLsa();
-
- explicit
- AdjacencyLsa(const ndn::Block& block);
-
- const LsaInfo&
- getLsaInfo() const
- {
- return m_lsaInfo;
- }
-
- AdjacencyLsa&
- setLsaInfo(const LsaInfo& lsaInfo)
- {
- m_lsaInfo = lsaInfo;
- m_wire.reset();
- return *this;
- }
-
- bool
- hasAdjacencies() const
- {
- return m_hasAdjacencies;
- }
-
- const std::list<Adjacency>&
- getAdjacencies() const
- {
- return m_adjacencies;
- }
-
- AdjacencyLsa&
- addAdjacency(const Adjacency& adjacency)
- {
- m_adjacencies.push_back(adjacency);
- m_wire.reset();
- m_hasAdjacencies = true;
- return *this;
- }
-
- AdjacencyLsa&
- clearAdjacencies()
- {
- m_adjacencies.clear();
- m_hasAdjacencies = false;
- return *this;
- }
-
- /*! \brief Encodes the Adjacent objects and some info using the method in TAG.
- *
- * This function will TLV-format the Adjacent objects and some LSA
- * info using the implementation speciifed by TAG. Usually this is
- * called with an estimator first to guess how long the buffer needs
- * to be, then with an encoder to do the real work. This process is
- * automated by the other wireEncode.
- * \sa AdjacencyLsa::wireEncode()
- */
- template<ndn::encoding::Tag TAG>
- size_t
- wireEncode(ndn::EncodingImpl<TAG>& block) const;
-
- /*! \brief Create a TLV encoding of this object.
- *
- * Create a block containing the TLV encoding of this object. That
- * involves two steps: estimating the size that the information will
- * take up, and then creating a buffer of that size and encoding the
- * information into it. Both steps are accomplished by
- * AdjacencyLsa::wireEncode(ndn::EncodingImpl<TAG>&)
- */
- const ndn::Block&
- wireEncode() const;
-
- /*! \brief Populate this object by decoding the one contained in the
- * given block.
- */
- void
- wireDecode(const ndn::Block& wire);
-
- iterator
- begin() const;
-
- iterator
- end() const;
-
-private:
- LsaInfo m_lsaInfo;
- bool m_hasAdjacencies;
- AdjacencyList m_adjacencies;
-
- mutable ndn::Block m_wire;
-};
-
-NDN_CXX_DECLARE_WIRE_ENCODE_INSTANTIATIONS(AdjacencyLsa);
-
-inline AdjacencyLsa::iterator
-AdjacencyLsa::begin() const
-{
- return m_adjacencies.begin();
-}
-
-inline AdjacencyLsa::iterator
-AdjacencyLsa::end() const
-{
- return m_adjacencies.end();
-}
-
-std::ostream&
-operator<<(std::ostream& os, const AdjacencyLsa& adjacencyLsa);
-
-} // namespace tlv
-} // namespace nlsr
-
-#endif // NLSR_TLV_ADJACENCY_LSA_HPP
diff --git a/src/tlv/adjacency.cpp b/src/tlv/adjacency.cpp
deleted file mode 100644
index b9adec9..0000000
--- a/src/tlv/adjacency.cpp
+++ /dev/null
@@ -1,140 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2014-2018, The University of Memphis,
- * Regents of the University of California,
- * Arizona Board of Regents.
- *
- * This file is part of NLSR (Named-data Link State Routing).
- * See AUTHORS.md for complete list of NLSR authors and contributors.
- *
- * NLSR is free software: you can redistribute it and/or modify it under the terms
- * of the GNU General Public License as published by the Free Software Foundation,
- * either version 3 of the License, or (at your option) any later version.
- *
- * NLSR is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * NLSR, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "adjacency.hpp"
-#include "tlv-nlsr.hpp"
-
-#include <ndn-cxx/util/concepts.hpp>
-#include <ndn-cxx/encoding/block-helpers.hpp>
-
-namespace nlsr {
-namespace tlv {
-
-BOOST_CONCEPT_ASSERT((ndn::WireEncodable<Adjacency>));
-BOOST_CONCEPT_ASSERT((ndn::WireDecodable<Adjacency>));
-static_assert(std::is_base_of<ndn::tlv::Error, Adjacency::Error>::value,
- "Adjacency::Error must inherit from tlv::Error");
-
-Adjacency::Adjacency()
- : m_cost(0)
-{
-}
-
-Adjacency::Adjacency(const ndn::Block& block)
-{
- wireDecode(block);
-}
-
-template<ndn::encoding::Tag TAG>
-size_t
-Adjacency::wireEncode(ndn::EncodingImpl<TAG>& encoder) const
-{
- size_t totalLength = 0;
-
- totalLength += prependNonNegativeIntegerBlock(encoder, ndn::tlv::nlsr::Cost, m_cost);
-
- totalLength += encoder.prependByteArrayBlock(
- ndn::tlv::nlsr::Uri, reinterpret_cast<const uint8_t*>(m_uri.c_str()), m_uri.size());
-
- totalLength += m_name.wireEncode(encoder);
-
- totalLength += encoder.prependVarNumber(totalLength);
- totalLength += encoder.prependVarNumber(ndn::tlv::nlsr::Adjacency);
-
- return totalLength;
-}
-
-NDN_CXX_DEFINE_WIRE_ENCODE_INSTANTIATIONS(Adjacency);
-
-const ndn::Block&
-Adjacency::wireEncode() const
-{
- if (m_wire.hasWire()) {
- return m_wire;
- }
-
- ndn::EncodingEstimator estimator;
- size_t estimatedSize = wireEncode(estimator);
-
- ndn::EncodingBuffer buffer(estimatedSize, 0);
- wireEncode(buffer);
-
- m_wire = buffer.block();
-
- return m_wire;
-}
-
-void
-Adjacency::wireDecode(const ndn::Block& wire)
-{
- m_name.clear();
- m_uri = "";
- m_cost = 0;
-
- m_wire = wire;
-
- if (m_wire.type() != ndn::tlv::nlsr::Adjacency) {
- BOOST_THROW_EXCEPTION(Error("Expected Adjacency Block, but Block is of a different type: #" +
- ndn::to_string(m_wire.type())));
- }
-
- m_wire.parse();
-
- ndn::Block::element_const_iterator val = m_wire.elements_begin();
-
- if (val != m_wire.elements_end() && val->type() == ndn::tlv::Name) {
- m_name.wireDecode(*val);
- ++val;
- }
- else {
- BOOST_THROW_EXCEPTION(Error("Missing required Name field"));
- }
-
- if (val != m_wire.elements_end() && val->type() == ndn::tlv::nlsr::Uri) {
- m_uri.assign(reinterpret_cast<const char*>(val->value()), val->value_size());
- ++val;
- }
- else {
- BOOST_THROW_EXCEPTION(Error("Missing required Uri field"));
- }
-
- if (val != m_wire.elements_end() && val->type() == ndn::tlv::nlsr::Cost) {
- m_cost = ndn::readNonNegativeInteger(*val);
- ++val;
- }
- else {
- BOOST_THROW_EXCEPTION(Error("Missing required Cost field"));
- }
-}
-
-std::ostream&
-operator<<(std::ostream& os, const Adjacency& adjacency)
-{
- os << "Adjacency("
- << "Name: " << adjacency.getName() << ", "
- << "Uri: " << adjacency.getUri() << ", "
- << "Cost: " << adjacency.getCost() << ")";
-
- return os;
-}
-
-} // namespace tlv
-} // namespace nlsr
diff --git a/src/tlv/adjacency.hpp b/src/tlv/adjacency.hpp
deleted file mode 100644
index 4046e8f..0000000
--- a/src/tlv/adjacency.hpp
+++ /dev/null
@@ -1,148 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2014-2018, The University of Memphis,
- * Regents of the University of California,
- * Arizona Board of Regents.
- *
- * This file is part of NLSR (Named-data Link State Routing).
- * See AUTHORS.md for complete list of NLSR authors and contributors.
- *
- * NLSR is free software: you can redistribute it and/or modify it under the terms
- * of the GNU General Public License as published by the Free Software Foundation,
- * either version 3 of the License, or (at your option) any later version.
- *
- * NLSR is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * NLSR, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NLSR_TLV_ADJACENCY_HPP
-#define NLSR_TLV_ADJACENCY_HPP
-
-#include <ndn-cxx/util/time.hpp>
-#include <ndn-cxx/encoding/block.hpp>
-#include <ndn-cxx/encoding/encoding-buffer.hpp>
-#include <ndn-cxx/encoding/tlv.hpp>
-#include <ndn-cxx/name.hpp>
-
-namespace nlsr {
-namespace tlv {
-
-/*!
- \brief Data abstraction for Adjacency
-
- Adjacency := ADJACENCY-TYPE TLV-LENGTH
- Name
- Uri
- Cost
-
- \sa https://redmine.named-data.net/projects/nlsr/wiki/LSDB_DataSet
- */
-class Adjacency
-{
-public:
- class Error : public ndn::tlv::Error
- {
- public:
- explicit
- Error(const std::string& what)
- : ndn::tlv::Error(what)
- {
- }
- };
-
- Adjacency();
-
- explicit
- Adjacency(const ndn::Block& block);
-
- const ndn::Name&
- getName() const
- {
- return m_name;
- }
-
- Adjacency&
- setName(const ndn::Name& name)
- {
- m_name = name;
- m_wire.reset();
- return *this;
- }
-
- const std::string&
- getUri() const
- {
- return m_uri;
- }
-
- Adjacency&
- setUri(const std::string& uri)
- {
- m_uri = uri;
- m_wire.reset();
- return *this;
- }
-
- uint64_t
- getCost() const
- {
- return m_cost;
- }
-
- Adjacency&
- setCost(uint64_t cost)
- {
- m_cost = cost;
- m_wire.reset();
- return *this;
- }
-
- /*! \brief TLV-encode this object using the implementation in from TAG.
- *
- * This method TLV-encodes this Adjacency object using the
- * implementation given by TAG. Usually two implementations are
- * provided: a size estimator and a real encoder, which are used in
- * sequence to allocate the necessary block size and then encode it.
- * \sa Adjacency::wireEncode()
- */
- template<ndn::encoding::Tag TAG>
- size_t
- wireEncode(ndn::EncodingImpl<TAG>& block) const;
-
- /*! \brief Create a TLV encoding of this object.
- *
- * This function automates the process of guessing the necessary
- * size of a block containing this object, and then creating a block
- * and putting the TLV encoding into it.
- * \sa Adjacency::wireEncode(ndn::EncodingImpl<TAG>&)
- */
- const ndn::Block&
- wireEncode() const;
-
- /*! \brief Populate this object by decoding the object contained in
- * the given block.
- */
- void
- wireDecode(const ndn::Block& wire);
-
-private:
- ndn::Name m_name;
- std::string m_uri;
- uint64_t m_cost;
-
- mutable ndn::Block m_wire;
-};
-
-NDN_CXX_DECLARE_WIRE_ENCODE_INSTANTIATIONS(Adjacency);
-
-std::ostream&
-operator<<(std::ostream& os, const Adjacency& adjacency);
-
-} // namespace tlv
-} // namespace nlsr
-
-#endif // NLSR_TLV_ADJACENCY_HPP
diff --git a/src/tlv/coordinate-lsa.cpp b/src/tlv/coordinate-lsa.cpp
deleted file mode 100644
index f05b682..0000000
--- a/src/tlv/coordinate-lsa.cpp
+++ /dev/null
@@ -1,152 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2014-2019, The University of Memphis,
- * Regents of the University of California,
- * Arizona Board of Regents.
- *
- * This file is part of NLSR (Named-data Link State Routing).
- * See AUTHORS.md for complete list of NLSR authors and contributors.
- *
- * NLSR is free software: you can redistribute it and/or modify it under the terms
- * of the GNU General Public License as published by the Free Software Foundation,
- * either version 3 of the License, or (at your option) any later version.
- *
- * NLSR is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * NLSR, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "coordinate-lsa.hpp"
-#include "tlv-nlsr.hpp"
-
-#include <ndn-cxx/util/concepts.hpp>
-#include <ndn-cxx/encoding/block-helpers.hpp>
-
-namespace nlsr {
-namespace tlv {
-
-BOOST_CONCEPT_ASSERT((ndn::WireEncodable<CoordinateLsa>));
-BOOST_CONCEPT_ASSERT((ndn::WireDecodable<CoordinateLsa>));
-static_assert(std::is_base_of<ndn::tlv::Error, CoordinateLsa::Error>::value,
- "CoordinateLsa::Error must inherit from tlv::Error");
-
-CoordinateLsa::CoordinateLsa()
- : m_hyperbolicRadius(0.0)
-{
-}
-
-CoordinateLsa::CoordinateLsa(const ndn::Block& block)
-{
- wireDecode(block);
-}
-
-template<ndn::encoding::Tag TAG>
-size_t
-CoordinateLsa::wireEncode(ndn::EncodingImpl<TAG>& block) const
-{
- size_t totalLength = 0;
-
- for (auto it = m_hyperbolicAngle.rbegin(); it != m_hyperbolicAngle.rend(); ++it) {
- totalLength += ndn::encoding::prependDoubleBlock(block, ndn::tlv::nlsr::HyperbolicAngle, *it);
- }
-
- totalLength += ndn::encoding::prependDoubleBlock(block, ndn::tlv::nlsr::HyperbolicRadius, m_hyperbolicRadius);
-
- totalLength += m_lsaInfo.wireEncode(block);
-
- totalLength += block.prependVarNumber(totalLength);
- totalLength += block.prependVarNumber(ndn::tlv::nlsr::CoordinateLsa);
-
- return totalLength;
-}
-
-NDN_CXX_DEFINE_WIRE_ENCODE_INSTANTIATIONS(CoordinateLsa);
-
-const ndn::Block&
-CoordinateLsa::wireEncode() const
-{
- if (m_wire.hasWire()) {
- return m_wire;
- }
-
- ndn::EncodingEstimator estimator;
- size_t estimatedSize = wireEncode(estimator);
-
- ndn::EncodingBuffer buffer(estimatedSize, 0);
- wireEncode(buffer);
-
- m_wire = buffer.block();
-
- return m_wire;
-}
-
-void
-CoordinateLsa::wireDecode(const ndn::Block& wire)
-{
- m_hyperbolicRadius = 0.0;
- m_hyperbolicAngle.clear();
-
- m_wire = wire;
-
- if (m_wire.type() != ndn::tlv::nlsr::CoordinateLsa) {
- std::stringstream error;
- error << "Expected CoordinateLsa Block, but Block is of a different type: #"
- << m_wire.type();
- BOOST_THROW_EXCEPTION(Error(error.str()));
- }
-
- m_wire.parse();
-
- ndn::Block::element_const_iterator val = m_wire.elements_begin();
-
- if (val != m_wire.elements_end() && val->type() == ndn::tlv::nlsr::LsaInfo) {
- m_lsaInfo.wireDecode(*val);
- ++val;
- }
- else {
- BOOST_THROW_EXCEPTION(Error("Missing required LsaInfo field"));
- }
-
- if (val != m_wire.elements_end() && val->type() == ndn::tlv::nlsr::HyperbolicRadius) {
- m_hyperbolicRadius = ndn::encoding::readDouble(*val);
- ++val;
- }
- else {
- BOOST_THROW_EXCEPTION(Error("Missing required HyperbolicRadius field"));
- }
-
- for (; val != m_wire.elements_end(); ++val) {
- if (val->type() == ndn::tlv::nlsr::HyperbolicAngle) {
- m_hyperbolicAngle.push_back(ndn::encoding::readDouble(*val));
- }
- }
-}
-
-std::ostream&
-operator<<(std::ostream& os, const CoordinateLsa& coordinateLsa)
-{
- os << "CoordinateLsa("
- << coordinateLsa.getLsaInfo() << ", "
- << "HyperbolicRadius: " << coordinateLsa.getHyperbolicRadius() << ", ";
-
- os << "HyperbolicAngles: ";
- int i = 0;
- for (const auto& value: coordinateLsa.getHyperbolicAngle()) {
- if (i == 0) {
- os << value;
- }
- else {
- os << ", " << value;
- }
- ++i;
- }
- os << ")";
-
- return os;
-}
-
-} // namespace tlv
-} // namespace nlsr
diff --git a/src/tlv/coordinate-lsa.hpp b/src/tlv/coordinate-lsa.hpp
deleted file mode 100644
index 603c119..0000000
--- a/src/tlv/coordinate-lsa.hpp
+++ /dev/null
@@ -1,152 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2014-2018, The University of Memphis,
- * Regents of the University of California,
- * Arizona Board of Regents.
- *
- * This file is part of NLSR (Named-data Link State Routing).
- * See AUTHORS.md for complete list of NLSR authors and contributors.
- *
- * NLSR is free software: you can redistribute it and/or modify it under the terms
- * of the GNU General Public License as published by the Free Software Foundation,
- * either version 3 of the License, or (at your option) any later version.
- *
- * NLSR is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * NLSR, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NLSR_TLV_COORDINATE_LSA_HPP
-#define NLSR_TLV_COORDINATE_LSA_HPP
-
-#include "lsa-info.hpp"
-
-#include <ndn-cxx/util/time.hpp>
-#include <ndn-cxx/encoding/block.hpp>
-#include <ndn-cxx/encoding/encoding-buffer.hpp>
-#include <ndn-cxx/encoding/tlv.hpp>
-#include <ndn-cxx/name.hpp>
-
-namespace nlsr {
-namespace tlv {
-
-/*!
- \brief Data abstraction for CoordinateLsa
-
- CoordinateLsa := COORDINATE-LSA-TYPE TLV-LENGTH
- LsaInfo
- HyperbolicRadius
- HyperbolicAngle+
-
- \sa https://redmine.named-data.net/projects/nlsr/wiki/LSDB_DataSet
- */
-class CoordinateLsa
-{
-public:
- class Error : public ndn::tlv::Error
- {
- public:
- explicit
- Error(const std::string& what)
- : ndn::tlv::Error(what)
- {
- }
- };
-
- CoordinateLsa();
-
- explicit
- CoordinateLsa(const ndn::Block& block);
-
- const LsaInfo&
- getLsaInfo() const
- {
- return m_lsaInfo;
- }
-
- CoordinateLsa&
- setLsaInfo(const LsaInfo& lsaInfo)
- {
- m_lsaInfo = lsaInfo;
- m_wire.reset();
- return *this;
- }
-
- double
- getHyperbolicRadius() const
- {
- return m_hyperbolicRadius;
- }
-
- CoordinateLsa&
- setHyperbolicRadius(double hyperbolicRadius)
- {
- m_hyperbolicRadius = hyperbolicRadius;
- m_wire.reset();
- return *this;
- }
-
- const std::vector<double>
- getHyperbolicAngle() const
- {
- return m_hyperbolicAngle;
- }
-
- CoordinateLsa&
- setHyperbolicAngle(const std::vector<double>& hyperbolicAngle)
- {
- m_hyperbolicAngle = hyperbolicAngle;
- m_wire.reset();
- return *this;
- }
-
- /*! \brief Encodes the hyperbolic coordinates and some info using the method in TAG.
- *
- * This function will TLV-format the hyperbolic coordinates objects and some LSA
- * info using the implementation speciifed by TAG. Usually this is
- * called with an estimator first to guess how long the buffer needs
- * to be, then with an encoder to do the real work. This process is
- * automated by the other wireEncode.
- * \sa CoordinateLsa::wireEncode()
- */
- template<ndn::encoding::Tag TAG>
- size_t
- wireEncode(ndn::EncodingImpl<TAG>& block) const;
-
- /*! \brief Create a TLV encoding of this object.
- *
- * Create a block containing the TLV encoding of this object. That
- * involves two steps: estimating the size that the information will
- * take up, and then creating a buffer of that size and encoding the
- * information into it. Both steps are accomplished by
- * CoordinateLsa::wireEncode(ndn::EncodingImpl<TAG>&)
- */
- const ndn::Block&
- wireEncode() const;
-
- /*! \brief Populate this object by decoding the one contained in the
- * given block.
- */
- void
- wireDecode(const ndn::Block& wire);
-
-private:
- LsaInfo m_lsaInfo;
- double m_hyperbolicRadius;
- std::vector<double> m_hyperbolicAngle;
-
- mutable ndn::Block m_wire;
-};
-
-NDN_CXX_DECLARE_WIRE_ENCODE_INSTANTIATIONS(CoordinateLsa);
-
-std::ostream&
-operator<<(std::ostream& os, const CoordinateLsa& coordinateLsa);
-
-} // namespace tlv
-} // namespace nlsr
-
-#endif // NLSR_TLV_COORDINATE_LSA_HPP
diff --git a/src/tlv/lsa-info.cpp b/src/tlv/lsa-info.cpp
deleted file mode 100644
index 5f83863..0000000
--- a/src/tlv/lsa-info.cpp
+++ /dev/null
@@ -1,186 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2014-2018, The University of Memphis,
- * Regents of the University of California,
- * Arizona Board of Regents.
- *
- * This file is part of NLSR (Named-data Link State Routing).
- * See AUTHORS.md for complete list of NLSR authors and contributors.
- *
- * NLSR is free software: you can redistribute it and/or modify it under the terms
- * of the GNU General Public License as published by the Free Software Foundation,
- * either version 3 of the License, or (at your option) any later version.
- *
- * NLSR is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * NLSR, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "lsa-info.hpp"
-#include "tlv-nlsr.hpp"
-
-#include <ndn-cxx/util/concepts.hpp>
-#include <ndn-cxx/encoding/block-helpers.hpp>
-
-namespace nlsr {
-namespace tlv {
-
-BOOST_CONCEPT_ASSERT((ndn::WireEncodable<LsaInfo>));
-BOOST_CONCEPT_ASSERT((ndn::WireDecodable<LsaInfo>));
-static_assert(std::is_base_of<ndn::tlv::Error, LsaInfo::Error>::value,
- "LsaInfo::Error must inherit from tlv::Error");
-
-const ndn::time::milliseconds LsaInfo::INFINITE_EXPIRATION_PERIOD(ndn::time::milliseconds::max());
-
-LsaInfo::LsaInfo()
- : m_sequenceNumber(0)
- , m_expirationPeriod(INFINITE_EXPIRATION_PERIOD)
- , m_hasInfiniteExpirationPeriod(true)
-{
-}
-
-LsaInfo::LsaInfo(const ndn::Block& block)
-{
- wireDecode(block);
-}
-
-template<ndn::encoding::Tag TAG>
-size_t
-LsaInfo::wireEncode(ndn::EncodingImpl<TAG>& encoder) const
-{
- size_t totalLength = 0;
-
- // Absence of an ExpirationPeriod signifies non-expiration
- if (!m_hasInfiniteExpirationPeriod) {
- totalLength += prependNonNegativeIntegerBlock(encoder,
- ndn::tlv::nlsr::ExpirationPeriod,
- m_expirationPeriod.count());
- }
-
- totalLength += prependNonNegativeIntegerBlock(encoder,
- ndn::tlv::nlsr::SequenceNumber,
- m_sequenceNumber);
-
- totalLength += prependNestedBlock(encoder, ndn::tlv::nlsr::OriginRouter, m_originRouter);
-
- totalLength += encoder.prependVarNumber(totalLength);
- totalLength += encoder.prependVarNumber(ndn::tlv::nlsr::LsaInfo);
-
- return totalLength;
-}
-
-NDN_CXX_DEFINE_WIRE_ENCODE_INSTANTIATIONS(LsaInfo);
-
-const ndn::Block&
-LsaInfo::wireEncode() const
-{
- if (m_wire.hasWire()) {
- return m_wire;
- }
-
- ndn::EncodingEstimator estimator;
- size_t estimatedSize = wireEncode(estimator);
-
- ndn::EncodingBuffer buffer(estimatedSize, 0);
- wireEncode(buffer);
-
- m_wire = buffer.block();
-
- return m_wire;
-}
-
-void
-LsaInfo::wireDecode(const ndn::Block& wire)
-{
- m_originRouter.clear();
- m_sequenceNumber = 0;
- m_expirationPeriod = ndn::time::milliseconds::min();
-
- m_wire = wire;
-
- if (m_wire.type() != ndn::tlv::nlsr::LsaInfo) {
- std::stringstream error;
- error << "Expected LsaInfo Block, but Block is of a different type: #"
- << m_wire.type();
- BOOST_THROW_EXCEPTION(Error(error.str()));
- }
-
- m_wire.parse();
-
- ndn::Block::element_const_iterator val = m_wire.elements_begin();
-
- if (val != m_wire.elements_end() && val->type() == ndn::tlv::nlsr::OriginRouter) {
- val->parse();
- ndn::Block::element_const_iterator it = val->elements_begin();
-
- if (it != val->elements_end() && it->type() == ndn::tlv::Name) {
- m_originRouter.wireDecode(*it);
- }
- else {
- BOOST_THROW_EXCEPTION(Error("OriginRouter: Missing required Name field"));
- }
-
- ++val;
- }
- else {
- BOOST_THROW_EXCEPTION(Error("Missing required OriginRouter field"));
- }
-
- if (val != m_wire.elements_end() && val->type() == ndn::tlv::nlsr::SequenceNumber) {
- m_sequenceNumber = ndn::readNonNegativeInteger(*val);
- ++val;
- }
- else {
- BOOST_THROW_EXCEPTION(Error("Missing required SequenceNumber field"));
- }
-
- if (val != m_wire.elements_end() && val->type() == ndn::tlv::nlsr::ExpirationPeriod) {
- m_expirationPeriod = ndn::time::milliseconds(ndn::readNonNegativeInteger(*val));
- m_hasInfiniteExpirationPeriod = false;
- }
- else {
- m_expirationPeriod = INFINITE_EXPIRATION_PERIOD;
- m_hasInfiniteExpirationPeriod = true;
- }
-}
-
-std::ostream&
-operator<<(std::ostream& os, const LsaInfo& lsaInfo)
-{
- os << "LsaInfo("
- << "OriginRouter: " << lsaInfo.getOriginRouter() << ", "
- << "SequenceNumber: " << lsaInfo.getSequenceNumber() << ", ";
-
- if (!lsaInfo.hasInfiniteExpirationPeriod()) {
- os << "ExpirationPeriod: " << lsaInfo.getExpirationPeriod();
- }
- else {
- os << "ExpirationPeriod: Infinity";
- }
-
- os << ")";
-
- return os;
-}
-
-std::shared_ptr<LsaInfo>
-makeLsaInfo(const Lsa& lsa)
-{
- std::shared_ptr<LsaInfo> lsaInfo = std::make_shared<LsaInfo>();
-
- lsaInfo->setOriginRouter(lsa.getOrigRouter());
- lsaInfo->setSequenceNumber(lsa.getLsSeqNo());
-
- ndn::time::system_clock::duration duration
- = lsa.getExpirationTimePoint() - ndn::time::system_clock::now();
-
- lsaInfo->setExpirationPeriod(ndn::time::duration_cast<ndn::time::milliseconds>(duration));
-
- return lsaInfo;
-}
-
-} // namespace tlv
-} // namespace nlsr
diff --git a/src/tlv/lsa-info.hpp b/src/tlv/lsa-info.hpp
deleted file mode 100644
index 291c428..0000000
--- a/src/tlv/lsa-info.hpp
+++ /dev/null
@@ -1,168 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2014-2018, The University of Memphis,
- * Regents of the University of California,
- * Arizona Board of Regents.
- *
- * This file is part of NLSR (Named-data Link State Routing).
- * See AUTHORS.md for complete list of NLSR authors and contributors.
- *
- * NLSR is free software: you can redistribute it and/or modify it under the terms
- * of the GNU General Public License as published by the Free Software Foundation,
- * either version 3 of the License, or (at your option) any later version.
- *
- * NLSR is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * NLSR, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NLSR_TLV_LSA_INFO_HPP
-#define NLSR_TLV_LSA_INFO_HPP
-
-#include "lsa.hpp"
-
-#include <ndn-cxx/util/time.hpp>
-#include <ndn-cxx/encoding/block.hpp>
-#include <ndn-cxx/encoding/encoding-buffer.hpp>
-#include <ndn-cxx/encoding/tlv.hpp>
-#include <ndn-cxx/name.hpp>
-#include <boost/throw_exception.hpp>
-
-namespace nlsr {
-namespace tlv {
-
-/*!
- \brief Data abstraction for LsaInfo
-
- LsaInfo := LSA-TYPE TLV-LENGTH
- OriginRouter
- SequenceNumber
- ExpirationPeriod?
-
- \sa https://redmine.named-data.net/projects/nlsr/wiki/LSDB_DataSet
- */
-class LsaInfo
-{
-public:
- class Error : public ndn::tlv::Error
- {
- public:
- explicit
- Error(const std::string& what)
- : ndn::tlv::Error(what)
- {
- }
- };
-
- LsaInfo();
-
- explicit
- LsaInfo(const ndn::Block& block);
-
- const ndn::Name&
- getOriginRouter() const
- {
- return m_originRouter;
- }
-
- LsaInfo&
- setOriginRouter(const ndn::Name& name)
- {
- m_originRouter = name;
- m_wire.reset();
- return *this;
- }
-
- uint64_t
- getSequenceNumber() const
- {
- return m_sequenceNumber;
- }
-
- LsaInfo&
- setSequenceNumber(uint64_t sequenceNumber)
- {
- m_sequenceNumber = sequenceNumber;
- m_wire.reset();
- return *this;
- }
-
- static const ndn::time::milliseconds INFINITE_EXPIRATION_PERIOD;
-
- const ndn::time::milliseconds&
- getExpirationPeriod() const
- {
- return m_expirationPeriod;
- }
-
- LsaInfo&
- setExpirationPeriod(const ndn::time::milliseconds& expirationPeriod)
- {
- m_expirationPeriod = expirationPeriod;
-
- m_hasInfiniteExpirationPeriod = (m_expirationPeriod == INFINITE_EXPIRATION_PERIOD);
-
- m_wire.reset();
- return *this;
- }
-
- bool
- hasInfiniteExpirationPeriod() const
- {
- return m_hasInfiniteExpirationPeriod;
- }
-
- /*! \brief Encodes LSA info using the method in TAG.
- *
- * This function will TLV-format LSA info using the implementation
- * speciifed by TAG. Usually this is called with an estimator first
- * to guess how long the buffer needs to be, then with an encoder to
- * do the real work. This process is automated by the other
- * wireEncode.
- * \sa LsaInfo::wireEncode()
- */
- template<ndn::encoding::Tag TAG>
- size_t
- wireEncode(ndn::EncodingImpl<TAG>& block) const;
-
- /*! \brief Create a TLV encoding of this object.
- *
- * Create a block containing the TLV encoding of this object. That
- * involves two steps: estimating the size that the information will
- * take up, and then creating a buffer of that size and encoding the
- * information into it. Both steps are accomplished by
- * LsaInfo::wireEncode(ndn::EncodingImpl<TAG>&)
- */
- const ndn::Block&
- wireEncode() const;
-
- /*! \brief Populate this object by decoding the one contained in the
- * given block.
- */
- void
- wireDecode(const ndn::Block& wire);
-
-private:
- ndn::Name m_originRouter;
- uint64_t m_sequenceNumber;
- ndn::time::milliseconds m_expirationPeriod;
- bool m_hasInfiniteExpirationPeriod;
-
- mutable ndn::Block m_wire;
-};
-
-NDN_CXX_DECLARE_WIRE_ENCODE_INSTANTIATIONS(LsaInfo);
-
-std::ostream&
-operator<<(std::ostream& os, const LsaInfo& lsaInfo);
-
-std::shared_ptr<LsaInfo>
-makeLsaInfo(const Lsa& lsa);
-
-} // namespace tlv
-} // namespace nlsr
-
-#endif // NLSR_TLV_LSA_INFO_HPP
diff --git a/src/tlv/name-lsa.cpp b/src/tlv/name-lsa.cpp
deleted file mode 100644
index 82f3860..0000000
--- a/src/tlv/name-lsa.cpp
+++ /dev/null
@@ -1,138 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2014-2018, The University of Memphis,
- * Regents of the University of California,
- * Arizona Board of Regents.
- *
- * This file is part of NLSR (Named-data Link State Routing).
- * See AUTHORS.md for complete list of NLSR authors and contributors.
- *
- * NLSR is free software: you can redistribute it and/or modify it under the terms
- * of the GNU General Public License as published by the Free Software Foundation,
- * either version 3 of the License, or (at your option) any later version.
- *
- * NLSR is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * NLSR, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "name-lsa.hpp"
-#include "tlv-nlsr.hpp"
-
-#include <ndn-cxx/util/concepts.hpp>
-#include <ndn-cxx/encoding/block-helpers.hpp>
-
-namespace nlsr {
-namespace tlv {
-
-BOOST_CONCEPT_ASSERT((ndn::WireEncodable<NameLsa>));
-BOOST_CONCEPT_ASSERT((ndn::WireDecodable<NameLsa>));
-static_assert(std::is_base_of<ndn::tlv::Error, NameLsa::Error>::value,
- "NameLsa::Error must inherit from tlv::Error");
-
-NameLsa::NameLsa()
- : m_hasNames(false)
-{
-}
-
-NameLsa::NameLsa(const ndn::Block& block)
-{
- wireDecode(block);
-}
-
-template<ndn::encoding::Tag TAG>
-size_t
-NameLsa::wireEncode(ndn::EncodingImpl<TAG>& block) const
-{
- size_t totalLength = 0;
-
- for (std::list<ndn::Name>::const_reverse_iterator it = m_names.rbegin();
- it != m_names.rend(); ++it) {
- totalLength += it->wireEncode(block);
- }
-
- totalLength += m_lsaInfo.wireEncode(block);
-
- totalLength += block.prependVarNumber(totalLength);
- totalLength += block.prependVarNumber(ndn::tlv::nlsr::NameLsa);
-
- return totalLength;
-}
-
-NDN_CXX_DEFINE_WIRE_ENCODE_INSTANTIATIONS(NameLsa);
-
-const ndn::Block&
-NameLsa::wireEncode() const
-{
- if (m_wire.hasWire()) {
- return m_wire;
- }
-
- ndn::EncodingEstimator estimator;
- size_t estimatedSize = wireEncode(estimator);
-
- ndn::EncodingBuffer buffer(estimatedSize, 0);
- wireEncode(buffer);
-
- m_wire = buffer.block();
-
- return m_wire;
-}
-
-void
-NameLsa::wireDecode(const ndn::Block& wire)
-{
- m_hasNames = false;
- m_names.clear();
-
- m_wire = wire;
-
- if (m_wire.type() != ndn::tlv::nlsr::NameLsa) {
- BOOST_THROW_EXCEPTION(Error("Expected NameLsa Block, but Block is of a different type: #" +
- ndn::to_string(m_wire.type())));
- }
-
- m_wire.parse();
-
- ndn::Block::element_const_iterator val = m_wire.elements_begin();
-
- if (val != m_wire.elements_end() && val->type() == ndn::tlv::nlsr::LsaInfo) {
- m_lsaInfo.wireDecode(*val);
- ++val;
- }
- else {
- BOOST_THROW_EXCEPTION(Error("Missing required LsaInfo field"));
- }
-
- for (; val != m_wire.elements_end(); ++val) {
- if (val->type() == ndn::tlv::Name) {
- m_names.push_back(ndn::Name(*val));
- m_hasNames = true;
- }
- else {
- BOOST_THROW_EXCEPTION(Error("Expected Name Block, but Block is of a different type: #" +
- ndn::to_string(m_wire.type())));
- }
- }
-}
-
-std::ostream&
-operator<<(std::ostream& os, const NameLsa& nameLsa)
-{
- os << "NameLsa("
- << nameLsa.getLsaInfo();
-
- for (const auto& name : nameLsa) {
- os << ", Name: " << name;
- }
-
- os << ")";
-
- return os;
-}
-
-} // namespace tlv
-} // namespace nlsr
diff --git a/src/tlv/name-lsa.hpp b/src/tlv/name-lsa.hpp
deleted file mode 100644
index 0278631..0000000
--- a/src/tlv/name-lsa.hpp
+++ /dev/null
@@ -1,175 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2014-2018, The University of Memphis,
- * Regents of the University of California,
- * Arizona Board of Regents.
- *
- * This file is part of NLSR (Named-data Link State Routing).
- * See AUTHORS.md for complete list of NLSR authors and contributors.
- *
- * NLSR is free software: you can redistribute it and/or modify it under the terms
- * of the GNU General Public License as published by the Free Software Foundation,
- * either version 3 of the License, or (at your option) any later version.
- *
- * NLSR is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * NLSR, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NLSR_TLV_NAME_LSA_HPP
-#define NLSR_TLV_NAME_LSA_HPP
-
-#include "lsa-info.hpp"
-
-#include <ndn-cxx/util/time.hpp>
-#include <ndn-cxx/encoding/block.hpp>
-#include <ndn-cxx/encoding/encoding-buffer.hpp>
-#include <ndn-cxx/encoding/tlv.hpp>
-#include <ndn-cxx/name.hpp>
-
-#include <list>
-
-namespace nlsr {
-namespace tlv {
-
-/*!
- \brief Data abstraction for NameLsa
-
- NameLsa := NAME-LSA-TYPE TLV-LENGTH
- LsaInfo
- Name+
-
- \sa https://redmine.named-data.net/projects/nlsr/wiki/LSDB_DataSet
- */
-class NameLsa
-{
-public:
- class Error : public ndn::tlv::Error
- {
- public:
- explicit
- Error(const std::string& what)
- : ndn::tlv::Error(what)
- {
- }
- };
-
- typedef std::list<ndn::Name> NameList;
- typedef NameList::const_iterator iterator;
-
- NameLsa();
-
- explicit
- NameLsa(const ndn::Block& block);
-
- const LsaInfo&
- getLsaInfo() const
- {
- return m_lsaInfo;
- }
-
- NameLsa&
- setLsaInfo(const LsaInfo& lsaInfo)
- {
- m_lsaInfo = lsaInfo;
- m_wire.reset();
- return *this;
- }
-
- bool
- hasNames() const
- {
- return m_hasNames;
- }
-
- const std::list<ndn::Name>&
- getNames() const
- {
- return m_names;
- }
-
- NameLsa&
- addName(const ndn::Name& name)
- {
- m_names.push_back(name);
- m_wire.reset();
- m_hasNames = true;
- return *this;
- }
-
- NameLsa&
- clearNames()
- {
- m_names.clear();
- m_hasNames = false;
- return *this;
- }
-
- /*! \brief Encodes the Name objects and some info using the method in TAG.
- *
- * This function will TLV-format the Name objects and some LSA
- * info using the implementation speciifed by TAG. Usually this is
- * called with an estimator first to guess how long the buffer needs
- * to be, then with an encoder to do the real work. This process is
- * automated by the other wireEncode.
- * \sa NameLsa::wireEncode()
- */
- template<ndn::encoding::Tag TAG>
- size_t
- wireEncode(ndn::EncodingImpl<TAG>& block) const;
-
- /*! \brief Create a TLV encoding of this object.
- *
- * Create a block containing the TLV encoding of this object. That
- * involves two steps: estimating the size that the information will
- * take up, and then creating a buffer of that size and encoding the
- * information into it. Both steps are accomplished by
- * NameLsa::wireEncode(ndn::EncodingImpl<TAG>&)
- */
- const ndn::Block&
- wireEncode() const;
-
- /*! \brief Populate this object by decoding the one contained in the
- * given block.
- */
- void
- wireDecode(const ndn::Block& wire);
-
- iterator
- begin() const;
-
- iterator
- end() const;
-
-private:
- LsaInfo m_lsaInfo;
- bool m_hasNames;
- NameList m_names;
-
- mutable ndn::Block m_wire;
-};
-
-NDN_CXX_DECLARE_WIRE_ENCODE_INSTANTIATIONS(NameLsa);
-
-inline NameLsa::iterator
-NameLsa::begin() const
-{
- return m_names.begin();
-}
-
-inline NameLsa::iterator
-NameLsa::end() const
-{
- return m_names.end();
-}
-
-std::ostream&
-operator<<(std::ostream& os, const NameLsa& nameLsa);
-
-} // namespace tlv
-} // namespace nlsr
-
-#endif // NLSR_TLV_NAME_LSA_HPP
diff --git a/src/tlv/nexthop.cpp b/src/tlv/nexthop.cpp
index d05473e..508bf1a 100644
--- a/src/tlv/nexthop.cpp
+++ b/src/tlv/nexthop.cpp
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
- * Copyright (c) 2014-2019, The University of Memphis,
+ * Copyright (c) 2014-2020, The University of Memphis,
* Regents of the University of California,
* Arizona Board of Regents.
*
@@ -21,7 +21,6 @@
#include "nexthop.hpp"
#include "tlv-nlsr.hpp"
-#include "coordinate-lsa.hpp"
#include <ndn-cxx/util/concepts.hpp>
#include <ndn-cxx/encoding/block-helpers.hpp>
diff --git a/src/tlv/routing-table-entry.cpp b/src/tlv/routing-table-entry.cpp
index c8e6332..255d418 100644
--- a/src/tlv/routing-table-entry.cpp
+++ b/src/tlv/routing-table-entry.cpp
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/**
- * Copyright (c) 2014-2018, The University of Memphis,
+ * Copyright (c) 2014-2020, The University of Memphis,
* Regents of the University of California,
* Arizona Board of Regents.
*
@@ -80,7 +80,7 @@
totalLength += m_des.wireEncode(block);
totalLength += block.prependVarNumber(totalLength);
- totalLength += block.prependVarNumber(ndn::tlv::nlsr::RouteTableEntry);
+ totalLength += block.prependVarNumber(ndn::tlv::nlsr::RoutingTableEntry);
return totalLength;
}
@@ -113,7 +113,7 @@
m_wire = wire;
- if (m_wire.type() != ndn::tlv::nlsr::RouteTableEntry) {
+ if (m_wire.type() != ndn::tlv::nlsr::RoutingTableEntry) {
std::stringstream error;
error << "Expected RoutingTable Block, but Block is of a different type: #"
<< m_wire.type();
diff --git a/src/tlv/routing-table-status.cpp b/src/tlv/routing-table-status.cpp
index a35f88c..00d2c78 100644
--- a/src/tlv/routing-table-status.cpp
+++ b/src/tlv/routing-table-status.cpp
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/**
- * Copyright (c) 2014-2019, The University of Memphis,
+ * Copyright (c) 2014-2020, The University of Memphis,
* Regents of the University of California,
* Arizona Board of Regents.
*
@@ -123,7 +123,7 @@
ndn::Block::element_const_iterator val = m_wire.elements_begin();
- for (; val != m_wire.elements_end() && val->type() == ndn::tlv::nlsr::RouteTableEntry; ++val) {
+ for (; val != m_wire.elements_end() && val->type() == ndn::tlv::nlsr::RoutingTableEntry; ++val) {
m_routingtables.push_back(RoutingTable(*val));
m_hasRoutingtable = true;
}
diff --git a/src/tlv/tlv-nlsr.hpp b/src/tlv/tlv-nlsr.hpp
index 265b2c6..e7d2253 100644
--- a/src/tlv/tlv-nlsr.hpp
+++ b/src/tlv/tlv-nlsr.hpp
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
- * Copyright (c) 2014-2019, The University of Memphis,
+ * Copyright (c) 2014-2020, The University of Memphis,
* Regents of the University of California,
* Arizona Board of Regents.
*
@@ -34,24 +34,23 @@
* used in the LSDB Status Dataset.
*/
enum {
- LsaInfo = 128,
- OriginRouter = 129,
- SequenceNumber = 130,
- AdjacencyLsa = 131,
- Adjacency = 132,
- CoordinateLsa = 133,
- CostDouble = 134,
- HyperbolicRadius = 135,
- HyperbolicAngle = 136,
- NameLsa = 137,
- LsdbStatus = 138,
- ExpirationPeriod = 139,
- Cost = 140,
- Uri = 141,
- Destination = 142,
- NextHop = 143,
- RoutingTable = 144,
- RouteTableEntry = 145,
+ Lsa = 128,
+ SequenceNumber = 130,
+ AdjacencyLsa = 131,
+ Adjacency = 132,
+ CoordinateLsa = 133,
+ CostDouble = 134,
+ HyperbolicRadius = 135,
+ HyperbolicAngle = 136,
+ NameLsa = 137,
+ LsdbStatus = 138,
+ ExpirationTime = 139,
+ Cost = 140,
+ Uri = 141,
+ Destination = 142,
+ NextHop = 143,
+ RoutingTable = 144,
+ RoutingTableEntry = 145
};
} // namespace nlsr