network: Serialize DHCPv6 DNR servers

This serializes DNR servers acquired by V6_DNR option, equivalent to the
V4_DNR option.
This commit is contained in:
Ronan Pigott 2024-01-17 19:27:21 -07:00
parent cff8947fac
commit 59b867823f

View file

@ -144,6 +144,26 @@ 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;
@ -554,7 +574,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)
@ -577,6 +599,20 @@ 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;
r = dns_resolvers_to_dot_strv(resolvers, r, &names);
if (r > 0)
fputstrv(f, names, NULL, space);
}
if (lvalue)
fputc('\n', f);
@ -723,7 +759,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,