chiark / gitweb /
importd: add new bus calls for importing local tar and raw images
[elogind.git] / src / network / networkd-manager.c
index e2c8a23e0f2d75d58b2bf1d4d75531e9c06e021c..cffae835f5daf63efc221050b4b9e3b4786b3645 100644 (file)
 #include "networkd.h"
 #include "networkd-netdev.h"
 #include "networkd-link.h"
-#include "network-internal.h"
 #include "libudev-private.h"
 #include "udev-util.h"
 #include "rtnl-util.h"
 #include "bus-util.h"
 #include "def.h"
-#include "mkdir.h"
 #include "virt.h"
 
 #include "sd-rtnl.h"
@@ -174,6 +172,14 @@ int manager_connect_bus(Manager *m) {
         if (r < 0)
                 return log_error_errno(r, "Failed to add link enumerator: %m");
 
+        r = sd_bus_add_fallback_vtable(m->bus, NULL, "/org/freedesktop/network1/network", "org.freedesktop.network1.Network", network_vtable, network_object_find, m);
+        if (r < 0)
+               return log_error_errno(r, "Failed to add network object vtable: %m");
+
+        r = sd_bus_add_node_enumerator(m->bus, NULL, "/org/freedesktop/network1/network", network_node_enumerator, m);
+        if (r < 0)
+                return log_error_errno(r, "Failed to add network enumerator: %m");
+
         r = sd_bus_request_name(m->bus, "org.freedesktop.network1", 0);
         if (r < 0)
                 return log_error_errno(r, "Failed to register name: %m");
@@ -526,13 +532,18 @@ static bool manager_check_idle(void *userdata) {
 int manager_run(Manager *m) {
         assert(m);
 
-        return bus_event_loop_with_idle(
-                        m->event,
-                        m->bus,
-                        "org.freedesktop.network1",
-                        DEFAULT_EXIT_USEC,
-                        manager_check_idle,
-                        m);
+        if (m->bus)
+                return bus_event_loop_with_idle(
+                                m->event,
+                                m->bus,
+                                "org.freedesktop.network1",
+                                DEFAULT_EXIT_USEC,
+                                manager_check_idle,
+                                m);
+        else
+                /* failed to connect to the bus, so we lose exit-on-idle logic,
+                   this should not happen except if dbus is not around at all */
+                return sd_event_loop(m->event);
 }
 
 int manager_load_config(Manager *m) {