From 6666c4faeefa6e82704308cb3b77efad704bb80c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Wed, 8 Jan 2020 12:02:01 +0100 Subject: [PATCH] network: do not require ethtool_get_permanent_macaddr() to get an fd --- src/network/networkctl.c | 3 +-- src/network/networkd-link.c | 3 +-- src/shared/ethtool-util.c | 6 +++++- 3 files changed, 7 insertions(+), 5 deletions(-) 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)