94 lines
3.4 KiB
Diff
94 lines
3.4 KiB
Diff
From e0e789c1e97e2cdf1cafe0c6b7d7e43fa054f151 Mon Sep 17 00:00:00 2001
|
|
From: Yu Watanabe <watanabe.yu+github@gmail.com>
|
|
Date: Mon, 14 Sep 2020 15:21:04 +0900
|
|
Subject: [PATCH] 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.)
|
|
|
|
Reference:https://github.com/systemd/systemd/commit/e0e789c1e97e2cdf1cafe0c6b7d7e43fa054f151
|
|
Conflict:context adaptation
|
|
---
|
|
diff --git a/rules/80-net-setup-link.rules b/rules/80-net-setup-link.rules
|
|
index 6e411a9..bafc3fb 100644
|
|
--- a/rules/80-net-setup-link.rules
|
|
+++ b/rules/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 5fa439b..9c13906 100644
|
|
--- a/src/udev/net/link-config.c
|
|
+++ b/src/udev/net/link-config.c
|
|
@@ -10,6 +10,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"
|
|
@@ -480,6 +481,7 @@ no_rename:
|
|
|
|
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);
|
|
@@ -487,6 +489,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;
|
|
@@ -495,9 +511,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;
|
|
+ }
|
|
|
|
*ret_name = new_name;
|
|
|
|
--
|
|
2.27.0
|