[systemd-commits] src/network
Tom Gundersen
tomegun at kemper.freedesktop.org
Mon Mar 31 08:24:55 PDT 2014
src/network/networkd-link.c | 54 ++++++++++++++++++++++-------------------
src/network/networkd-manager.c | 8 +++++-
2 files changed, 36 insertions(+), 26 deletions(-)
New commits:
commit 208612034e16c6af0406fa0572da975bf8747d2e
Author: Tom Gundersen <teg at jklm.no>
Date: Mon Mar 31 17:17:56 2014 +0200
networkd: rewind rtnl message between passing it to functions
This makes updating link status on netdev links work again.
diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c
index 752ecae..973755a 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 ddbdabb..d903d0d 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);
More information about the systemd-commits
mailing list