From 8a05c7fd2a00e7c8b53d5c57ccb3c53a756b4997 Mon Sep 17 00:00:00 2001 From: Davide Pesavento Date: Thu, 28 Feb 2019 02:26:19 -0500 Subject: [PATCH] rib: move RibManager to mgmt Refs: #4528 Change-Id: Idff4ce8fe28b48163794cd12f0d185f8ca4233e3 --- daemon/fw/self-learning-strategy.cpp | 4 +- daemon/{rib => mgmt}/rib-manager.cpp | 11 +++-- daemon/{rib => mgmt}/rib-manager.hpp | 33 ++++++------- .../host-to-gateway-readvertise-policy.cpp | 4 +- daemon/rib/service.hpp | 5 +- .../rib-manager-sl-announce.t.cpp} | 31 ++++++------ tests/daemon/{rib => mgmt}/rib-manager.t.cpp | 49 +++++++++---------- 7 files changed, 69 insertions(+), 68 deletions(-) rename daemon/{rib => mgmt}/rib-manager.cpp (98%) rename daemon/{rib => mgmt}/rib-manager.hpp (91%) rename tests/daemon/{rib/sl-announce.t.cpp => mgmt/rib-manager-sl-announce.t.cpp} (93%) rename tests/daemon/{rib => mgmt}/rib-manager.t.cpp (94%) diff --git a/daemon/fw/self-learning-strategy.cpp b/daemon/fw/self-learning-strategy.cpp index 42f0f22f..92f9ae33 100644 --- a/daemon/fw/self-learning-strategy.cpp +++ b/daemon/fw/self-learning-strategy.cpp @@ -227,7 +227,7 @@ SelfLearningStrategy::addRoute(const shared_ptr& pitEntry, const Fac { runOnRibIoService([pitEntryWeak = weak_ptr{pitEntry}, inFaceId = inFace.getId(), data, pa] { rib::Service::get().getRibManager().slAnnounce(pa, inFaceId, ROUTE_RENEW_LIFETIME, - [] (rib::RibManager::SlAnnounceResult res) { + [] (RibManager::SlAnnounceResult res) { NFD_LOG_DEBUG("Add route via PrefixAnnouncement with result=" << res); }); }); @@ -239,7 +239,7 @@ SelfLearningStrategy::renewRoute(const Name& name, FaceId inFaceId, time::millis // renew route with PA or ignore PA (if route has no PA) runOnRibIoService([name, inFaceId, maxLifetime] { rib::Service::get().getRibManager().slRenew(name, inFaceId, maxLifetime, - [] (rib::RibManager::SlAnnounceResult res) { + [] (RibManager::SlAnnounceResult res) { NFD_LOG_DEBUG("Renew route with result=" << res); }); }); diff --git a/daemon/rib/rib-manager.cpp b/daemon/mgmt/rib-manager.cpp similarity index 98% rename from daemon/rib/rib-manager.cpp rename to daemon/mgmt/rib-manager.cpp index 4477ebc4..0a73db2b 100644 --- a/daemon/rib/rib-manager.cpp +++ b/daemon/mgmt/rib-manager.cpp @@ -36,7 +36,9 @@ #include namespace nfd { -namespace rib { + +using rib::RibUpdate; +using rib::Route; NFD_LOG_INIT(RibManager); @@ -46,7 +48,7 @@ static const time::seconds ACTIVE_FACE_FETCH_INTERVAL = 5_min; const Name RibManager::LOCALHOP_TOP_PREFIX = "/localhop/nfd"; -RibManager::RibManager(Rib& rib, ndn::Face& face, ndn::KeyChain& keyChain, +RibManager::RibManager(rib::Rib& rib, ndn::Face& face, ndn::KeyChain& keyChain, ndn::nfd::Controller& nfdController, Dispatcher& dispatcher, ndn::util::Scheduler& scheduler) : ManagerBase(dispatcher, MGMT_MODULE_NAME) @@ -267,7 +269,7 @@ RibManager::listEntries(const Name& topPrefix, const Interest& interest, { auto now = time::steady_clock::now(); for (const auto& kv : m_rib) { - const RibEntry& entry = *kv.second; + const rib::RibEntry& entry = *kv.second; ndn::nfd::RibEntry item; item.setName(entry.getName()); for (const Route& route : entry.getRoutes()) { @@ -414,7 +416,7 @@ RibManager::slRenew(const Name& name, uint64_t faceId, time::milliseconds maxLif void RibManager::slFindAnn(const Name& name, const SlFindAnnCallback& cb) const { - shared_ptr entry; + shared_ptr entry; auto exactMatch = m_rib.find(name); if (exactMatch != m_rib.end()) { entry = exactMatch->second; @@ -496,5 +498,4 @@ RibManager::onNotification(const ndn::nfd::FaceEventNotification& notification) } } -} // namespace rib } // namespace nfd diff --git a/daemon/rib/rib-manager.hpp b/daemon/mgmt/rib-manager.hpp similarity index 91% rename from daemon/rib/rib-manager.hpp rename to daemon/mgmt/rib-manager.hpp index 503dc2f2..876ed75b 100644 --- a/daemon/rib/rib-manager.hpp +++ b/daemon/mgmt/rib-manager.hpp @@ -23,28 +23,26 @@ * NFD, e.g., in COPYING.md file. If not, see . */ -#ifndef NFD_DAEMON_RIB_RIB_MANAGER_HPP -#define NFD_DAEMON_RIB_RIB_MANAGER_HPP - -#include "fib-updater.hpp" -#include "rib.hpp" +#ifndef NFD_DAEMON_MGMT_RIB_MANAGER_HPP +#define NFD_DAEMON_MGMT_RIB_MANAGER_HPP #include "core/config-file.hpp" #include "core/manager-base.hpp" +#include "rib/rib.hpp" -#include #include #include #include +#include #include namespace nfd { -namespace rib { /** - * @brief Serve commands and datasets in NFD RIB management protocol. + * @brief Serve commands and datasets of NFD RIB management protocol. + * @sa https://redmine.named-data.net/projects/nfd/wiki/RibMgmt */ -class RibManager : public nfd::ManagerBase +class RibManager : public ManagerBase { public: class Error : public std::runtime_error @@ -53,8 +51,9 @@ public: using std::runtime_error::runtime_error; }; - RibManager(Rib& rib, ndn::Face& face, ndn::KeyChain& keyChain, ndn::nfd::Controller& nfdController, - Dispatcher& dispatcher, ndn::util::Scheduler& scheduler); + RibManager(rib::Rib& rib, ndn::Face& face, ndn::KeyChain& keyChain, + ndn::nfd::Controller& nfdController, Dispatcher& dispatcher, + ndn::util::Scheduler& scheduler); /** * @brief Apply localhost_security configuration. @@ -174,7 +173,7 @@ private: // RIB and FibUpdater actions * \param done completion callback */ void - beginAddRoute(const Name& name, Route route, optional expires, + beginAddRoute(const Name& name, rib::Route route, optional expires, const std::function& done); /** \brief Start removing a route from RIB and FIB. @@ -183,11 +182,12 @@ private: // RIB and FibUpdater actions * \param done completion callback */ void - beginRemoveRoute(const Name& name, const Route& route, + beginRemoveRoute(const Name& name, const rib::Route& route, const std::function& done); void - beginRibUpdate(const RibUpdate& update, const std::function& done); + beginRibUpdate(const rib::RibUpdate& update, + const std::function& done); private: // management Dispatcher related void @@ -243,7 +243,7 @@ public: static const Name LOCALHOP_TOP_PREFIX; private: - Rib& m_rib; + rib::Rib& m_rib; ndn::KeyChain& m_keyChain; ndn::nfd::Controller& m_nfdController; Dispatcher& m_dispatcher; @@ -262,7 +262,6 @@ private: std::ostream& operator<<(std::ostream& os, RibManager::SlAnnounceResult res); -} // namespace rib } // namespace nfd -#endif // NFD_DAEMON_RIB_RIB_MANAGER_HPP +#endif // NFD_DAEMON_MGMT_RIB_MANAGER_HPP diff --git a/daemon/rib/readvertise/host-to-gateway-readvertise-policy.cpp b/daemon/rib/readvertise/host-to-gateway-readvertise-policy.cpp index 2d508f87..7810619f 100644 --- a/daemon/rib/readvertise/host-to-gateway-readvertise-policy.cpp +++ b/daemon/rib/readvertise/host-to-gateway-readvertise-policy.cpp @@ -1,6 +1,6 @@ /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ /* - * Copyright (c) 2014-2018, Regents of the University of California, + * Copyright (c) 2014-2019, Regents of the University of California, * Arizona Board of Regents, * Colorado State University, * University Pierre & Marie Curie, Sorbonne University, @@ -25,7 +25,7 @@ #include "host-to-gateway-readvertise-policy.hpp" #include "core/scope-prefix.hpp" -#include "rib/rib-manager.hpp" +#include "mgmt/rib-manager.hpp" #include #include diff --git a/daemon/rib/service.hpp b/daemon/rib/service.hpp index 0d6a71a6..fe9b1103 100644 --- a/daemon/rib/service.hpp +++ b/daemon/rib/service.hpp @@ -26,9 +26,10 @@ #ifndef NFD_DAEMON_RIB_SERVICE_HPP #define NFD_DAEMON_RIB_SERVICE_HPP -#include "rib-manager.hpp" - #include "core/config-file.hpp" +#include "mgmt/rib-manager.hpp" +#include "rib/fib-updater.hpp" +#include "rib/rib.hpp" #include #include diff --git a/tests/daemon/rib/sl-announce.t.cpp b/tests/daemon/mgmt/rib-manager-sl-announce.t.cpp similarity index 93% rename from tests/daemon/rib/sl-announce.t.cpp rename to tests/daemon/mgmt/rib-manager-sl-announce.t.cpp index 86b6025f..06e3d5e3 100644 --- a/tests/daemon/rib/sl-announce.t.cpp +++ b/tests/daemon/mgmt/rib-manager-sl-announce.t.cpp @@ -1,6 +1,6 @@ /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ /* - * Copyright (c) 2014-2018, Regents of the University of California, + * Copyright (c) 2014-2019, Regents of the University of California, * Arizona Board of Regents, * Colorado State University, * University Pierre & Marie Curie, Sorbonne University, @@ -23,17 +23,17 @@ * NFD, e.g., in COPYING.md file. If not, see . */ -#include "rib/rib-manager.hpp" +#include "mgmt/rib-manager.hpp" +#include "rib/fib-updater.hpp" #include "tests/identity-management-fixture.hpp" #include namespace nfd { -namespace rib { namespace tests { -using namespace nfd::tests; +using rib::Route; class RibManagerSlAnnounceFixture : public IdentityManagementTimeFixture { @@ -49,7 +49,7 @@ public: , m_trustedSigner(m_keyChain.createIdentity("/trusted", ndn::RsaKeyParams())) , m_untrustedSigner(m_keyChain.createIdentity("/untrusted", ndn::RsaKeyParams())) { - rib.mockFibResponse = [] (const RibUpdateBatch&) { return true; }; + rib.mockFibResponse = [] (const auto&) { return true; }; rib.wantMockFibResponseOnce = false; // Face, Controller, Dispatcher are irrelevant to SlAnnounce functions but required by @@ -62,16 +62,16 @@ public: template ndn::PrefixAnnouncement - makeTrustedAnn(const T&... args) + makeTrustedAnn(T&&... args) { - return signPrefixAnn(makePrefixAnn(args...), m_keyChain, m_trustedSigner); + return signPrefixAnn(makePrefixAnn(std::forward(args)...), m_keyChain, m_trustedSigner); } template ndn::PrefixAnnouncement - makeUntrustedAnn(const T&... args) + makeUntrustedAnn(T&&... args) { - return signPrefixAnn(makePrefixAnn(args...), m_keyChain, m_untrustedSigner); + return signPrefixAnn(makePrefixAnn(std::forward(args)...), m_keyChain, m_untrustedSigner); } /** \brief Invoke manager->slAnnounce and wait for result. @@ -158,7 +158,7 @@ private: } public: - Rib rib; + rib::Rib rib; unique_ptr manager; private: @@ -166,13 +166,15 @@ private: ndn::util::Scheduler m_scheduler; ndn::nfd::Controller m_nfdController; ndn::mgmt::Dispatcher m_dispatcher; - FibUpdater m_fibUpdater; + rib::FibUpdater m_fibUpdater; ndn::security::SigningInfo m_trustedSigner; ndn::security::SigningInfo m_untrustedSigner; }; -BOOST_FIXTURE_TEST_SUITE(TestSlAnnounce, RibManagerSlAnnounceFixture) +BOOST_AUTO_TEST_SUITE(Mgmt) +BOOST_AUTO_TEST_SUITE(TestRibManager) +BOOST_FIXTURE_TEST_SUITE(SlAnnounce, RibManagerSlAnnounceFixture) BOOST_AUTO_TEST_CASE(AnnounceUnconfigured) { @@ -327,8 +329,9 @@ BOOST_AUTO_TEST_CASE(FindNone) BOOST_CHECK(!pa); } -BOOST_AUTO_TEST_SUITE_END() // TestSlAnnounce +BOOST_AUTO_TEST_SUITE_END() // SlAnnounce +BOOST_AUTO_TEST_SUITE_END() // TestRibManager +BOOST_AUTO_TEST_SUITE_END() // Mgmt } // namespace tests -} // namespace rib } // namespace nfd diff --git a/tests/daemon/rib/rib-manager.t.cpp b/tests/daemon/mgmt/rib-manager.t.cpp similarity index 94% rename from tests/daemon/rib/rib-manager.t.cpp rename to tests/daemon/mgmt/rib-manager.t.cpp index be59ca51..46da6a1f 100644 --- a/tests/daemon/rib/rib-manager.t.cpp +++ b/tests/daemon/mgmt/rib-manager.t.cpp @@ -1,6 +1,6 @@ /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ /* - * Copyright (c) 2014-2018, Regents of the University of California, + * Copyright (c) 2014-2019, Regents of the University of California, * Arizona Board of Regents, * Colorado State University, * University Pierre & Marie Curie, Sorbonne University, @@ -23,22 +23,19 @@ * NFD, e.g., in COPYING.md file. If not, see . */ -#include "rib/rib-manager.hpp" +#include "mgmt/rib-manager.hpp" #include "core/fib-max-depth.hpp" +#include "rib/fib-updater.hpp" #include "tests/manager-common-fixture.hpp" #include -#include #include #include namespace nfd { -namespace rib { namespace tests { -using namespace nfd::tests; - struct ConfigurationStatus { bool isLocalhostConfigured; @@ -65,7 +62,7 @@ public: , m_fibUpdater(m_rib, m_nfdController) , m_manager(m_rib, m_face, m_keyChain, m_nfdController, m_dispatcher, m_scheduler) { - m_rib.mockFibResponse = [] (const RibUpdateBatch& batch) { + m_rib.mockFibResponse = [] (const rib::RibUpdateBatch& batch) { BOOST_CHECK(batch.begin() != batch.end()); return true; }; @@ -93,7 +90,7 @@ private: registerWithNfd() { m_manager.registerWithNfd(); - advanceClocks(time::milliseconds(1)); + advanceClocks(1_ms); auto replyFibAddCommand = [this] (const Interest& interest) { nfd::ControlParameters params(interest.getName().get(-5).blockFromValue()); @@ -114,7 +111,7 @@ private: for (const auto& command : m_commands) { if (commandPrefix.isPrefixOf(command.getName())) { replyFibAddCommand(command); - advanceClocks(time::milliseconds(1)); + advanceClocks(1_ms); } } @@ -210,8 +207,8 @@ protected: ndn::util::Scheduler m_scheduler; ndn::nfd::Controller m_nfdController; - Rib m_rib; - FibUpdater m_fibUpdater; + rib::Rib m_rib; + rib::FibUpdater m_fibUpdater; RibManager m_manager; }; @@ -240,6 +237,7 @@ operator<<(std::ostream& os, RibManagerFixture::CheckCommandResult result) return os << static_cast(result); } +BOOST_AUTO_TEST_SUITE(Mgmt) BOOST_AUTO_TEST_SUITE(TestRibManager) class AddTopPrefixFixture : public RibManagerFixture @@ -389,20 +387,20 @@ BOOST_AUTO_TEST_CASE(SelfOperation) BOOST_AUTO_TEST_CASE(Expiration) { - auto paramsRegister = makeRegisterParameters("/test-expiry", 9527, time::milliseconds(50)); + auto paramsRegister = makeRegisterParameters("/test-expiry", 9527, 50_ms); auto paramsUnregister = makeRegisterParameters("/test-expiry", 9527); receiveInterest(makeControlCommandRequest("/localhost/nfd/rib/register", paramsRegister)); - advanceClocks(time::milliseconds(55)); + advanceClocks(55_ms); BOOST_REQUIRE_EQUAL(m_commands.size(), 2); // the registered route has expired BOOST_CHECK_EQUAL(checkCommand(0, "add-nexthop", paramsRegister), CheckCommandResult::OK); BOOST_CHECK_EQUAL(checkCommand(1, "remove-nexthop", paramsUnregister), CheckCommandResult::OK); m_commands.clear(); - paramsRegister.setExpirationPeriod(time::milliseconds(100)); + paramsRegister.setExpirationPeriod(100_ms); receiveInterest(makeControlCommandRequest("/localhost/nfd/rib/register", paramsRegister)); - advanceClocks(time::milliseconds(55)); + advanceClocks(55_ms); BOOST_REQUIRE_EQUAL(m_commands.size(), 1); // the registered route is still active BOOST_CHECK_EQUAL(checkCommand(0, "add-nexthop", paramsRegister), CheckCommandResult::OK); } @@ -431,8 +429,8 @@ BOOST_AUTO_TEST_SUITE_END() // RegisterUnregister BOOST_FIXTURE_TEST_CASE(RibDataset, UnauthorizedRibManagerFixture) { uint64_t faceId = 0; - auto generateRoute = [&faceId] () -> Route { - Route route; + auto generateRoute = [&faceId] () -> rib::Route { + rib::Route route; route.faceId = ++faceId; route.cost = route.faceId * 10; route.expires = nullopt; @@ -491,7 +489,7 @@ BOOST_AUTO_TEST_CASE(FetchActiveFacesEvent) { BOOST_CHECK_EQUAL(m_commands.size(), 0); - advanceClocks(time::seconds(301)); // RibManager::ACTIVE_FACE_FETCH_INTERVAL = 300s + advanceClocks(301_s); // RibManager::ACTIVE_FACE_FETCH_INTERVAL = 300s BOOST_REQUIRE_EQUAL(m_commands.size(), 2); BOOST_CHECK_EQUAL(m_commands[0].getName(), "/localhost/nfd/faces/events"); BOOST_CHECK_EQUAL(m_commands[1].getName(), "/localhost/nfd/faces/list"); @@ -512,7 +510,7 @@ BOOST_AUTO_TEST_CASE(RemoveInvalidFaces) activeFaces.push_back(status); m_manager.removeInvalidFaces(activeFaces); - advanceClocks(time::milliseconds(100)); + advanceClocks(100_ms); BOOST_REQUIRE_EQUAL(m_rib.size(), 1); auto it1 = m_rib.find("/test-remove-invalid-faces-1"); @@ -531,24 +529,23 @@ BOOST_AUTO_TEST_CASE(OnNotification) receiveInterest(makeControlCommandRequest("/localhost/nfd/rib/register", parameters2)); BOOST_REQUIRE_EQUAL(m_rib.size(), 2); - auto makeNotification = [] (ndn::nfd::FaceEventKind eventKind, uint64_t faceId) -> ndn::nfd::FaceEventNotification { - ndn::nfd::FaceEventNotification notification; - notification.setKind(eventKind).setFaceId(faceId); - return notification; + auto makeNotification = [] (ndn::nfd::FaceEventKind kind, uint64_t faceId) { + return ndn::nfd::FaceEventNotification().setKind(kind).setFaceId(faceId); }; m_manager.onNotification(makeNotification(ndn::nfd::FaceEventKind::FACE_EVENT_DESTROYED, 1)); - advanceClocks(time::milliseconds(100)); + advanceClocks(100_ms); BOOST_CHECK_EQUAL(m_rib.size(), 0); m_manager.onNotification(makeNotification(ndn::nfd::FaceEventKind::FACE_EVENT_CREATED, 2)); - advanceClocks(time::milliseconds(100)); + advanceClocks(100_ms); BOOST_CHECK_EQUAL(m_rib.size(), 0); } BOOST_AUTO_TEST_SUITE_END() // FaceMonitor + BOOST_AUTO_TEST_SUITE_END() // TestRibManager +BOOST_AUTO_TEST_SUITE_END() // Mgmt } // namespace tests -} // namespace rib } // namespace nfd