This debug information may be useful when comapring to dropped rtnetlink messages.
-int link_add(Manager *m, struct udev_device *device) {
+int link_add(Manager *m, struct udev_device *device, Link **ret) {
Link *link;
Network *network;
int r;
Link *link;
Network *network;
int r;
ifindex = udev_device_get_ifindex(device);
link = hashmap_get(m->links, &ifindex);
ifindex = udev_device_get_ifindex(device);
link = hashmap_get(m->links, &ifindex);
+ if (link) {
+ *ret = link;
r = link_new(m, device, &link);
if (r < 0)
return r;
r = link_new(m, device, &link);
if (r < 0)
return r;
devtype = udev_device_get_devtype(device);
if (streq_ptr(devtype, "bridge")) {
r = bridge_set_link(m, link);
devtype = udev_device_get_devtype(device);
if (streq_ptr(devtype, "bridge")) {
r = bridge_set_link(m, link);
- if (r < 0)
- return r == -ENOENT ? 0 : r;
+ if (r < 0 && r != -ENOENT)
+ return r;
}
r = network_get(m, device, &network);
}
r = network_get(m, device, &network);
link_free(link);
} else {
link_free(link);
} else {
- r = link_add(m, device);
+ r = link_add(m, device, &link);
if (r < 0) {
if (r == -EEXIST)
log_debug("%s: link already exists, ignoring",
if (r < 0) {
if (r == -EEXIST)
log_debug("%s: link already exists, ignoring",
- udev_device_get_sysname(device));
else
log_error("%s: could not handle link: %s",
udev_device_get_sysname(device),
strerror(-r));
} else
else
log_error("%s: could not handle link: %s",
udev_device_get_sysname(device),
strerror(-r));
} else
- log_debug("%s: link added", udev_device_get_sysname(device));
+ log_debug("%s: link (with ifindex %" PRIu64") added",
+ link->ifname, link->ifindex);
int link_new(Manager *manager, struct udev_device *device, Link **ret);
void link_free(Link *link);
int link_new(Manager *manager, struct udev_device *device, Link **ret);
void link_free(Link *link);
-int link_add(Manager *manager, struct udev_device *device);
+int link_add(Manager *manager, struct udev_device *device, Link **ret);
int link_configure(Link *link);
int link_update(Link *link, sd_rtnl_message *message);
int link_configure(Link *link);
int link_update(Link *link, sd_rtnl_message *message);