From: Ronan Pigott Date: Thu, 18 Jan 2024 02:27:21 +0000 (-0700) Subject: network: Serialize DHCPv6 DNR servers X-Git-Tag: v257-rc1~171^2~8 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=168ad243cc7d5632e24dfc75f28d8e25c2076f83;p=thirdparty%2Fsystemd.git network: Serialize DHCPv6 DNR servers This serializes DNR servers acquired by V6_DNR option, equivalent to the V4_DNR option. --- diff --git a/src/network/networkd-state-file.c b/src/network/networkd-state-file.c index 14d4572751a..e6c4ec64c01 100644 --- a/src/network/networkd-state-file.c +++ b/src/network/networkd-state-file.c @@ -143,6 +143,25 @@ static int link_put_dns(Link *link, OrderedSet **s) { } } + if (link->dhcp6_lease && link_get_use_dnr(link, NETWORK_CONFIG_SOURCE_DHCP6)) { + sd_dns_resolver *resolvers; + + r = sd_dhcp6_lease_get_dnr(link->dhcp6_lease, &resolvers); + if (r >= 0 ) { + struct in_addr_full **dot_servers; + size_t n = 0; + CLEANUP_ARRAY(dot_servers, n, in_addr_full_array_free); + + r = dns_resolvers_to_dot_addrs(resolvers, r, &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; + } + } + if (link_get_use_dns(link, NETWORK_CONFIG_SOURCE_NDISC)) { NDiscRDNSS *a; @@ -546,7 +565,9 @@ static void serialize_resolvers( const char *lvalue, bool *space, sd_dhcp_lease *lease, - bool conditional) { + bool conditional, + sd_dhcp6_lease *lease6, + bool conditional6) { bool _space = false; if (!space) @@ -571,6 +592,22 @@ static void serialize_resolvers( fputstrv(f, names, NULL, space); } + if (lease6 && conditional6) { + sd_dns_resolver *resolvers; + _cleanup_strv_free_ char **names = NULL; + int r; + + r = sd_dhcp6_lease_get_dnr(lease6, &resolvers); + if (r < 0) + return (void) log_warning_errno(r, "Failed to get DNR from DHCPv6 lease, ignoring."); + + r = dns_resolvers_to_dot_strv(resolvers, r, &names); + if (r < 0) + return (void) log_warning_errno(r, "Failed to get DoT servers from DHCPv6 DNR, ignoring."); + if (r > 0) + fputstrv(f, names, NULL, space); + } + if (lvalue) fputc('\n', f); @@ -725,7 +762,9 @@ static int link_save(Link *link) { * assumed. */ serialize_resolvers(f, NULL, &space, link->dhcp_lease, - link_get_use_dnr(link, NETWORK_CONFIG_SOURCE_DHCP4)); + link_get_use_dnr(link, NETWORK_CONFIG_SOURCE_DHCP4), + link->dhcp6_lease, + link_get_use_dnr(link, NETWORK_CONFIG_SOURCE_DHCP6)); serialize_addresses(f, NULL, &space, NULL,