network_manager: Add support for non-disruptive reconfiguration

This makes it possible for network interfaces to non-disruptively reload
configurations and tell systemd-networkd to reconfigure interaces.

Change-Id: Ia4003854b6fe845a67b954068ec363bc4c622837
Signed-off-by: William A. Kennington III <wak@google.com>
diff --git a/src/network_manager.cpp b/src/network_manager.cpp
index 4ff9e17..ab8a636 100644
--- a/src/network_manager.cpp
+++ b/src/network_manager.cpp
@@ -26,6 +26,10 @@
 constexpr char SYSTEMD_INTERFACE[] = "org.freedesktop.systemd1.Manager";
 constexpr auto FirstBootFile = "/var/lib/network/firstBoot_";
 
+constexpr char NETWORKD_BUSNAME[] = "org.freedesktop.network1";
+constexpr char NETWORKD_PATH[] = "/org/freedesktop/network1";
+constexpr char NETWORKD_INTERFACE[] = "org.freedesktop.network1.Manager";
+
 namespace phosphor
 {
 namespace network
@@ -294,5 +298,21 @@
     }
 }
 
+void Manager::reloadConfigs()
+{
+    try
+    {
+        auto method = bus.new_method_call(NETWORKD_BUSNAME, NETWORKD_PATH,
+                                          NETWORKD_INTERFACE, "Reload");
+        bus.call_noreply(method);
+    }
+    catch (const sdbusplus::exception::exception& ex)
+    {
+        log<level::ERR>("Failed to reload configuration",
+                        entry("ERR=%s", ex.what()));
+        elog<InternalFailure>();
+    }
+}
+
 } // namespace network
 } // namespace phosphor