network: Delay addition of IPv6 Proxy NDP addresses
authorKevin P. Fleming <kevin@km6g.us>
Sat, 6 Feb 2021 15:58:43 +0000 (10:58 -0500)
committerMichael Biebl <biebl@debian.org>
Sun, 7 Aug 2022 13:25:09 +0000 (14:25 +0100)
Setting of IPv6 Proxy NDP addresses must be done at the same
time as static addresses, static routes, and other link attributes
that must be configured when the link is up. Doing this ensures
that they are reconfigured on the link if the link goes down
and returns to service.

(cherry picked from commit 12f7469bbe0142d7f360a29ca2b407ce7f5ff096)

Fixes https://github.com/systemd/systemd-stable/issues/89

(cherry picked from commit d5ea028e46673ef627843e90c3d01ebac8fe0e62)

Gbp-Pq: Name network-Delay-addition-of-IPv6-Proxy-NDP-addresses.patch

src/network/networkd-address.c
src/network/networkd-link.c

index 961b24838553270adbb4934f8826bf0dd127a08b..ef47af4628e9416f8d0f83a41d8569e260285175 100644 (file)
@@ -9,6 +9,7 @@
 #include "netlink-util.h"
 #include "networkd-address-pool.h"
 #include "networkd-address.h"
+#include "networkd-ipv6-proxy-ndp.h"
 #include "networkd-manager.h"
 #include "networkd-network.h"
 #include "parse-util.h"
@@ -903,6 +904,7 @@ int address_configure(
 static int static_address_ready_callback(Address *address) {
         Address *a;
         Link *link;
+        int r;
 
         assert(address);
         assert(address->link);
@@ -927,6 +929,10 @@ static int static_address_ready_callback(Address *address) {
 
         link->addresses_ready = true;
 
+        r = link_set_ipv6_proxy_ndp_addresses(link);
+        if (r < 0)
+                return r;
+
         return link_set_routes(link);
 }
 
@@ -1046,6 +1052,11 @@ int link_set_addresses(Link *link) {
         if (link->address_messages == 0) {
                 link->addresses_configured = true;
                 link->addresses_ready = true;
+
+                r = link_set_ipv6_proxy_ndp_addresses(link);
+                if (r < 0)
+                        return r;
+
                 r = link_set_routes(link);
                 if (r < 0)
                         return r;
index 81203436124be7072542fe11d66c7ccb116ebe19..e8a72233f30c2f4108f45208e8a3dbd9816378d6 100644 (file)
@@ -28,7 +28,6 @@
 #include "networkd-dhcp6.h"
 #include "networkd-fdb.h"
 #include "networkd-ipv4ll.h"
-#include "networkd-ipv6-proxy-ndp.h"
 #include "networkd-link-bus.h"
 #include "networkd-link.h"
 #include "networkd-lldp-tx.h"
@@ -2056,10 +2055,6 @@ int link_configure(Link *link) {
         if (r < 0)
                 return r;
 
-        r = link_set_ipv6_proxy_ndp_addresses(link);
-        if (r < 0)
-                return r;
-
         r = link_set_mac(link);
         if (r < 0)
                 return r;