]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: update MAC address in IPv4ACD client for DHCP4 17342/head
authorYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 14 Oct 2020 06:29:47 +0000 (15:29 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 14 Oct 2020 06:38:29 +0000 (15:38 +0900)
src/network/networkd-dhcp4.c

index 76d1926a08e2a7e5ed33681213eff29a8b0f9918..80b2d4fb00667280d8e14ae25f3c565bb4f8d139 100644 (file)
@@ -651,6 +651,34 @@ static int dhcp4_configure_dad(Link *link) {
         return 0;
 }
 
+static int dhcp4_dad_update_mac(Link *link) {
+        bool running;
+        int r;
+
+        assert(link);
+
+        if (!link->dhcp_acd)
+                return 0;
+
+        running = sd_ipv4acd_is_running(link->dhcp_acd);
+
+        r = sd_ipv4acd_stop(link->dhcp_acd);
+        if (r < 0)
+                return r;
+
+        r = sd_ipv4acd_set_mac(link->dhcp_acd, &link->mac);
+        if (r < 0)
+                return r;
+
+        if (running) {
+                r = sd_ipv4acd_start(link->dhcp_acd, true);
+                if (r < 0)
+                        return r;
+        }
+
+        return 0;
+}
+
 static int dhcp4_start_acd(Link *link) {
         union in_addr_union addr;
         struct in_addr old;
@@ -1462,6 +1490,10 @@ int dhcp4_update_mac(Link *link) {
         if (r < 0)
                 return r;
 
+        r = dhcp4_dad_update_mac(link);
+        if (r < 0)
+                return r;
+
         return 0;
 }