]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: Serialize ipv6ra DNR
authorRonan Pigott <ronan@rjp.ie>
Mon, 22 Jan 2024 21:37:42 +0000 (14:37 -0700)
committerRonan Pigott <ronan@rjp.ie>
Mon, 21 Oct 2024 16:10:20 +0000 (09:10 -0700)
Serialize DNR servers acquired by ipv6ra option, same as the V4/V6 DNR
DHCP options.

src/network/networkd-state-file.c

index e6c4ec64c01e12e659666e453f1da3610dc3506d..4cbf6ec92ff592cbffd389f2eddcbad317fed975 100644 (file)
@@ -172,6 +172,24 @@ static int link_put_dns(Link *link, OrderedSet **s) {
                 }
         }
 
+        if (link_get_use_dnr(link, NETWORK_CONFIG_SOURCE_NDISC)) {
+                NDiscDNR *a;
+
+                SET_FOREACH(a, link->ndisc_dnr) {
+                        struct in_addr_full **dot_servers = NULL;
+                        size_t n = 0;
+                        CLEANUP_ARRAY(dot_servers, n, in_addr_full_array_free);
+
+                        r = dns_resolvers_to_dot_addrs(&a->resolver, 1, &dot_servers, &n);
+                        if (r < 0)
+                                return r;
+
+                        r = ordered_set_put_dns_servers(s, link->ifindex, dot_servers, n);
+                        if (r < 0)
+                                return r;
+                }
+        }
+
         return 0;
 }
 
@@ -766,6 +784,12 @@ static int link_save(Link *link) {
                                             link->dhcp6_lease,
                                             link_get_use_dnr(link, NETWORK_CONFIG_SOURCE_DHCP6));
 
+                        if (link_get_use_dnr(link, NETWORK_CONFIG_SOURCE_NDISC)) {
+                                NDiscDNR *dnr;
+                                SET_FOREACH(dnr, link->ndisc_dnr)
+                                        serialize_dnr(f, &dnr->resolver, 1, &space);
+                        }
+
                         serialize_addresses(f, NULL, &space,
                                             NULL,
                                             link->dhcp_lease,