diff options
author | Tom Gundersen <teg@jklm.no> | 2014-03-31 17:17:56 +0200 |
---|---|---|
committer | Tom Gundersen <teg@jklm.no> | 2014-03-31 17:17:56 +0200 |
commit | 208612034e16c6af0406fa0572da975bf8747d2e (patch) | |
tree | bb4afded7d6b0922c31f57c39e0f9e293b306383 /src/network | |
parent | 689703f618f99661ca75db7c74984ec0fed27e08 (diff) |
networkd: rewind rtnl message between passing it to functions
This makes updating link status on netdev links work again.
Diffstat (limited to 'src/network')
-rw-r--r-- | src/network/networkd-link.c | 54 | ||||
-rw-r--r-- | 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 752ecae254..973755a3e3 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 ddbdabbff9..d903d0d60e 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); |