1
0
mirror of https://github.com/systemd/systemd.git synced 2024-12-26 03:22:00 +03:00

udev: net_setup_link - don't use Description as Alias

Use Description only internally, and allow Alias to be set
as a separate option. For instance SNMP uses ifalias for
a specific purpose, so let's not write to it by default.
This commit is contained in:
Tom Gundersen 2013-11-25 01:33:04 +01:00
parent 517dcac840
commit d2df0d0ed3
9 changed files with 78 additions and 19 deletions

View File

@ -804,7 +804,13 @@
<varlistentry>
<term><varname>Description</varname></term>
<listitem>
<para>A description of the device. The <literal>ifalias</literal> is set to this value.</para>
<para>A description of the device.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>Alias</varname></term>
<listitem>
<para>The <literal>ifalias</literal> is set to this value.</para>
</listitem>
</varlistentry>
<varlistentry>

View File

@ -129,7 +129,8 @@ int sd_rtnl_message_link_new(uint16_t nlmsg_type, int index, unsigned int type,
struct ifinfomsg *ifi;
int r;
assert_return(nlmsg_type == RTM_NEWLINK || nlmsg_type == RTM_DELLINK || nlmsg_type == RTM_GETLINK, -EINVAL);
assert_return(nlmsg_type == RTM_NEWLINK || nlmsg_type == RTM_DELLINK ||
nlmsg_type == RTM_SETLINK || nlmsg_type == RTM_GETLINK, -EINVAL);
assert_return(index > 0, -EINVAL);
assert_return(ret, -EINVAL);
@ -258,14 +259,15 @@ int sd_rtnl_message_append(sd_rtnl_message *m, unsigned short type, const void *
switch (rtm_type) {
case RTM_NEWLINK:
case RTM_SETLINK:
case RTM_DELLINK:
case RTM_GETLINK:
switch (type) {
case IFLA_IFNAME:
case IFLA_IFALIAS:
case IFLA_QDISC:
return add_rtattr(m, type, data, strlen(data) + 1);
case IFLA_MTU:
return add_rtattr(m, type, data, sizeof(uint32_t));
case IFLA_LINK:
return add_rtattr(m, type, data, sizeof(uint32_t));
case IFLA_STATS:
@ -352,6 +354,7 @@ int sd_rtnl_message_read(sd_rtnl_message *m, unsigned short *type, void **data)
switch (rtm_type) {
case RTM_NEWLINK:
case RTM_SETLINK:
case RTM_DELLINK:
case RTM_GETLINK:
if (!m->next_rta) {
@ -512,6 +515,7 @@ int socket_read_message(sd_rtnl *nl, sd_rtnl_message **ret) {
k = -EIO;
break;
case RTM_NEWLINK:
case RTM_SETLINK:
case RTM_DELLINK:
case RTM_GETLINK:
if (m->hdr->nlmsg_len < NLMSG_LENGTH(sizeof(struct ifinfomsg)))

View File

@ -34,7 +34,7 @@ int rtnl_set_link_name(sd_rtnl *rtnl, int ifindex, const char *name) {
assert(ifindex > 0);
assert(name);
r = sd_rtnl_message_link_new(RTM_NEWLINK, ifindex, 0, 0, &message);
r = sd_rtnl_message_link_new(RTM_SETLINK, ifindex, 0, 0, &message);
if (r < 0)
return r;
@ -49,7 +49,8 @@ int rtnl_set_link_name(sd_rtnl *rtnl, int ifindex, const char *name) {
return 0;
}
int rtnl_set_link_properties(sd_rtnl *rtnl, int ifindex, const struct ether_addr *mac, unsigned mtu) {
int rtnl_set_link_properties(sd_rtnl *rtnl, int ifindex, const char *alias,
const struct ether_addr *mac, unsigned mtu) {
_cleanup_sd_rtnl_message_unref_ sd_rtnl_message *message = NULL;
bool need_update = false;
int r;
@ -57,13 +58,22 @@ int rtnl_set_link_properties(sd_rtnl *rtnl, int ifindex, const struct ether_addr
assert(rtnl);
assert(ifindex > 0);
if (!mac && mtu == 0)
if (!alias && !mac && mtu == 0)
return 0;
r = sd_rtnl_message_link_new(RTM_NEWLINK, ifindex, 0, 0, &message);
r = sd_rtnl_message_link_new(RTM_SETLINK, ifindex, 0, 0, &message);
if (r < 0)
return r;
if (alias) {
r = sd_rtnl_message_append(message, IFLA_IFALIAS, alias);
if (r < 0)
return r;
need_update = true;
}
if (mac) {
r = sd_rtnl_message_append(message, IFLA_ADDRESS, mac);
if (r < 0)

View File

@ -27,7 +27,7 @@
#include "sd-rtnl.h"
int rtnl_set_link_name(sd_rtnl *rtnl, int ifindex, const char *name);
int rtnl_set_link_properties(sd_rtnl *rtnl, int ifindex, const struct ether_addr *mac, unsigned mtu);
int rtnl_set_link_properties(sd_rtnl *rtnl, int ifindex, const char *alias, const struct ether_addr *mac, unsigned mtu);
DEFINE_TRIVIAL_CLEANUP_FUNC(sd_rtnl*, sd_rtnl_unref);
DEFINE_TRIVIAL_CLEANUP_FUNC(sd_rtnl_message*, sd_rtnl_message_unref);

View File

@ -20,7 +20,7 @@
***/
#include <netinet/ether.h>
#include <net/if.h>
#include <linux/if.h>
#include <arpa/inet.h>
#include "net-util.h"
@ -123,6 +123,46 @@ int config_parse_ifname(const char *unit,
return 0;
}
int config_parse_ifalias(const char *unit,
const char *filename,
unsigned line,
const char *section,
const char *lvalue,
int ltype,
const char *rvalue,
void *data,
void *userdata) {
char **s = data;
char *n;
assert(filename);
assert(lvalue);
assert(rvalue);
assert(data);
n = strdup(rvalue);
if (!n)
return log_oom();
if (!ascii_is_valid(n) || strlen(n) >= IFALIASZ) {
log_syntax(unit, LOG_ERR, filename, line, EINVAL,
"Interface alias is not ASCII clean or is too long, ignoring assignment: %s", rvalue);
free(n);
return 0;
}
free(*s);
if (*n)
*s = n;
else {
free(n);
*s = NULL;
}
return 0;
}
int config_parse_hwaddr(const char *unit,
const char *filename,
unsigned line,

View File

@ -43,4 +43,8 @@ int config_parse_ifname(const char *unit, const char *filename, unsigned line,
const char *section, const char *lvalue, int ltype,
const char *rvalue, void *data, void *userdata);
int config_parse_ifalias(const char *unit, const char *filename, unsigned line,
const char *section, const char *lvalue, int ltype,
const char *rvalue, void *data, void *userdata);
int net_parse_inaddr(const char *address, unsigned char *family, void *dst);

View File

@ -25,6 +25,7 @@ Link.MACAddressPolicy, config_parse_mac_policy, 0, offsetof(link
Link.MACAddress, config_parse_hwaddr, 0, offsetof(link_config, mac)
Link.NamePolicy, config_parse_name_policy, 0, offsetof(link_config, name_policy)
Link.Name, config_parse_ifname, 0, offsetof(link_config, name)
Link.Alias, config_parse_ifalias, 0, offsetof(link_config, alias)
Link.MTU, config_parse_unsigned, 0, offsetof(link_config, mtu)
Link.SpeedMBytes, config_parse_unsigned, 0, offsetof(link_config, speed)
Link.Duplex, config_parse_duplex, 0, offsetof(link_config, duplex)

View File

@ -124,6 +124,7 @@ static void link_configs_free(link_config_ctx *ctx) {
free(link->match_driver);
free(link->match_type);
free(link->description);
free(link->alias);
free(link);
}
@ -364,14 +365,6 @@ int link_config_apply(link_config_ctx *ctx, link_config *config, struct udev_dev
if (!old_name)
return -EINVAL;
if (config->description) {
r = udev_device_set_sysattr_value(device, "ifalias",
config->description);
if (r < 0)
log_warning("Could not set description of %s to '%s': %s",
old_name, config->description, strerror(-r));
}
r = ethtool_set_speed(ctx->ethtool_fd, old_name, config->speed, config->duplex);
if (r < 0)
log_warning("Could not set speed or duplex of %s to %u Mbytes (%s): %s",
@ -439,9 +432,9 @@ int link_config_apply(link_config_ctx *ctx, link_config *config, struct udev_dev
mac = config->mac;
}
r = rtnl_set_link_properties(ctx->rtnl, ifindex, mac, config->mtu);
r = rtnl_set_link_properties(ctx->rtnl, ifindex, config->alias, mac, config->mtu);
if (r < 0) {
log_warning("Could not set MACAddress or MTU on %s: %s", old_name, strerror(-r));
log_warning("Could not set Alias, MACAddress or MTU on %s: %s", old_name, strerror(-r));
return r;
}

View File

@ -59,6 +59,7 @@ struct link_config {
MACPolicy mac_policy;
NamePolicy *name_policy;
char *name;
char *alias;
unsigned int mtu;
unsigned int speed;
Duplex duplex;