From: Tom Gundersen Date: Wed, 5 Mar 2014 10:53:26 +0000 (+0100) Subject: networkd: listen to changes to the MAC address X-Git-Tag: v211~111 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=69629de9c820dd41fffb1bf9b69d6d5b319c19c9 networkd: listen to changes to the MAC address Bridges will change their MAC address when other devices are enslaved. We need the correct MAC address to acquire a DHCP lease, so take note of it whenever it changes. --- diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 61e257c1d..416eb5648 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -1345,11 +1345,32 @@ int link_update(Link *link, sd_rtnl_message *m) { } while (sd_rtnl_message_read(m, &type, &data) > 0) { - if (type == IFLA_MTU && link->network->dhcp && - link->network->dhcp_mtu && !link->original_mtu) { - link->original_mtu = *(uint16_t *) data; - log_debug_link(link, "saved original MTU: %" PRIu16, - link->original_mtu); + switch(type) { + case IFLA_MTU: + if (link->network->dhcp && link->network->dhcp_mtu && + !link->original_mtu) { + link->original_mtu = *(uint16_t *) data; + log_debug_link(link, "saved original MTU: %" + PRIu16, link->original_mtu); + } + + break; + case IFLA_ADDRESS: + if (memcmp(&link->mac.ether_addr_octet, &data, + ETH_ALEN)) { + memcpy(&link->mac, data, ETH_ALEN); + + log_debug_link(link, "updated MAC address: " + "%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx", + link->mac.ether_addr_octet[0], + link->mac.ether_addr_octet[1], + link->mac.ether_addr_octet[2], + link->mac.ether_addr_octet[3], + link->mac.ether_addr_octet[4], + link->mac.ether_addr_octet[5]); + } + + break; } }