]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: introduce ipv4ll_update_mac()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 2 Oct 2020 11:25:11 +0000 (20:25 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 6 Oct 2020 17:50:50 +0000 (02:50 +0900)
src/network/networkd-ipv4ll.c
src/network/networkd-ipv4ll.h
src/network/networkd-link.c

index d7e4f7b233b1c8d6644214dc0345c1158394511f..706393b2f2a27ac36737aaddec36bb0d0856f19e 100644 (file)
@@ -195,6 +195,36 @@ int ipv4ll_configure(Link *link) {
         return 0;
 }
 
+int ipv4ll_update_mac(Link *link) {
+        bool restart;
+        int r;
+
+        assert(link);
+
+        if (!link->ipv4ll)
+                return 0;
+
+        restart = sd_ipv4ll_is_running(link->ipv4ll) > 0;
+
+        if (restart) {
+                r = sd_ipv4ll_stop(link->ipv4ll);
+                if (r < 0)
+                        return r;
+        }
+
+        r = sd_ipv4ll_set_mac(link->ipv4ll, &link->mac);
+        if (r < 0)
+                return r;
+
+        if (restart) {
+                r = sd_ipv4ll_start(link->ipv4ll);
+                if (r < 0)
+                        return r;
+        }
+
+        return 0;
+}
+
 int link_serialize_ipv4ll(Link *link, FILE *f) {
         struct in_addr address;
         int r;
index 82f67bc1e29b4d974277a6fd358734e578476684..4833e304b6c480eafcd48492dbe8f248dd729350 100644 (file)
@@ -8,6 +8,7 @@
 typedef struct Link Link;
 
 int ipv4ll_configure(Link *link);
+int ipv4ll_update_mac(Link *link);
 int link_serialize_ipv4ll(Link *link, FILE *f);
 int link_deserialize_ipv4ll(Link *link, const char *ipv4ll_address);
 
index 864ad1d132bfd134de14f3a0f95a65aa92a50724..5682a1447b63b7569ae48928adf3309b103d4387 100644 (file)
@@ -3035,25 +3035,9 @@ int link_update(Link *link, sd_netlink_message *m) {
                                mac.ether_addr_octet[4],
                                mac.ether_addr_octet[5]);
 
-                if (link->ipv4ll) {
-                        bool restart = sd_ipv4ll_is_running(link->ipv4ll) > 0;
-
-                        if (restart) {
-                                r = sd_ipv4ll_stop(link->ipv4ll);
-                                if (r < 0)
-                                        return log_link_warning_errno(link, r, "Could not stop IPv4LL client: %m");
-                        }
-
-                        r = sd_ipv4ll_set_mac(link->ipv4ll, &link->mac);
-                        if (r < 0)
-                                return log_link_warning_errno(link, r, "Could not update MAC address in IPv4LL client: %m");
-
-                        if (restart) {
-                                r = sd_ipv4ll_start(link->ipv4ll);
-                                if (r < 0)
-                                        return log_link_warning_errno(link, r, "Could not restart IPv4LL client: %m");
-                        }
-                }
+                r = ipv4ll_update_mac(link);
+                if (r < 0)
+                        return log_link_warning_errno(link, r, "Could not update MAC address in IPv4LL client: %m");
 
                 if (link->dhcp_client) {
                         r = sd_dhcp_client_set_mac(link->dhcp_client,