]> git.ipfire.org Git - thirdparty/systemd.git/blobdiff - src/network/networkd-dhcp6.c
Merge pull request #11827 from keszybz/pkgconfig-variables
[thirdparty/systemd.git] / src / network / networkd-dhcp6.c
index c1fba03f9fe3457e000befdb6b347181494719d3..90361c9f4a361e59195deea82290aa34d4c33e44 100644 (file)
@@ -142,10 +142,15 @@ int dhcp6_lease_pd_prefix_lost(sd_dhcp6_client *client, Link* link) {
                                 continue;
                         }
 
-                        route_add(link, AF_INET6, &pd_prefix, pd_prefix_len,
-                                  0, 0, 0, &route);
-                        route_update(route, NULL, 0, NULL, NULL, 0, 0,
-                                     RTN_UNREACHABLE);
+                        r = route_add(link, AF_INET6, &pd_prefix, pd_prefix_len, 0, 0, 0, &route);
+                        if (r < 0) {
+                                log_link_warning_errno(link, r, "Failed to add unreachable route to delete for DHCPv6 delegated subnet %s/%u: %m",
+                                                       strnull(buf),
+                                                       pd_prefix_len);
+                                continue;
+                        }
+
+                        route_update(route, NULL, 0, NULL, NULL, 0, 0, RTN_UNREACHABLE);
 
                         r = route_remove(route, link, dhcp6_route_remove_handler);
                         if (r < 0) {
@@ -288,7 +293,8 @@ static int dhcp6_lease_pd_prefix_acquired(sd_dhcp6_client *client, Link *link) {
                 }
 
                 if (pd_prefix_len < 64) {
-                        Route *route = NULL;
+                        _cleanup_(route_freep) Route *route = NULL;
+                        uint32_t table;
 
                         (void) in_addr_to_string(AF_INET6, &pd_prefix, &buf);
 
@@ -300,22 +306,26 @@ static int dhcp6_lease_pd_prefix_acquired(sd_dhcp6_client *client, Link *link) {
                                 continue;
                         }
 
-                        route_add(link, AF_INET6, &pd_prefix, pd_prefix_len,
-                                  0, 0, 0, &route);
-                        route_update(route, NULL, 0, NULL, NULL, 0, 0,
-                                     RTN_UNREACHABLE);
+                        table = link_get_dhcp_route_table(link);
+
+                        r = route_add(link, AF_INET6, &pd_prefix, pd_prefix_len, 0, 0, table, &route);
+                        if (r < 0) {
+                                log_link_warning_errno(link, r, "Failed to add unreachable route for DHCPv6 delegated subnet %s/%u: %m",
+                                                       strnull(buf),
+                                                       pd_prefix_len);
+                                continue;
+                        }
+
+                        route_update(route, NULL, 0, NULL, NULL, 0, 0, RTN_UNREACHABLE);
 
                         r = route_configure(route, link, dhcp6_route_handler);
                         if (r < 0) {
                                 log_link_warning_errno(link, r, "Cannot configure unreachable route for delegated subnet %s/%u: %m",
                                                        strnull(buf),
                                                        pd_prefix_len);
-                                route_free(route);
                                 continue;
                         }
 
-                        route_free(route);
-
                         log_link_debug(link, "Configuring unreachable route for %s/%u",
                                        strnull(buf), pd_prefix_len);