From 299ad32d48c01d1529affddc612198c60733f23c Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Mon, 4 Mar 2019 12:19:05 +0900 Subject: [PATCH] network: do not configure interfaces under renaming --- src/network/networkd-link.c | 11 +++++++++++ src/network/networkd-manager.c | 13 ++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index a5d4ede374..9e3cd71a09 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -31,6 +31,7 @@ #include "strv.h" #include "sysctl-util.h" #include "tmpfile-util.h" +#include "udev-util.h" #include "util.h" #include "virt.h" @@ -3624,6 +3625,16 @@ int link_add(Manager *m, sd_netlink_message *message, Link **ret) { return 0; } + r = device_is_renaming(device); + if (r < 0) { + log_link_warning_errno(link, r, "Failed to determine the device is renamed or not: %m"); + goto failed; + } + if (r > 0) { + log_link_debug(link, "Interface is under renaming, pending initialization."); + return 0; + } + r = link_initialized(link, device); if (r < 0) goto failed; diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c index 079cd3e1d1..c87f907957 100644 --- a/src/network/networkd-manager.c +++ b/src/network/networkd-manager.c @@ -26,6 +26,7 @@ #include "strv.h" #include "sysctl-util.h" #include "tmpfile-util.h" +#include "udev-util.h" #include "virt.h" /* use 8 MB for receive socket kernel queue. */ @@ -194,7 +195,7 @@ static int manager_udev_process_link(sd_device_monitor *monitor, sd_device *devi return 0; } - if (!STR_IN_SET(action, "add", "change")) { + if (!STR_IN_SET(action, "add", "change", "move")) { log_device_debug(device, "Ignoring udev %s event for device.", action); return 0; } @@ -205,6 +206,16 @@ static int manager_udev_process_link(sd_device_monitor *monitor, sd_device *devi return 0; } + r = device_is_renaming(device); + if (r < 0) { + log_device_error_errno(device, r, "Failed to determine the device is renamed or not, ignoring '%s' uevent: %m", action); + return 0; + } + if (r > 0) { + log_device_debug(device, "Interface is under renaming, wait for the interface to be renamed: %m"); + return 0; + } + r = link_get(m, ifindex, &link); if (r < 0) { if (r != -ENODEV)