chiark / gitweb /
networkd: add support for IPv6 tokens
[elogind.git] / src / network / networkd-manager.c
index 02ab9f95efefc79caefdba8f9d9c81ac2da7a6de..4617f118675505c52f2f811f4d7c75dbef35ea79 100644 (file)
@@ -78,8 +78,6 @@ static int setup_default_address_pool(Manager *m) {
         return 0;
 }
 
-int manager_connect_bus(Manager *m);
-
 static int on_bus_retry(sd_event_source *s, usec_t usec, void *userdata) {
         Manager *m = userdata;
 
@@ -176,6 +174,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");
@@ -437,10 +443,6 @@ int manager_new(Manager **ret) {
         if (r < 0)
                 return r;
 
-        r = manager_connect_bus(m);
-        if (r < 0)
-                return r;
-
         r = manager_connect_udev(m);
         if (r < 0)
                 return r;
@@ -487,6 +489,8 @@ void manager_free(Manager *m) {
         while ((network = m->networks))
                 network_free(network);
 
+        hashmap_free(m->networks_by_name);
+
         while ((netdev = hashmap_first(m->netdevs)))
                 netdev_unref(netdev);
         hashmap_free(m->netdevs);