chiark / gitweb /
networkd: listen to changes to the MAC address
[elogind.git] / src / network / networkd-link.c
index 61e257c1d53b1db4968b2089bb1e1ab7b6b11adc..416eb5648335225622c44c02ee5a957f3bee4b49 100644 (file)
@@ -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;
                 }
         }