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*/)
 {