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

index bcf193b08994176409b0b1cae28757fae4bbf72a..69cc90544f41ef8c5514644c9993649d0fc6ef88 100644 (file)
@@ -3047,25 +3047,9 @@ int link_update(Link *link, sd_netlink_message *m) {
                 if (r < 0)
                         return log_link_warning_errno(link, r, "Could not update MAC address in DHCPv6 client: %m");
 
-                if (link->radv) {
-                        bool restart = sd_radv_is_running(link->radv);
-
-                        if (restart) {
-                                r = sd_radv_stop(link->radv);
-                                if (r < 0)
-                                        return log_link_warning_errno(link, r, "Could not stop Router Advertisement: %m");
-                        }
-
-                        r = sd_radv_set_mac(link->radv, &link->mac);
-                        if (r < 0)
-                                return log_link_warning_errno(link, r, "Could not update MAC for Router Advertisement: %m");
-
-                        if (restart) {
-                                r = sd_radv_start(link->radv);
-                                if (r < 0)
-                                        return log_link_warning_errno(link, r, "Could not restart Router Advertisement: %m");
-                        }
-                }
+                r = dhcp6_update_mac(link);
+                if (r < 0)
+                        return log_link_warning_errno(link, r, "Could not update MAC address for Router Advertisement: %m");
 
                 if (link->ndisc) {
                         r = sd_ndisc_set_mac(link->ndisc, &link->mac);
index 81350a3e059b88b885c2c302f54b2535175600f0..dbdbdef80d6a9e95540cf64c4eb6928c3f46608d 100644 (file)
@@ -686,6 +686,36 @@ int radv_configure(Link *link) {
         return 0;
 }
 
+int radv_update_mac(Link *link) {
+        bool restart;
+        int r;
+
+        assert(link);
+
+        if (!link->radv)
+                return 0;
+
+        restart = sd_radv_is_running(link->radv);
+
+        if (restart) {
+                r = sd_radv_stop(link->radv);
+                if (r < 0)
+                        return r;
+        }
+
+        r = sd_radv_set_mac(link->radv, &link->mac);
+        if (r < 0)
+                return r;
+
+        if (restart) {
+                r = sd_radv_start(link->radv);
+                if (r < 0)
+                        return r;
+        }
+
+        return 0;
+}
+
 int radv_add_prefix(
                 Link *link,
                 const struct in6_addr *prefix,
index af554aeef78c8590ba7f241a7c224bd0b80329c0..52ea2f2a3723a91ce2ff423ca726844331b71601 100644 (file)
@@ -50,6 +50,7 @@ void network_verify_route_prefixes(Network *network);
 
 int radv_emit_dns(Link *link);
 int radv_configure(Link *link);
+int radv_update_mac(Link *link);
 int radv_add_prefix(Link *link, const struct in6_addr *prefix, uint8_t prefix_len,
                     uint32_t lifetime_preferred, uint32_t lifetime_valid);