35 #include <ndn-cxx/face.hpp> 36 #include <ndn-cxx/mgmt/nfd/control-response.hpp> 37 #include <ndn-cxx/util/regex.hpp> 49 ndn::mgmt::Dispatcher& localHostDispatcher,
50 ndn::mgmt::Dispatcher& routerNameDispatcher,
52 ndn::KeyChain& keyChain)
54 , m_localhostDispatcher(localHostDispatcher)
55 , m_routerNameDispatcher(routerNameDispatcher)
58 setDispatcher(m_localhostDispatcher);
59 setDispatcher(m_routerNameDispatcher);
63 LsdbDatasetInterestHandler::setDispatcher(ndn::mgmt::Dispatcher& dispatcher)
65 dispatcher.addStatusDataset(ADJACENCIES_DATASET,
66 ndn::mgmt::makeAcceptAllAuthorization(),
67 std::bind(&LsdbDatasetInterestHandler::publishAdjStatus,
this, _1, _2, _3));
68 dispatcher.addStatusDataset(COORDINATES_DATASET,
69 ndn::mgmt::makeAcceptAllAuthorization(),
70 std::bind(&LsdbDatasetInterestHandler::publishCoordinateStatus,
this, _1, _2, _3));
71 dispatcher.addStatusDataset(NAMES_DATASET,
72 ndn::mgmt::makeAcceptAllAuthorization(),
73 std::bind(&LsdbDatasetInterestHandler::publishNameStatus,
this, _1, _2, _3));
74 dispatcher.addStatusDataset(LISTS_DATASET,
75 ndn::mgmt::makeAcceptAllAuthorization(),
76 std::bind(&LsdbDatasetInterestHandler::publishAllStatus,
this, _1, _2, _3));
80 LsdbDatasetInterestHandler::publishAdjStatus(
const ndn::Name& topPrefix,
const ndn::Interest& interest,
81 ndn::mgmt::StatusDatasetContext& context)
85 auto lsaRange = std::make_pair<std::list<AdjLsa>::const_iterator,
86 std::list<AdjLsa>::const_iterator>(
88 for (
auto lsa = lsaRange.first; lsa != lsaRange.second; lsa++) {
93 for (
const Adjacent& adj : lsa->getAdl().getAdjList()) {
96 tlvAdj.
setUri(adj.getFaceUri().toString());
97 tlvAdj.
setCost(adj.getLinkCost());
101 context.append(wire);
107 LsdbDatasetInterestHandler::publishCoordinateStatus(
const ndn::Name& topPrefix,
const ndn::Interest& interest,
108 ndn::mgmt::StatusDatasetContext& context)
110 auto lsaRange = std::make_pair<std::list<CoordinateLsa>::const_iterator,
111 std::list<CoordinateLsa>::const_iterator>(
115 for (
auto lsa = lsaRange.first; lsa != lsaRange.second; lsa++) {
124 context.append(wire);
130 LsdbDatasetInterestHandler::publishNameStatus(
const ndn::Name& topPrefix,
const ndn::Interest& interest,
131 ndn::mgmt::StatusDatasetContext& context)
133 auto lsaRange = std::make_pair<std::list<NameLsa>::const_iterator, std::list<NameLsa>::const_iterator>(
136 for (
auto lsa = lsaRange.first; lsa != lsaRange.second; lsa++) {
142 for (
const ndn::Name& name : lsa->getNpl().getNames()) {
147 context.append(wire);
153 LsdbDatasetInterestHandler::publishAllStatus(
const ndn::Name& topPrefix,
const ndn::Interest& interest,
154 ndn::mgmt::StatusDatasetContext& context)
166 for (
const tlv::NameLsa& tlvLsa : getTlvLsas<tlv::NameLsa>(m_lsdb)) {
169 const ndn::Block& wire = lsdbStatus.
wireEncode();
170 context.append(wire);
174 template<> std::list<tlv::AdjacencyLsa>
175 getTlvLsas<tlv::AdjacencyLsa>(
const Lsdb& lsdb)
177 std::list<tlv::AdjacencyLsa> lsas;
179 auto lsaRange = std::make_pair<std::list<AdjLsa>::const_iterator,
180 std::list<AdjLsa>::const_iterator>(
181 lsdb.getAdjLsdb().cbegin(), lsdb.getAdjLsdb().cend());
182 for (
auto lsa = lsaRange.first; lsa != lsaRange.second; lsa++) {
188 for (
const Adjacent& adj : lsa->getAdl().getAdjList()) {
191 tlvAdj.
setUri(adj.getFaceUri().toString());
192 tlvAdj.
setCost(adj.getLinkCost());
196 lsas.push_back(tlvLsa);
203 template<> std::list<tlv::CoordinateLsa>
204 getTlvLsas<tlv::CoordinateLsa>(
const Lsdb& lsdb)
206 std::list<tlv::CoordinateLsa> lsas;
208 auto lsaRange = std::make_pair<std::list<CoordinateLsa>::const_iterator,
209 std::list<CoordinateLsa>::const_iterator>(
210 lsdb.getCoordinateLsdb().cbegin(), lsdb.getCoordinateLsdb().cend());
212 for (
auto lsa = lsaRange.first; lsa != lsaRange.second; lsa++) {
221 lsas.push_back(tlvLsa);
228 template<> std::list<tlv::NameLsa>
229 getTlvLsas<tlv::NameLsa>(
const Lsdb& lsdb)
231 std::list<tlv::NameLsa> lsas;
233 auto lsaRange = std::make_pair<std::list<NameLsa>::const_iterator,
234 std::list<NameLsa>::const_iterator>(
235 lsdb.getNameLsdb().cbegin(), lsdb.getNameLsdb().cend());
236 for (
auto lsa = lsaRange.first; lsa != lsaRange.second; lsa++) {
242 for (
const ndn::Name& name : lsa->getNpl().getNames()) {
246 lsas.push_back(tlvLsa);
Adjacency & setCost(uint64_t cost)
const std::list< NameLsa > & getNameLsdb() const
LsdbStatus & addNameLsa(const NameLsa &nameLsa)
CoordinateLsa & setHyperbolicAngle(const std::vector< double > &hyperbolicAngle)
size_t wireEncode(ndn::EncodingImpl< TAG > &block) const
Encodes the Adjacent objects and some info using the method in TAG.
AdjacencyLsa & addAdjacency(const Adjacency &adjacency)
NameLsa & addName(const ndn::Name &name)
LsdbDatasetInterestHandler(Lsdb &lsdb, ndn::mgmt::Dispatcher &localHostDispatcher, ndn::mgmt::Dispatcher &routerNameDispatcher, ndn::Face &face, ndn::KeyChain &keyChain)
size_t wireEncode(ndn::EncodingImpl< TAG > &block) const
Encodes the Name objects and some info using the method in TAG.
const ndn::PartialName COORDINATES_DATASET
#define NLSR_LOG_DEBUG(x)
NameLsa & setLsaInfo(const LsaInfo &lsaInfo)
size_t wireEncode(ndn::EncodingImpl< TAG > &block) const
Encodes the LSA objects and some info for each LSA using the method in TAG.
Copyright (c) 2014-2017, The University of Memphis, Regents of the University of California.
Data abstraction for CoordinateLsa.
CoordinateLsa & setHyperbolicRadius(double hyperbolicRadius)
#define INIT_LOGGER(name)
const std::list< CoordinateLsa > & getCoordinateLsdb() const
Adjacency & setUri(const std::string &uri)
const ndn::PartialName ADJACENCIES_DATASET
const ndn::PartialName LISTS_DATASET
size_t wireEncode(ndn::EncodingImpl< TAG > &block) const
Encodes the hyperbolic coordinates and some info using the method in TAG.
std::shared_ptr< LsaInfo > makeLsaInfo(const Lsa &lsa)
AdjacencyLsa & setLsaInfo(const LsaInfo &lsaInfo)
LsdbStatus & addAdjacencyLsa(const AdjacencyLsa &adjacencyLsa)
Data abstraction for NameLsa.
A neighbor reachable over a Face.
Copyright (c) 2014-2017, The University of Memphis, Regents of the University of California, Arizona Board of Regents.
LsdbStatus & addCoordinateLsa(const CoordinateLsa &coordinateLsa)
Data abstraction for AdjacencyLsa.
Data abstraction for LsdbStatus.
const ndn::PartialName NAMES_DATASET
Data abstraction for Adjacency.
const std::list< AdjLsa > & getAdjLsdb() const
Adjacency & setName(const ndn::Name &name)
CoordinateLsa & setLsaInfo(const LsaInfo &lsaInfo)