X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fnetwork%2Fnetworkd-manager.c;h=28de7919daebf83f8211d1bf09867d5d391564bf;hb=49e5b2a93339869703d581a06f8d903f8371ab60;hp=4c1987daa8214fc6030185cb98732e2253caa4c9;hpb=505f8da7325591defe5f751f328bd26915267602;p=elogind.git diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c index 4c1987daa..28de7919d 100644 --- a/src/network/networkd-manager.c +++ b/src/network/networkd-manager.c @@ -182,7 +182,7 @@ bool manager_should_reload(Manager *m) { static int manager_udev_process_link(Manager *m, struct udev_device *device) { Link *link = NULL; - int r; + int r, ifindex; assert(m); assert(device); @@ -190,12 +190,17 @@ static int manager_udev_process_link(Manager *m, struct udev_device *device) { if (!streq_ptr(udev_device_get_action(device), "add")) return 0; - r = link_get(m, udev_device_get_ifindex(device), &link); - if (r < 0) - return r; + ifindex = udev_device_get_ifindex(device); + if (ifindex <= 0) { + log_debug("ignoring udev ADD event for device with invalid ifindex"); + return 0; + } - if (!link) + r = link_get(m, ifindex, &link); + if (r == -ENODEV) return 0; + else if (r < 0) + return r; r = link_initialized(link, device); if (r < 0) @@ -203,32 +208,7 @@ static int manager_udev_process_link(Manager *m, struct udev_device *device) { return 0; } -/* - if (streq_ptr(udev_device_get_action(device), "remove")) { - log_debug("%s: link removed", udev_device_get_sysname(device)); - - if (link) - link_free(link); - } else { - if (link) { - log_debug("%s: link already exists, ignoring", - link->ifname); - return 0; - } - r = link_add(m, device, &link); - if (r < 0) { - log_error("%s: could not handle link: %s", - udev_device_get_sysname(device), - strerror(-r)); - } else - log_debug("%s: link (with ifindex %" PRIu64") added", - link->ifname, link->ifindex); - } - - return 0; -} -*/ static int manager_rtnl_process_link(sd_rtnl *rtnl, sd_rtnl_message *message, void *userdata) { Manager *m = userdata; Link *link = NULL;