diff --git a/src/network/networkctl.c b/src/network/networkctl.c index 244fb0848c..182208b563 100644 --- a/src/network/networkctl.c +++ b/src/network/networkctl.c @@ -320,9 +320,8 @@ static int decode_link(sd_netlink_message *m, LinkInfo *info, char **patterns) { sd_netlink_message_read_ether_addr(m, IFLA_ADDRESS, &info->mac_address) >= 0 && memcmp(&info->mac_address, ÐER_ADDR_NULL, sizeof(struct ether_addr)) != 0; - _cleanup_close_ int fd = -1; info->has_permanent_mac_address = - ethtool_get_permanent_macaddr(&fd, info->name, &info->permanent_mac_address) >= 0 && + ethtool_get_permanent_macaddr(NULL, info->name, &info->permanent_mac_address) >= 0 && memcmp(&info->permanent_mac_address, ÐER_ADDR_NULL, sizeof(struct ether_addr)) != 0 && memcmp(&info->permanent_mac_address, &info->mac_address, sizeof(struct ether_addr)) != 0; diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index cd370bef57..97de25a3f8 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -618,8 +618,7 @@ static int link_new(Manager *manager, sd_netlink_message *message, Link **ret) { if (r < 0) log_link_debug_errno(link, r, "MAC address not found for new device, continuing without"); - _cleanup_close_ int fd = -1; - r = ethtool_get_permanent_macaddr(&fd, link->ifname, &link->permanent_mac); + r = ethtool_get_permanent_macaddr(NULL, link->ifname, &link->permanent_mac); if (r < 0) log_link_debug_errno(link, r, "Permanent MAC address not found for new device, continuing without: %m"); diff --git a/src/shared/ethtool-util.c b/src/shared/ethtool-util.c index e00ed8e97d..9d62728ca4 100644 --- a/src/shared/ethtool-util.c +++ b/src/shared/ethtool-util.c @@ -9,6 +9,7 @@ #include "conf-parser.h" #include "ethtool-util.h" #include "extract-word.h" +#include "fd-util.h" #include "log.h" #include "memory-util.h" #include "socket-util.h" @@ -219,14 +220,17 @@ int ethtool_get_link_info(int *ethtool_fd, const char *ifname, } int ethtool_get_permanent_macaddr(int *ethtool_fd, const char *ifname, struct ether_addr *ret) { + _cleanup_close_ int fd = -1; _cleanup_free_ struct ethtool_perm_addr *epaddr = NULL; struct ifreq ifr; int r; - assert(ethtool_fd); assert(ifname); assert(ret); + if (!ethtool_fd) + ethtool_fd = &fd; + if (*ethtool_fd < 0) { r = ethtool_connect_or_warn(ethtool_fd, false); if (r < 0)