return 1; /* needs reconfigure */
}
-static int link_update_permanent_hardware_address_from_ethtool(Link *link, sd_netlink_message *message) {
- int r;
-
- assert(link);
- assert(link->manager);
- assert(message);
-
- if (link->ethtool_permanent_hw_addr_read)
- return 0;
-
- /* When udevd is running, read the permanent hardware address after the interface is
- * initialized by udevd. Otherwise, ethtool may not work correctly. See issue #22538.
- * When udevd is not running, read the value when the interface is detected. */
- if (udev_available() && !link->dev)
- return 0;
-
- /* If the interface does not have a hardware address, then it will not have a permanent address either. */
- r = netlink_message_read_hw_addr(message, IFLA_ADDRESS, NULL);
- if (r == -ENODATA)
- return 0;
- if (r < 0)
- return log_link_debug_errno(link, r, "Failed to read IFLA_ADDRESS attribute: %m");
-
- link->ethtool_permanent_hw_addr_read = true;
-
- r = ethtool_get_permanent_hw_addr(&link->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");
-
- return 0;
-}
-
static int link_update_permanent_hardware_address(Link *link, sd_netlink_message *message) {
int r;
return 0;
r = netlink_message_read_hw_addr(message, IFLA_PERM_ADDRESS, &link->permanent_hw_addr);
- if (r < 0) {
- if (r != -ENODATA)
- return log_link_debug_errno(link, r, "Failed to read IFLA_PERM_ADDRESS attribute: %m");
-
- /* Fallback to ethtool for kernels older than v5.6 (f74877a5457d34d604dba6dbbb13c4c05bac8b93). */
- r = link_update_permanent_hardware_address_from_ethtool(link, message);
- if (r < 0)
- return r;
- }
+ if (r == -ENODATA)
+ return 0;
+ if (r < 0)
+ return log_link_debug_errno(link, r, "Failed to read IFLA_PERM_ADDRESS attribute: %m");
if (link->permanent_hw_addr.length > 0)
log_link_debug(link, "Saved permanent hardware address: %s", HW_ADDR_TO_STR(&link->permanent_hw_addr));