mirror of
https://github.com/systemd/systemd.git
synced 2025-01-23 02:04:32 +03:00
udev: link-config - move naming policy from udev rules
This introduces a new key NamePolicy, which takes an ordered list of naming policies. The first successful one is applide. If all fail the value of Name (if any) is used. The possible policies are 'onboard', 'slot', 'path' and 'mac'. This patch introduces a default link file, which replaces the equivalent udev rule.
This commit is contained in:
parent
2a73e0d39a
commit
daeb71a36a
@ -83,7 +83,7 @@ userunitdir=$(prefix)/lib/systemd/user
|
||||
userpresetdir=$(prefix)/lib/systemd/user-preset
|
||||
tmpfilesdir=$(prefix)/lib/tmpfiles.d
|
||||
sysctldir=$(prefix)/lib/sysctl.d
|
||||
linkdir=$(prefix)/lib/net/links
|
||||
linksdir=$(prefix)/lib/net/links
|
||||
pkgincludedir=$(includedir)/systemd
|
||||
systemgeneratordir=$(rootlibexecdir)/system-generators
|
||||
usergeneratordir=$(prefix)/lib/systemd/user-generators
|
||||
@ -2214,6 +2214,9 @@ INSTALL_DIRS += \
|
||||
$(sysconfdir)/udev/rules.d \
|
||||
$(sysconfdir)/udev/hwdb.d
|
||||
|
||||
dist_links_DATA = \
|
||||
links/99-default.link
|
||||
|
||||
dist_udevrules_DATA += \
|
||||
rules/99-systemd.rules \
|
||||
rules/42-usb-hid-pm.rules \
|
||||
@ -2228,7 +2231,6 @@ dist_udevrules_DATA += \
|
||||
rules/75-net-description.rules \
|
||||
rules/75-tty-description.rules \
|
||||
rules/78-sound-card.rules \
|
||||
rules/80-net-name-slot.rules \
|
||||
rules/85-net-configure-link.rules \
|
||||
rules/95-udev-late.rules
|
||||
|
||||
|
2
links/99-default.link
Normal file
2
links/99-default.link
Normal file
@ -0,0 +1,2 @@
|
||||
[Link]
|
||||
NamePolicy=onboard slot path
|
@ -1,14 +0,0 @@
|
||||
# do not edit this file, it will be overwritten on update
|
||||
|
||||
ACTION!="add", GOTO="net_name_slot_end"
|
||||
SUBSYSTEM!="net", GOTO="net_name_slot_end"
|
||||
NAME!="", GOTO="net_name_slot_end"
|
||||
|
||||
IMPORT{cmdline}="net.ifnames"
|
||||
ENV{net.ifnames}=="0", GOTO="net_name_slot_end"
|
||||
|
||||
NAME=="", ENV{ID_NET_NAME_ONBOARD}!="", NAME="$env{ID_NET_NAME_ONBOARD}"
|
||||
NAME=="", ENV{ID_NET_NAME_SLOT}!="", NAME="$env{ID_NET_NAME_SLOT}"
|
||||
NAME=="", ENV{ID_NET_NAME_PATH}!="", NAME="$env{ID_NET_NAME_PATH}"
|
||||
|
||||
LABEL="net_name_slot_end"
|
@ -6004,7 +6004,7 @@ bool restore_state(void) {
|
||||
r = read_one_line_file("/proc/cmdline", &line);
|
||||
if (r < 0) {
|
||||
log_warning("Failed to read /proc/cmdline, ignoring: %s", strerror(-r));
|
||||
return 0;
|
||||
return true; /* something is very wrong, let's not make it worse */
|
||||
}
|
||||
|
||||
FOREACH_WORD_QUOTED(w, l, line, state)
|
||||
|
@ -20,6 +20,7 @@ Match.Driver, config_parse_string, 0, offsetof(link
|
||||
Match.Type, config_parse_string, 0, offsetof(link_config, match_type)
|
||||
Link.Description, config_parse_string, 0, offsetof(link_config, description)
|
||||
Link.MACAddress, config_parse_string, 0, offsetof(link_config, mac)
|
||||
Link.NamePolicy, config_parse_strv, 0, offsetof(link_config, name_policy)
|
||||
Link.Name, config_parse_string, 0, offsetof(link_config, name)
|
||||
Link.MTU, config_parse_unsigned, 0, offsetof(link_config, mtu)
|
||||
Link.SpeedMBytes, config_parse_unsigned, 0, offsetof(link_config, speed)
|
||||
|
@ -34,6 +34,7 @@
|
||||
#include "path-util.h"
|
||||
#include "conf-parser.h"
|
||||
#include "conf-files.h"
|
||||
#include "fileio.h"
|
||||
|
||||
struct link_config_ctx {
|
||||
LIST_HEAD(link_config, links);
|
||||
@ -308,8 +309,27 @@ static int rtnl_set_properties(sd_rtnl *rtnl, int ifindex, const char *name, con
|
||||
return 0;
|
||||
}
|
||||
|
||||
static bool enable_name_policy(void) {
|
||||
_cleanup_free_ char *line;
|
||||
char *w, *state;
|
||||
int r;
|
||||
size_t l;
|
||||
|
||||
r = read_one_line_file("/proc/cmdline", &line);
|
||||
if (r < 0) {
|
||||
log_warning("Failed to read /proc/cmdline, ignoring: %s", strerror(-r));
|
||||
return true; /* something is very wrong, let's not make it worse */
|
||||
}
|
||||
|
||||
FOREACH_WORD_QUOTED(w, l, line, state)
|
||||
if (strneq(w, "net.ifnames=0", l))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int link_config_apply(link_config_ctx *ctx, link_config *config, struct udev_device *device) {
|
||||
const char *name;
|
||||
const char *name, *new_name = NULL;
|
||||
int r, ifindex;
|
||||
|
||||
name = udev_device_get_sysname(device);
|
||||
@ -355,7 +375,35 @@ int link_config_apply(link_config_ctx *ctx, link_config *config, struct udev_dev
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
r = rtnl_set_properties(ctx->rtnl, ifindex, config->name, config->mac, config->mtu);
|
||||
if (config->name_policy && enable_name_policy()) {
|
||||
char **policy;
|
||||
|
||||
STRV_FOREACH(policy, config->name_policy) {
|
||||
if (streq(*policy, "onboard")) {
|
||||
new_name = udev_device_get_property_value(device, "ID_NET_NAME_ONBOARD");
|
||||
if (new_name)
|
||||
break;
|
||||
} else if (streq(*policy, "slot")) {
|
||||
new_name = udev_device_get_property_value(device, "ID_NET_NAME_SLOT");
|
||||
if (new_name)
|
||||
break;
|
||||
} else if (streq(*policy, "path")) {
|
||||
new_name = udev_device_get_property_value(device, "ID_NET_NAME_PATH");
|
||||
if (new_name)
|
||||
break;
|
||||
} else if (streq(*policy, "mac")) {
|
||||
new_name = udev_device_get_property_value(device, "ID_NET_NAME_MAC");
|
||||
if (new_name)
|
||||
break;
|
||||
} else
|
||||
log_warning("Invalid link naming policy '%s', ignoring.", *policy);
|
||||
}
|
||||
}
|
||||
|
||||
if (!new_name && config->name)
|
||||
new_name = config->name;
|
||||
|
||||
r = rtnl_set_properties(ctx->rtnl, ifindex, new_name, config->mac, config->mtu);
|
||||
if (r < 0) {
|
||||
log_warning("Could not set Name, MACAddress or MTU on %s", name);
|
||||
return r;
|
||||
|
@ -39,6 +39,7 @@ struct link_config {
|
||||
|
||||
char *description;
|
||||
char *mac;
|
||||
char **name_policy;
|
||||
char *name;
|
||||
unsigned int mtu;
|
||||
unsigned int speed;
|
||||
|
Loading…
x
Reference in New Issue
Block a user