X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fnetwork%2Fnetworkd-manager.c;h=c28f3d9813eba042901eb2ec7254d9faec06a9bb;hb=a9bc6d2df16c1d9f8a99d2cc9be2babf62bd173f;hp=6a57a80147c1a0fddbb664ceb792e1b4d964e463;hpb=f579559b3a14c1f1ef96c372e7626c4733e6ef7d;p=elogind.git diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c index 6a57a8014..c28f3d981 100644 --- a/src/network/networkd-manager.c +++ b/src/network/networkd-manager.c @@ -31,7 +31,7 @@ int manager_new(Manager **ret) { if (!m) return -ENOMEM; - r = sd_event_new(&m->event); + r = sd_event_default(&m->event); if (r < 0) return r; @@ -73,11 +73,21 @@ int manager_new(Manager **ret) { } void manager_free(Manager *m) { + Network *network; + Link *link; + udev_monitor_unref(m->udev_monitor); udev_unref(m->udev); sd_event_source_unref(m->udev_event_source); sd_event_unref(m->event); + + while ((network = m->networks)) + network_free(network); + + while ((link = hashmap_first(m->links))) + link_free(link); hashmap_free(m->links); + strv_free(m->network_dirs); sd_rtnl_unref(m->rtnl); @@ -91,6 +101,8 @@ static int manager_process_link(Manager *m, struct udev_device *device) { if (streq_ptr(udev_device_get_action(device), "remove")) { uint64_t ifindex; + log_debug("Link removed: %s", udev_device_get_sysname(device)); + ifindex = udev_device_get_ifindex(device); link = hashmap_get(m->links, &ifindex); if (!link) @@ -98,6 +110,8 @@ static int manager_process_link(Manager *m, struct udev_device *device) { link_free(link); } else { + log_debug("New link: %s", udev_device_get_sysname(device)); + r = link_add(m, device); if (r < 0) { log_error("Could not handle link %s: %s", @@ -126,10 +140,6 @@ int manager_udev_enumerate_links(Manager *m) { if (r < 0) goto finish; - r = udev_enumerate_add_match_tag(e, "systemd-networkd"); - if (r < 0) - goto finish; - r = udev_enumerate_scan_devices(e); if (r < 0) goto finish; @@ -187,12 +197,6 @@ int manager_udev_listen(Manager *m) { return r; } - r = udev_monitor_filter_add_match_tag(m->udev_monitor, "systemd-networkd"); - if (r < 0) { - log_error("Could not add udev monitor filter: %s", strerror(-r)); - return r; - } - r = udev_monitor_enable_receiving(m->udev_monitor); if (r < 0) { log_error("Could not enable udev monitor"); @@ -208,3 +212,13 @@ int manager_udev_listen(Manager *m) { return 0; } + +int manager_rtnl_listen(Manager *m) { + int r; + + r = sd_rtnl_attach_event(m->rtnl, m->event, 0); + if (r < 0) + return r; + + return 0; +}