From 587c45866555b10d1fde7458ee83708a0cb08a07 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Fri, 27 Apr 2018 04:05:32 +0900 Subject: [PATCH] network: recreate link if its interface name is changed (#8795) If an interface name is changed, then the link state, especially managed or not, may need to be updated, as its corresponding .link or .network files may be different. So, let's once drop the link and recreate a new link object. Fixes #8794. --- src/network/networkd-link.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index fae750be203..97c6d21c07f 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -3215,15 +3215,18 @@ int link_update(Link *link, sd_netlink_message *m) { if (r >= 0 && !streq(ifname, link->ifname)) { log_link_info(link, "Interface name change detected, %s has been renamed to %s.", link->ifname, ifname); - link_free_carrier_maps(link); - - r = free_and_strdup(&link->ifname, ifname); - if (r < 0) - return r; + if (link->state == LINK_STATE_PENDING) { + r = free_and_strdup(&link->ifname, ifname); + if (r < 0) + return r; + } else { + Manager *manager = link->manager; - r = link_new_carrier_maps(link); - if (r < 0) - return r; + link_drop(link); + r = link_add(manager, m, &link); + if (r < 0) + return r; + } } r = sd_netlink_message_read_u32(m, IFLA_MTU, &mtu); -- 2.39.2