From: Yu Watanabe Date: Thu, 4 Nov 2021 17:18:01 +0000 (+0900) Subject: network: read permanent hardware address from netlink message X-Git-Tag: v250-rc1~260^2~3 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4fea97a61dd7bcda52093015ad02f16b20e538bb;p=thirdparty%2Fsystemd.git network: read permanent hardware address from netlink message The attribute was introduced by f74877a5457d34d604dba6dbbb13c4c05bac8b93 (v5.6), so, fallback to ethtool if failed. --- diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index b4a818be9b0..9401f4789cc 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -2400,9 +2400,18 @@ static int link_new(Manager *manager, sd_netlink_message *message, Link **ret) { if (r < 0) return log_link_debug_errno(link, r, "Failed to manage link by its interface name: %m"); - r = ethtool_get_permanent_hw_addr(&manager->ethtool_fd, link->ifname, &link->permanent_hw_addr); - if (r < 0) - log_link_debug_errno(link, r, "Permanent hardware address not found, continuing without: %m"); + r = netlink_message_read_hw_addr(message, IFLA_PERM_ADDRESS, &link->permanent_hw_addr); + if (r < 0) { + if (r != -ENODATA) + log_link_debug_errno(link, r, "Failed to read IFLA_PERM_ADDRESS attribute, ignoring: %m"); + + if (netlink_message_read_hw_addr(message, IFLA_ADDRESS, NULL) >= 0) { + /* Fallback to ethtool, if the link has a hardware address. */ + r = ethtool_get_permanent_hw_addr(&manager->ethtool_fd, link->ifname, &link->permanent_hw_addr); + if (r < 0) + log_link_debug_errno(link, r, "Permanent hardware address not found, continuing without: %m"); + } + } r = ethtool_get_driver(&manager->ethtool_fd, link->ifname, &link->driver); if (r < 0)