X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fnetwork%2Fnetworkd-manager.c;h=6998562dc06cd94b8af01fcecdefe50000084a0f;hp=d59b9139a3691e5795ef8afe2bbb09e03aeb45d8;hb=bf5332d2bf2a1acbba9daacf40570a4addbd3411;hpb=cde93897cdefdd7c7f66c400a61e42ceee5f6a46 diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c index d59b9139a..6998562dc 100644 --- a/src/network/networkd-manager.c +++ b/src/network/networkd-manager.c @@ -22,6 +22,7 @@ #include "path-util.h" #include "networkd.h" #include "libudev-private.h" +#include "udev-util.h" int manager_new(Manager **ret) { _cleanup_manager_free_ Manager *m = NULL; @@ -156,67 +157,54 @@ static int manager_process_link(Manager *m, struct udev_device *device) { } int manager_udev_enumerate_links(Manager *m) { + _cleanup_udev_enumerate_unref_ struct udev_enumerate *e = NULL; struct udev_list_entry *item = NULL, *first = NULL; - struct udev_enumerate *e; int r; assert(m); e = udev_enumerate_new(m->udev); - if (!e) { - r = -ENOMEM; - goto finish; - } + if (!e) + return -ENOMEM; r = udev_enumerate_add_match_subsystem(e, "net"); if (r < 0) - goto finish; + return r; r = udev_enumerate_scan_devices(e); if (r < 0) - goto finish; + return r; first = udev_enumerate_get_list_entry(e); udev_list_entry_foreach(item, first) { - struct udev_device *d; + _cleanup_udev_device_unref_ struct udev_device *d = NULL; int k; d = udev_device_new_from_syspath(m->udev, udev_list_entry_get_name(item)); - if (!d) { - r = -ENOMEM; - goto finish; - } + if (!d) + return -ENOMEM; - k = manager_process_link(m, d); - udev_device_unref(d); + if (!udev_device_get_is_initialized(d)) + continue; + k = manager_process_link(m, d); if (k < 0) r = k; } -finish: - if (e) - udev_enumerate_unref(e); - return r; } static int manager_dispatch_link_udev(sd_event_source *source, int fd, uint32_t revents, void *userdata) { Manager *m = userdata; struct udev_monitor *monitor = m->udev_monitor; - struct udev_device *device; - int r; + _cleanup_udev_device_unref_ struct udev_device *device = NULL; device = udev_monitor_receive_device(monitor); if (!device) return -ENOMEM; - r = manager_process_link(m, device); - if (r < 0) - return r; - - udev_device_unref(device); - + manager_process_link(m, device); return 0; } @@ -248,7 +236,6 @@ int manager_udev_listen(Manager *m) { static int manager_rtnl_process_link(sd_rtnl *rtnl, sd_rtnl_message *message, void *userdata) { Manager *m = userdata; Link *link; - unsigned flags; int r, ifindex; r = sd_rtnl_message_link_get_ifindex(message, &ifindex); @@ -259,11 +246,7 @@ static int manager_rtnl_process_link(sd_rtnl *rtnl, sd_rtnl_message *message, vo if (!link) return 0; - r = sd_rtnl_message_link_get_flags(message, &flags); - if (r < 0) - return 0; - - r = link_update_flags(link, flags); + r = link_update(link, message); if (r < 0) return 0;