void DatasetInterestHandler::publishAdjStatus(const ndn::Name& topPrefix, const ndn::Interest& interest, ndn::mgmt::StatusDatasetContext& context) { NLSR_LOG_DEBUG("Received interest: " << interest); auto lsaRange = std::make_pair<std::list<AdjLsa>::const_iterator, std::list<AdjLsa>::const_iterator>( m_lsdb.getAdjLsdb().cbegin(), m_lsdb.getAdjLsdb().cend()); for (auto lsa = lsaRange.first; lsa != lsaRange.second; lsa++) { tlv::AdjacencyLsa tlvLsa; std::shared_ptr<tlv::LsaInfo> tlvLsaInfo = tlv::makeLsaInfo(*lsa); tlvLsa.setLsaInfo(*tlvLsaInfo); for (const Adjacent& adj : lsa->getAdl().getAdjList()) { tlv::Adjacency tlvAdj; tlvAdj.setName(adj.getName()); tlvAdj.setUri(adj.getFaceUri().toString()); tlvAdj.setCost(adj.getLinkCost()); tlvLsa.addAdjacency(tlvAdj); } const ndn::Block& wire = tlvLsa.wireEncode(); context.append(wire); } context.end(); }
void FaceManager::listFaces(ndn::mgmt::StatusDatasetContext& context) { auto now = time::steady_clock::now(); for (const auto& face : m_faceTable) { ndn::nfd::FaceStatus status = makeFaceStatus(face, now); context.append(status.wireEncode()); } context.end(); }
void DatasetInterestHandler::publishRtStatus(const ndn::Name& topPrefix, const ndn::Interest& interest, ndn::mgmt::StatusDatasetContext& context) { NLSR_LOG_DEBUG("Received interest: " << interest); tlv::RoutingTableStatus rtStatus; for (const tlv::RoutingTable& rt : getTlvRTEntries()) { rtStatus.addRoutingTable(rt); } const ndn::Block& wire = rtStatus.wireEncode(); context.append(wire); context.end(); }
void FaceManager::listChannels(ndn::mgmt::StatusDatasetContext& context) { auto factories = m_faceSystem.listProtocolFactories(); for (const auto* factory : factories) { for (const auto& channel : factory->getChannels()) { ndn::nfd::ChannelStatus entry; entry.setLocalUri(channel->getUri().toString()); context.append(entry.wireEncode()); } } context.end(); }
void DatasetInterestHandler::publishCoordinateStatus(const ndn::Name& topPrefix, const ndn::Interest& interest, ndn::mgmt::StatusDatasetContext& context) { auto lsaRange = std::make_pair<std::list<CoordinateLsa>::const_iterator, std::list<CoordinateLsa>::const_iterator>( m_lsdb.getCoordinateLsdb().cbegin(), m_lsdb.getCoordinateLsdb().cend()); NLSR_LOG_DEBUG("Received interest: " << interest); for (auto lsa = lsaRange.first; lsa != lsaRange.second; lsa++) { tlv::CoordinateLsa tlvLsa; std::shared_ptr<tlv::LsaInfo> tlvLsaInfo = tlv::makeLsaInfo(*lsa); tlvLsa.setLsaInfo(*tlvLsaInfo); tlvLsa.setHyperbolicRadius(lsa->getCorRadius()); tlvLsa.setHyperbolicAngle(lsa->getCorTheta()); const ndn::Block& wire = tlvLsa.wireEncode(); context.append(wire); } context.end(); }
void FaceManager::queryFaces(const Interest& interest, ndn::mgmt::StatusDatasetContext& context) { ndn::nfd::FaceQueryFilter faceFilter; try { faceFilter.wireDecode(interest.getName()[-1].blockFromValue()); } catch (const tlv::Error& e) { NFD_LOG_DEBUG("Malformed query filter: " << e.what()); return context.reject(ControlResponse(400, "Malformed filter")); } auto now = time::steady_clock::now(); for (const auto& face : m_faceTable) { if (matchFilter(faceFilter, face)) { ndn::nfd::FaceStatus status = makeFaceStatus(face, now); context.append(status.wireEncode()); } } context.end(); }
void FibManager::listEntries(const Name& topPrefix, const Interest& interest, ndn::mgmt::StatusDatasetContext& context) { for (auto&& entry : m_fib) { auto prefix = entry.getPrefix(); ndn::nfd::FibEntry record; const auto& nextHops = entry.getNextHops(); for (auto&& next : nextHops) { ndn::nfd::NextHopRecord nextHopRecord; nextHopRecord.setFaceId(next.getFace()->getId()); nextHopRecord.setCost(next.getCost()); record.addNextHopRecord(nextHopRecord); } record.setPrefix(prefix); context.append(record.wireEncode()); } context.end(); }