network: do not require ethtool_get_permanent_macaddr() to get an fd

This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2020-01-08 12:02:01 +01:00
parent 64be35ab02
commit 6666c4faee
3 changed files with 7 additions and 5 deletions

View File

@ -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, &ETHER_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, &ETHER_ADDR_NULL, sizeof(struct ether_addr)) != 0 &&
memcmp(&info->permanent_mac_address, &info->mac_address, sizeof(struct ether_addr)) != 0;

View File

@ -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");

View File

@ -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)