From: Yu Watanabe Date: Mon, 14 Sep 2020 06:21:04 +0000 (+0900) Subject: udev: re-assign ID_NET_DRIVER=, ID_NET_LINK_FILE=, ID_NET_NAME= properties on non... X-Git-Tag: v247-rc1~78^2~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e0e789c1e97e2cdf1cafe0c6b7d7e43fa054f151;p=thirdparty%2Fsystemd.git udev: re-assign ID_NET_DRIVER=, ID_NET_LINK_FILE=, ID_NET_NAME= properties on non-'add' uevent Previous commit makes drop ID_NET_DRIVER=, ID_NET_LINK_FILE=, and ID_NET_NAME= properties for network interfaces on 'move' uevent. ID_NET_DRIVER= and ID_NET_LINK_FILE= properties are used by networkctl. ID_NET_NAME= may be used by end-user rules or programs. So, let's re-assign them on 'move' uevent. (Note that strictly speaking, this makes them re-assigned on all but 'remove' uevent.) --- diff --git a/rules.d/80-net-setup-link.rules b/rules.d/80-net-setup-link.rules index 6e411a91f0e..bafc3fbc846 100644 --- a/rules.d/80-net-setup-link.rules +++ b/rules.d/80-net-setup-link.rules @@ -4,7 +4,7 @@ SUBSYSTEM!="net", GOTO="net_setup_link_end" IMPORT{builtin}="path_id" -ACTION!="add", GOTO="net_setup_link_end" +ACTION=="remove", GOTO="net_setup_link_end" IMPORT{builtin}="net_setup_link" diff --git a/src/udev/net/link-config.c b/src/udev/net/link-config.c index 77edbb674dc..5c871b67179 100644 --- a/src/udev/net/link-config.c +++ b/src/udev/net/link-config.c @@ -11,6 +11,7 @@ #include "conf-files.h" #include "conf-parser.h" #include "def.h" +#include "device-private.h" #include "device-util.h" #include "ethtool-util.h" #include "fd-util.h" @@ -605,6 +606,7 @@ static int link_config_apply_alternative_names(sd_netlink **rtnl, const link_con int link_config_apply(link_config_ctx *ctx, const link_config *config, sd_device *device, const char **ret_name) { const char *new_name; + DeviceAction a; int r; assert(ctx); @@ -612,6 +614,20 @@ int link_config_apply(link_config_ctx *ctx, const link_config *config, sd_device assert(device); assert(ret_name); + r = device_get_action(device, &a); + if (r < 0) + return log_device_error_errno(device, r, "Failed to get ACTION= property: %m"); + + if (!IN_SET(a, DEVICE_ACTION_ADD, DEVICE_ACTION_BIND, DEVICE_ACTION_MOVE)) { + log_device_debug(device, "Skipping to apply .link settings on '%s' uevent.", device_action_to_string(a)); + + r = sd_device_get_sysname(device, ret_name); + if (r < 0) + return log_device_error_errno(device, r, "Failed to get sysname: %m"); + + return 0; + } + r = link_config_apply_ethtool_settings(&ctx->ethtool_fd, config, device); if (r < 0) return r; @@ -620,9 +636,17 @@ int link_config_apply(link_config_ctx *ctx, const link_config *config, sd_device if (r < 0) return r; - r = link_config_generate_new_name(ctx, config, device, &new_name); - if (r < 0) - return r; + if (a == DEVICE_ACTION_MOVE) { + log_device_debug(device, "Skipping to apply Name= and NamePolicy= on '%s' uevent.", device_action_to_string(a)); + + r = sd_device_get_sysname(device, &new_name); + if (r < 0) + return log_device_error_errno(device, r, "Failed to get sysname: %m"); + } else { + r = link_config_generate_new_name(ctx, config, device, &new_name); + if (r < 0) + return r; + } r = link_config_apply_alternative_names(&ctx->rtnl, config, device, new_name); if (r < 0)