27 #include <ndn-cxx/mgmt/nfd/control-response.hpp> 28 #include <ndn-cxx/util/regex.hpp> 37 const ndn::PartialName
RT_DATASET = ndn::PartialName(
"routing-table");
42 : m_dispatcher(dispatcher)
44 , m_routingTableEntries(rt.getRoutingTableEntry())
45 , m_dryRoutingTableEntries(rt.getDryRoutingTableEntry())
47 setDispatcher(m_dispatcher);
51 DatasetInterestHandler::setDispatcher(ndn::mgmt::Dispatcher& dispatcher)
53 dispatcher.addStatusDataset(ADJACENCIES_DATASET,
54 ndn::mgmt::makeAcceptAllAuthorization(),
55 std::bind(&DatasetInterestHandler::publishAdjStatus,
this, _1, _2, _3));
56 dispatcher.addStatusDataset(COORDINATES_DATASET,
57 ndn::mgmt::makeAcceptAllAuthorization(),
58 std::bind(&DatasetInterestHandler::publishCoordinateStatus,
this, _1, _2, _3));
59 dispatcher.addStatusDataset(NAMES_DATASET,
60 ndn::mgmt::makeAcceptAllAuthorization(),
61 std::bind(&DatasetInterestHandler::publishNameStatus,
this, _1, _2, _3));
62 dispatcher.addStatusDataset(RT_DATASET,
63 ndn::mgmt::makeAcceptAllAuthorization(),
64 std::bind(&DatasetInterestHandler::publishRtStatus,
this, _1, _2, _3));
68 DatasetInterestHandler::publishAdjStatus(
const ndn::Name& topPrefix,
const ndn::Interest& interest,
69 ndn::mgmt::StatusDatasetContext& context)
73 auto lsaRange = std::make_pair<std::list<AdjLsa>::const_iterator,
74 std::list<AdjLsa>::const_iterator>(
76 for (
auto lsa = lsaRange.first; lsa != lsaRange.second; lsa++) {
81 for (
const Adjacent& adj : lsa->getAdl().getAdjList()) {
84 tlvAdj.
setUri(adj.getFaceUri().toString());
85 tlvAdj.
setCost(adj.getLinkCost());
95 DatasetInterestHandler::publishCoordinateStatus(
const ndn::Name& topPrefix,
const ndn::Interest& interest,
96 ndn::mgmt::StatusDatasetContext& context)
98 auto lsaRange = std::make_pair<std::list<CoordinateLsa>::const_iterator,
99 std::list<CoordinateLsa>::const_iterator>(
103 for (
auto lsa = lsaRange.first; lsa != lsaRange.second; lsa++) {
112 context.append(wire);
118 DatasetInterestHandler::publishNameStatus(
const ndn::Name& topPrefix,
const ndn::Interest& interest,
119 ndn::mgmt::StatusDatasetContext& context)
121 auto lsaRange = std::make_pair<std::list<NameLsa>::const_iterator, std::list<NameLsa>::const_iterator>(
124 for (
auto lsa = lsaRange.first; lsa != lsaRange.second; lsa++) {
130 for (
const ndn::Name& name : lsa->getNpl().getNames()) {
135 context.append(wire);
141 std::vector<tlv::RoutingTable>
142 DatasetInterestHandler::getTlvRTEntries()
144 std::vector<tlv::RoutingTable> rtable;
145 for (
const auto& rte : m_routingTableEntries) {
147 std::shared_ptr<tlv::Destination> tlvDes =
tlv::makeDes(rte);
149 for (
const auto& nh : rte.getNexthopList().getNextHops()) {
151 tlvNexthop.
setUri(nh.getConnectingFaceUri());
152 tlvNexthop.
setCost(nh.getRouteCost());
155 rtable.push_back(tlvRoutingTable);
157 if (!m_dryRoutingTableEntries.empty()) {
158 for (
const auto& dryRte : m_dryRoutingTableEntries) {
160 std::shared_ptr<tlv::Destination> tlvDes =
tlv::makeDes(dryRte);
162 for (
const auto& nh : dryRte.getNexthopList().getNextHops()) {
164 tlvNexthop.
setUri(nh.getConnectingFaceUri());
165 tlvNexthop.
setCost(nh.getRouteCost());
168 rtable.push_back(tlvRoutingTable);
175 DatasetInterestHandler::publishRtStatus(
const ndn::Name& topPrefix,
const ndn::Interest& interest,
176 ndn::mgmt::StatusDatasetContext& context)
183 const ndn::Block& wire = rtStatus.
wireEncode();
184 context.append(wire);
188 template<> std::list<tlv::AdjacencyLsa>
189 getTlvLsas<tlv::AdjacencyLsa>(
const Lsdb& lsdb)
191 std::list<tlv::AdjacencyLsa> lsas;
193 auto lsaRange = std::make_pair<std::list<AdjLsa>::const_iterator,
194 std::list<AdjLsa>::const_iterator>(
195 lsdb.getAdjLsdb().cbegin(), lsdb.getAdjLsdb().cend());
196 for (
auto lsa = lsaRange.first; lsa != lsaRange.second; lsa++) {
202 for (
const Adjacent& adj : lsa->getAdl().getAdjList()) {
205 tlvAdj.
setUri(adj.getFaceUri().toString());
206 tlvAdj.
setCost(adj.getLinkCost());
209 lsas.push_back(tlvLsa);
216 template<> std::list<tlv::CoordinateLsa>
217 getTlvLsas<tlv::CoordinateLsa>(
const Lsdb& lsdb)
219 std::list<tlv::CoordinateLsa> lsas;
221 auto lsaRange = std::make_pair<std::list<CoordinateLsa>::const_iterator,
222 std::list<CoordinateLsa>::const_iterator>(
223 lsdb.getCoordinateLsdb().cbegin(), lsdb.getCoordinateLsdb().cend());
225 for (
auto lsa = lsaRange.first; lsa != lsaRange.second; lsa++) {
234 lsas.push_back(tlvLsa);
241 template<> std::list<tlv::NameLsa>
242 getTlvLsas<tlv::NameLsa>(
const Lsdb& lsdb)
244 std::list<tlv::NameLsa> lsas;
246 auto lsaRange = std::make_pair<std::list<NameLsa>::const_iterator,
247 std::list<NameLsa>::const_iterator>(
248 lsdb.getNameLsdb().cbegin(), lsdb.getNameLsdb().cend());
249 for (
auto lsa = lsaRange.first; lsa != lsaRange.second; lsa++) {
255 for (
const ndn::Name& name : lsa->getNpl().getNames()) {
259 lsas.push_back(tlvLsa);
NextHop & setUri(const std::string &uri)
Adjacency & setCost(uint64_t cost)
const std::list< NameLsa > & getNameLsdb() const
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.
Data abstraction for Nexthop.
RoutingTableStatus & addRoutingTable(const RoutingTable &routeTable)
AdjacencyLsa & addAdjacency(const Adjacency &adjacency)
NameLsa & addName(const ndn::Name &name)
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)
std::shared_ptr< Destination > makeDes(const RoutingTableEntry &rte)
NameLsa & setLsaInfo(const LsaInfo &lsaInfo)
Copyright (c) 2014-2018, The University of Memphis, Regents of the University of California.
Data abstraction for routing table status.
Data abstraction for CoordinateLsa.
CoordinateLsa & setHyperbolicRadius(double hyperbolicRadius)
#define INIT_LOGGER(name)
const std::list< CoordinateLsa > & getCoordinateLsdb() const
Data abstraction for RouteTableInfo.
Adjacency & setUri(const std::string &uri)
const ndn::PartialName ADJACENCIES_DATASET
size_t wireEncode(ndn::EncodingImpl< TAG > &block) const
Encodes the hyperbolic coordinates and some info using the method in TAG.
size_t wireEncode(ndn::EncodingImpl< TAG > &block) const
std::shared_ptr< LsaInfo > makeLsaInfo(const Lsa &lsa)
RoutingTable & setDestination(const Destination &des)
AdjacencyLsa & setLsaInfo(const LsaInfo &lsaInfo)
Data abstraction for NameLsa.
A neighbor reachable over a Face.
Copyright (c) 2014-2019, The University of Memphis, Regents of the University of California, Arizona Board of Regents.
Copyright (c) 2014-2018, The University of Memphis, Regents of the University of California, Arizona Board of Regents.
Data abstraction for AdjacencyLsa.
const ndn::PartialName NAMES_DATASET
DatasetInterestHandler(ndn::mgmt::Dispatcher &dispatcher, const Lsdb &lsdb, const RoutingTable &rt)
const ndn::PartialName RT_DATASET
NextHop & setCost(double cost)
Data abstraction for Adjacency.
const std::list< AdjLsa > & getAdjLsdb() const
Adjacency & setName(const ndn::Name &name)
CoordinateLsa & setLsaInfo(const LsaInfo &lsaInfo)
RoutingTable & addNexthops(const NextHop &nexthop)