Skip to content

Commit 1db1bb6

Browse files
committed
mgmt: migrate to new Dispatcher API for control commands
Change-Id: Iaba68dde879fbb562e13ef383e0b753174708baa
1 parent 45c1f6a commit 1db1bb6

File tree

9 files changed

+69
-74
lines changed

9 files changed

+69
-74
lines changed

daemon/mgmt/cs-manager.cpp

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,15 @@ CsManager::CsManager(Cs& cs, const ForwarderCounters& fwCounters,
3939
, m_cs(cs)
4040
, m_fwCounters(fwCounters)
4141
{
42-
registerCommandHandler<ndn::nfd::CsConfigCommand>("config",
43-
[this] (auto&&, auto&&, auto&&... args) { changeConfig(std::forward<decltype(args)>(args)...); });
44-
registerCommandHandler<ndn::nfd::CsEraseCommand>("erase",
45-
[this] (auto&&, auto&&, auto&&... args) { erase(std::forward<decltype(args)>(args)...); });
46-
registerStatusDatasetHandler("info",
47-
[this] (auto&&, auto&&, auto&&... args) { serveInfo(std::forward<decltype(args)>(args)...); });
42+
registerCommandHandler<ndn::nfd::CsConfigCommand>([this] (auto&&, auto&&, auto&&... args) {
43+
changeConfig(std::forward<decltype(args)>(args)...);
44+
});
45+
registerCommandHandler<ndn::nfd::CsEraseCommand>([this] (auto&&, auto&&, auto&&... args) {
46+
erase(std::forward<decltype(args)>(args)...);
47+
});
48+
registerStatusDatasetHandler("info", [this] (auto&&, auto&&, auto&&... args) {
49+
serveInfo(std::forward<decltype(args)>(args)...);
50+
});
4851
}
4952

5053
void

daemon/mgmt/face-manager.cpp

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,15 @@ FaceManager::FaceManager(FaceSystem& faceSystem,
4949
, m_faceTable(faceSystem.getFaceTable())
5050
{
5151
// register handlers for ControlCommand
52-
registerCommandHandler<ndn::nfd::FaceCreateCommand>("create",
53-
[this] (auto&&, auto&&, auto&&... args) { createFace(std::forward<decltype(args)>(args)...); });
54-
registerCommandHandler<ndn::nfd::FaceUpdateCommand>("update",
55-
[this] (auto&&, auto&&... args) { updateFace(std::forward<decltype(args)>(args)...); });
56-
registerCommandHandler<ndn::nfd::FaceDestroyCommand>("destroy",
57-
[this] (auto&&, auto&&, auto&&... args) { destroyFace(std::forward<decltype(args)>(args)...); });
52+
registerCommandHandler<ndn::nfd::FaceCreateCommand>([this] (auto&&, auto&&, auto&&... args) {
53+
createFace(std::forward<decltype(args)>(args)...);
54+
});
55+
registerCommandHandler<ndn::nfd::FaceUpdateCommand>([this] (auto&&, auto&&... args) {
56+
updateFace(std::forward<decltype(args)>(args)...);
57+
});
58+
registerCommandHandler<ndn::nfd::FaceDestroyCommand>([this] (auto&&, auto&&, auto&&... args) {
59+
destroyFace(std::forward<decltype(args)>(args)...);
60+
});
5861

5962
// register handlers for StatusDataset
6063
registerStatusDatasetHandler("list",

daemon/mgmt/fib-manager.cpp

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,15 @@ FibManager::FibManager(Fib& fib, const FaceTable& faceTable,
4444
, m_fib(fib)
4545
, m_faceTable(faceTable)
4646
{
47-
registerCommandHandler<ndn::nfd::FibAddNextHopCommand>("add-nexthop",
48-
[this] (auto&&, auto&&... args) { addNextHop(std::forward<decltype(args)>(args)...); });
49-
registerCommandHandler<ndn::nfd::FibRemoveNextHopCommand>("remove-nexthop",
50-
[this] (auto&&, auto&&... args) { removeNextHop(std::forward<decltype(args)>(args)...); });
51-
registerStatusDatasetHandler("list",
52-
[this] (auto&&, auto&&, auto&&... args) { listEntries(std::forward<decltype(args)>(args)...); });
47+
registerCommandHandler<ndn::nfd::FibAddNextHopCommand>([this] (auto&&, auto&&... args) {
48+
addNextHop(std::forward<decltype(args)>(args)...);
49+
});
50+
registerCommandHandler<ndn::nfd::FibRemoveNextHopCommand>([this] (auto&&, auto&&... args) {
51+
removeNextHop(std::forward<decltype(args)>(args)...);
52+
});
53+
registerStatusDatasetHandler("list", [this] (auto&&, auto&&, auto&&... args) {
54+
listEntries(std::forward<decltype(args)>(args)...);
55+
});
5356
}
5457

5558
void

daemon/mgmt/manager-base.hpp

Lines changed: 12 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -76,15 +76,23 @@ class ManagerBase : noncopyable
7676
~ManagerBase();
7777

7878
NFD_PUBLIC_WITH_TESTS_ELSE_PROTECTED: // registrations to the dispatcher
79-
// difference from ndn::mgmt::ControlCommandHandler: accepts nfd::ControlParameters
79+
template<typename Command>
8080
using ControlCommandHandler = std::function<void(const Name& prefix, const Interest& interest,
81-
const ControlParameters& parameters,
81+
const typename Command::RequestParameters& parameters,
8282
const CommandContinuation& done)>;
8383

8484
template<typename Command>
8585
void
86-
registerCommandHandler(const std::string& verb,
87-
ControlCommandHandler handler);
86+
registerCommandHandler(ControlCommandHandler<Command> handler)
87+
{
88+
auto handle = [h = std::move(handler)] (const auto& prefix, const auto& interest,
89+
const auto& params, const auto& done) {
90+
const auto& reqParams = static_cast<const typename Command::RequestParameters&>(params);
91+
h(prefix, interest, reqParams, done);
92+
};
93+
m_dispatcher.addControlCommand<Command>(makeAuthorization(Command::verb.toUri()),
94+
std::move(handle));
95+
}
8896

8997
void
9098
registerStatusDatasetHandler(const std::string& verb,
@@ -128,34 +136,6 @@ class ManagerBase : noncopyable
128136
CommandAuthenticator* m_authenticator = nullptr;
129137
};
130138

131-
template<typename Command>
132-
void
133-
ManagerBase::registerCommandHandler(const std::string& verb, ControlCommandHandler handler)
134-
{
135-
auto validate = [] (const ndn::mgmt::ControlParametersBase& params) {
136-
BOOST_ASSERT(dynamic_cast<const ControlParameters*>(&params) != nullptr);
137-
try {
138-
Command::validateRequest(static_cast<const ControlParameters&>(params));
139-
return true;
140-
}
141-
catch (const std::invalid_argument&) {
142-
return false;
143-
}
144-
};
145-
146-
auto handle = [handler = std::move(handler)] (const Name& prefix, const Interest& interest,
147-
const ndn::mgmt::ControlParametersBase& params,
148-
const CommandContinuation& done) {
149-
BOOST_ASSERT(dynamic_cast<const ControlParameters*>(&params) != nullptr);
150-
ControlParameters parameters = static_cast<const ControlParameters&>(params);
151-
Command::applyDefaultsToRequest(parameters);
152-
handler(prefix, interest, parameters, done);
153-
};
154-
155-
m_dispatcher.addControlCommand<ControlParameters>(makeRelPrefix(verb), makeAuthorization(verb),
156-
std::move(validate), std::move(handle));
157-
}
158-
159139
} // namespace nfd
160140

161141
#endif // NFD_DAEMON_MGMT_MANAGER_BASE_HPP

daemon/mgmt/rib-manager.cpp

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,15 @@ RibManager::RibManager(rib::Rib& rib, ndn::Face& face, ndn::KeyChain& keyChain,
6161
, m_paValidator(make_unique<ndn::security::CertificateFetcherDirectFetch>(face))
6262
, m_isLocalhopEnabled(false)
6363
{
64-
registerCommandHandler<ndn::nfd::RibRegisterCommand>("register",
65-
[this] (auto&&, auto&&... args) { registerEntry(std::forward<decltype(args)>(args)...); });
66-
registerCommandHandler<ndn::nfd::RibUnregisterCommand>("unregister",
67-
[this] (auto&&, auto&&... args) { unregisterEntry(std::forward<decltype(args)>(args)...); });
68-
registerStatusDatasetHandler("list",
69-
[this] (auto&&, auto&&, auto&&... args) { listEntries(std::forward<decltype(args)>(args)...); });
64+
registerCommandHandler<ndn::nfd::RibRegisterCommand>([this] (auto&&, auto&&... args) {
65+
registerEntry(std::forward<decltype(args)>(args)...);
66+
});
67+
registerCommandHandler<ndn::nfd::RibUnregisterCommand>([this] (auto&&, auto&&... args) {
68+
unregisterEntry(std::forward<decltype(args)>(args)...);
69+
});
70+
registerStatusDatasetHandler("list", [this] (auto&&, auto&&, auto&&... args) {
71+
listEntries(std::forward<decltype(args)>(args)...);
72+
});
7073
}
7174

7275
void

daemon/mgmt/strategy-choice-manager.cpp

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,15 @@ StrategyChoiceManager::StrategyChoiceManager(StrategyChoice& strategyChoice,
4242
: ManagerBase("strategy-choice", dispatcher, authenticator)
4343
, m_table(strategyChoice)
4444
{
45-
registerCommandHandler<ndn::nfd::StrategyChoiceSetCommand>("set",
46-
[this] (auto&&, auto&&, auto&&... args) { setStrategy(std::forward<decltype(args)>(args)...); });
47-
registerCommandHandler<ndn::nfd::StrategyChoiceUnsetCommand>("unset",
48-
[this] (auto&&, auto&&, auto&&... args) { unsetStrategy(std::forward<decltype(args)>(args)...); });
49-
registerStatusDatasetHandler("list",
50-
[this] (auto&&, auto&&, auto&&... args) { listChoices(std::forward<decltype(args)>(args)...); });
45+
registerCommandHandler<ndn::nfd::StrategyChoiceSetCommand>([this] (auto&&, auto&&, auto&&... args) {
46+
setStrategy(std::forward<decltype(args)>(args)...);
47+
});
48+
registerCommandHandler<ndn::nfd::StrategyChoiceUnsetCommand>([this] (auto&&, auto&&, auto&&... args) {
49+
unsetStrategy(std::forward<decltype(args)>(args)...);
50+
});
51+
registerStatusDatasetHandler("list", [this] (auto&&, auto&&, auto&&... args) {
52+
listChoices(std::forward<decltype(args)>(args)...);
53+
});
5154
}
5255

5356
void

tests/daemon/mgmt/face-manager.t.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
22
/*
3-
* Copyright (c) 2014-2024, Regents of the University of California,
3+
* Copyright (c) 2014-2025, Regents of the University of California,
44
* Arizona Board of Regents,
55
* Colorado State University,
66
* University Pierre & Marie Curie, Sorbonne University,
@@ -218,15 +218,15 @@ BOOST_AUTO_TEST_CASE(FaceQuery)
218218
auto face3 = addFace(REMOVE_LAST_NOTIFICATION | SET_URI_TEST); // test://
219219

220220
auto generateQuery = [] (const auto& filter) {
221-
return Interest(Name("/localhost/nfd/faces/query").append(tlv::GenericNameComponent, filter.wireEncode()))
221+
return Interest(Name("/localhost/nfd/faces/query").append(filter.wireEncode()))
222222
.setCanBePrefix(true);
223223
};
224224

225225
auto schemeQuery = generateQuery(FaceQueryFilter().setUriScheme("dummy"));
226226
auto idQuery = generateQuery(FaceQueryFilter().setFaceId(face1->getId()));
227227
auto scopeQuery = generateQuery(FaceQueryFilter().setFaceScope(ndn::nfd::FACE_SCOPE_NON_LOCAL));
228228
auto invalidQueryName = Name("/localhost/nfd/faces/query")
229-
.append(tlv::GenericNameComponent, ndn::makeStringBlock(tlv::Content, "invalid"));
229+
.append(ndn::makeStringBlock(tlv::Content, "invalid"));
230230
auto invalidQuery = Interest(invalidQueryName).setCanBePrefix(true);
231231

232232
receiveInterest(schemeQuery); // face1 and face2 expected

tests/daemon/mgmt/manager-base.t.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,14 @@ namespace nfd::tests {
3131

3232
class TestCommandVoidParameters : public ndn::nfd::ControlCommand<TestCommandVoidParameters>
3333
{
34-
NDN_CXX_CONTROL_COMMAND(TestCommandVoidParameters, "test-module", "test-void-parameters");
34+
NDN_CXX_CONTROL_COMMAND("test-module", "test-void");
3535
};
3636

3737
const TestCommandVoidParameters::RequestFormat TestCommandVoidParameters::s_requestFormat;
3838

3939
class TestCommandRequireName : public ndn::nfd::ControlCommand<TestCommandRequireName>
4040
{
41-
NDN_CXX_CONTROL_COMMAND(TestCommandRequireName, "test-module", "test-require-name");
41+
NDN_CXX_CONTROL_COMMAND("test-module", "test-name-required");
4242
};
4343

4444
const TestCommandRequireName::RequestFormat TestCommandRequireName::s_requestFormat =
@@ -81,8 +81,8 @@ BOOST_AUTO_TEST_CASE(RegisterCommandHandler)
8181
bool wasHandlerCalled = false;
8282
auto handler = [&] (auto&&...) { wasHandlerCalled = true; };
8383

84-
m_manager.registerCommandHandler<TestCommandVoidParameters>("test-void", handler);
85-
m_manager.registerCommandHandler<TestCommandRequireName>("test-require-name", handler);
84+
m_manager.registerCommandHandler<TestCommandVoidParameters>(handler);
85+
m_manager.registerCommandHandler<TestCommandRequireName>(handler);
8686
setTopPrefix();
8787

8888
auto testRegisterCommandHandler = [&] (const Name& commandName) {
@@ -93,11 +93,11 @@ BOOST_AUTO_TEST_CASE(RegisterCommandHandler)
9393
testRegisterCommandHandler("/localhost/nfd/test-module/test-void");
9494
BOOST_CHECK(wasHandlerCalled);
9595

96-
testRegisterCommandHandler("/localhost/nfd/test-module/test-require-name");
96+
testRegisterCommandHandler("/localhost/nfd/test-module/test-name-required");
9797
BOOST_CHECK(!wasHandlerCalled);
9898

99-
testRegisterCommandHandler(Name("/localhost/nfd/test-module/test-require-name")
100-
.append(ControlParameters().setName("test-name").wireEncode()));
99+
testRegisterCommandHandler(Name("/localhost/nfd/test-module/test-name-required")
100+
.append(ControlParameters().setName("/foo").wireEncode()));
101101
BOOST_CHECK(wasHandlerCalled);
102102
}
103103

tests/daemon/mgmt/manager-common-fixture.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
22
/*
3-
* Copyright (c) 2014-2022, Regents of the University of California,
3+
* Copyright (c) 2014-2025, Regents of the University of California,
44
* Arizona Board of Regents,
55
* Colorado State University,
66
* University Pierre & Marie Curie, Sorbonne University,
@@ -38,7 +38,7 @@ InterestSignerFixture::makeControlCommandRequest(Name commandName,
3838
ndn::security::SignedInterestFormat format,
3939
const Name& identity)
4040
{
41-
commandName.append(tlv::GenericNameComponent, params.wireEncode());
41+
commandName.append(params.wireEncode());
4242

4343
switch (format) {
4444
case ndn::security::SignedInterestFormat::V02:

0 commit comments

Comments
 (0)