From 208612034e16c6af0406fa0572da975bf8747d2e Mon Sep 17 00:00:00 2001 From: Tom Gundersen Date: Mon, 31 Mar 2014 17:17:56 +0200 Subject: [PATCH] networkd: rewind rtnl message between passing it to functions This makes updating link status on netdev links work again. --- src/network/networkd-link.c | 54 ++++++++++++++++++---------------- src/network/networkd-manager.c | 8 ++++- 2 files changed, 36 insertions(+), 26 deletions(-) diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 752ecae25..973755a3e 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -1364,36 +1364,40 @@ int link_update(Link *link, sd_rtnl_message *m) { } r = sd_rtnl_message_read_ether_addr(m, IFLA_ADDRESS, &mac); - if (r >= 0 && memcmp(&link->mac.ether_addr_octet, &mac.ether_addr_octet, ETH_ALEN)) { + if (r < 0) + log_debug_link(link, "Could not get MAC address: %s", strerror(-r)); + else { + if (memcmp(link->mac.ether_addr_octet, mac.ether_addr_octet, ETH_ALEN)) { - memcpy(&link->mac.ether_addr_octet, &mac.ether_addr_octet, ETH_ALEN); + memcpy(link->mac.ether_addr_octet, mac.ether_addr_octet, ETH_ALEN); - log_debug_link(link, "MAC address: " - "%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx", - mac.ether_addr_octet[0], - mac.ether_addr_octet[1], - mac.ether_addr_octet[2], - mac.ether_addr_octet[3], - mac.ether_addr_octet[4], - mac.ether_addr_octet[5]); + log_debug_link(link, "MAC address: " + "%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx", + mac.ether_addr_octet[0], + mac.ether_addr_octet[1], + mac.ether_addr_octet[2], + mac.ether_addr_octet[3], + mac.ether_addr_octet[4], + mac.ether_addr_octet[5]); - if (link->ipv4ll) { - r = sd_ipv4ll_set_mac(link->ipv4ll, &link->mac); - if (r < 0) { - log_warning_link(link, "Could not update MAC " - "address in IPv4LL client: %s", - strerror(-r)); - return r; + if (link->ipv4ll) { + r = sd_ipv4ll_set_mac(link->ipv4ll, &link->mac); + if (r < 0) { + log_warning_link(link, "Could not update MAC " + "address in IPv4LL client: %s", + strerror(-r)); + return r; + } } - } - if (link->dhcp_client) { - r = sd_dhcp_client_set_mac(link->dhcp_client, &link->mac); - if (r < 0) { - log_warning_link(link, "Could not update MAC " - "address in DHCP client: %s", - strerror(-r)); - return r; + if (link->dhcp_client) { + r = sd_dhcp_client_set_mac(link->dhcp_client, &link->mac); + if (r < 0) { + log_warning_link(link, "Could not update MAC " + "address in DHCP client: %s", + strerror(-r)); + return r; + } } } } diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c index ddbdabbff..d903d0d60 100644 --- a/src/network/networkd-manager.c +++ b/src/network/networkd-manager.c @@ -323,8 +323,14 @@ static int manager_rtnl_process_link(sd_rtnl *rtnl, sd_rtnl_message *message, vo NetDev *netdev; r = netdev_get(m, name, &netdev); - if (r >= 0) + if (r >= 0) { netdev_set_ifindex(netdev, message); + r = sd_rtnl_message_rewind(message); + if (r < 0) { + log_debug("could not rewind rtnl message"); + return 0; + } + } } r = link_get(m, ifindex, &link); -- 2.30.2