28 const ndn::time::system_clock::time_point& timepoint,
30 :
Lsa(originRouter, seqNo, timepoint)
33 for (
const auto& adjacent : adl.
getAdjList()) {
48 return m_adl == alsa.
getAdl();
51 template<ndn::encoding::Tag TAG>
55 size_t totalLength = 0;
58 for (
auto it = list.rbegin(); it != list.rend(); ++it) {
59 totalLength += it->wireEncode(block);
64 totalLength += block.prependVarNumber(totalLength);
79 ndn::EncodingEstimator estimator;
82 ndn::EncodingBuffer buffer(estimatedSize, 0);
101 auto val =
m_wire.elements_begin();
108 NDN_THROW(
Error(
"Missing required Lsa field"));
112 for (; val !=
m_wire.elements_end(); ++val) {
117 NDN_THROW(
Error(
"Adjacency", val->type()));
126 std::ostringstream os;
128 os <<
" Adjacent(s):\n";
130 int adjacencyIndex = 0;
132 for (
const auto& adjacency : m_adl) {
133 os <<
" Adjacent " << adjacencyIndex++
134 <<
": (name=" << adjacency.getName()
135 <<
", uri=" << adjacency.getFaceUri()
136 <<
", cost=" << adjacency.getLinkCost() <<
")\n";
142 std::tuple<bool, std::list<ndn::Name>, std::list<ndn::Name>>
145 auto alsa = std::static_pointer_cast<AdjLsa>(lsa);
148 for (
const auto& adjacent : alsa->getAdl()) {
151 return {
true, std::list<ndn::Name>{}, std::list<ndn::Name>{}};
153 return {
false, std::list<ndn::Name>{}, std::list<ndn::Name>{}};
Data abstraction for AdjLsa AdjacencyLsa := ADJACENCY-LSA-TYPE TLV-LENGTH Lsa Adjacency*.
std::tuple< bool, std::list< ndn::Name >, std::list< ndn::Name > > update(const std::shared_ptr< Lsa > &lsa) override
const ndn::Block & wireEncode() const override
void wireDecode(const ndn::Block &wire)
bool isEqualContent(const AdjLsa &alsa) const
void addAdjacent(Adjacent adj)
std::string toString() const override
const AdjacencyList & getAdl() const
bool insert(const Adjacent &adjacent)
std::list< Adjacent > & getAdjList()
A neighbor reachable over a Face.
Data abstraction for Lsa Lsa := LSA-TYPE TLV-LENGTH Name SequenceNumber ExpirationTimePoint.
virtual const ndn::Block & wireEncode() const =0
std::string getString() const
void wireDecode(const ndn::Block &wire)
Copyright (c) 2014-2020, The University of Memphis, Regents of the University of California.
std::ostream & operator<<(std::ostream &os, const Adjacent &adjacent)
NDN_CXX_DEFINE_WIRE_ENCODE_INSTANTIATIONS(Adjacent)