treewide: Move timers out of networkd lib scope
Change-Id: I5fd0fc70d007e0851329172b8421846a78016d57
Signed-off-by: William A. Kennington III <wak@google.com>
diff --git a/src/network_manager_main.cpp b/src/network_manager_main.cpp
index dc51915..170241d 100644
--- a/src/network_manager_main.cpp
+++ b/src/network_manager_main.cpp
@@ -9,43 +9,49 @@
#include <fmt/format.h>
-#include <functional>
-#include <memory>
+#include <chrono>
#include <phosphor-logging/log.hpp>
#include <sdbusplus/bus.hpp>
#include <sdbusplus/server/manager.hpp>
+#include <sdeventplus/clock.hpp>
#include <sdeventplus/event.hpp>
#include <sdeventplus/source/signal.hpp>
+#include <sdeventplus/utility/timer.hpp>
#include <stdplus/signal.hpp>
using phosphor::logging::level;
using phosphor::logging::log;
-constexpr char NETWORK_CONF_DIR[] = "/etc/systemd/network";
constexpr char DEFAULT_OBJPATH[] = "/xyz/openbmc_project/network";
-namespace phosphor
-{
-namespace network
+namespace phosphor::network
{
-std::unique_ptr<Manager> manager = nullptr;
-std::unique_ptr<Timer> reloadTimer = nullptr;
-
-void reloadNetworkd()
+class TimerExecutor : public DelayedExecutor
{
- if (manager)
+ private:
+ using Timer = sdeventplus::utility::Timer<sdeventplus::ClockId::Monotonic>;
+
+ public:
+ TimerExecutor(sdeventplus::Event& event, std::chrono::seconds delay) :
+ delay(delay), timer(event, nullptr)
{
- log<level::INFO>("Sending networkd reload");
- manager->doReloadConfigs();
- log<level::INFO>("Done networkd reload");
}
-}
-void initializeTimers(sdeventplus::Event& event)
-{
- reloadTimer = std::make_unique<Timer>(event, std::bind(reloadNetworkd));
-}
+ void schedule() override
+ {
+ timer.restartOnce(delay);
+ }
+
+ void setCallback(fu2::unique_function<void()>&& cb) override
+ {
+ timer.set_callback([cb = std::move(cb)](Timer&) mutable { cb(); });
+ }
+
+ private:
+ std::chrono::seconds delay;
+ Timer timer;
+};
void termCb(sdeventplus::source::Signal& signal, const struct signalfd_siginfo*)
{
@@ -59,30 +65,23 @@
stdplus::signal::block(SIGTERM);
sdeventplus::source::Signal(event, SIGTERM, termCb).set_floating(true);
- initializeTimers(event);
-
auto bus = sdbusplus::bus::new_default();
- // Attach the bus to sd_event to service user requests
bus.attach_event(event.get(), SD_EVENT_PRIORITY_NORMAL);
-
- // Add sdbusplus Object Manager for the 'root' path of the network manager.
sdbusplus::server::manager_t objManager(bus, DEFAULT_OBJPATH);
- bus.request_name(DEFAULT_BUSNAME);
- manager = std::make_unique<Manager>(bus, DEFAULT_OBJPATH, NETWORK_CONF_DIR);
-
- // RTNETLINK event handler
- netlink::Server svr(event, *manager);
+ TimerExecutor reload(event, std::chrono::seconds(3));
+ Manager manager(bus, reload, DEFAULT_OBJPATH, "/etc/systemd/network");
+ netlink::Server svr(event, manager);
#ifdef SYNC_MAC_FROM_INVENTORY
- auto runtime = inventory::watch(bus, *manager);
+ auto runtime = inventory::watch(bus, manager);
#endif
+ bus.request_name(DEFAULT_BUSNAME);
return event.loop();
}
-} // namespace network
-} // namespace phosphor
+} // namespace phosphor::network
int main(int /*argc*/, char** /*argv*/)
{