From c691f9d98459d5422861e08eb9c43ba25bc3ecba Mon Sep 17 00:00:00 2001 From: Ronan Pigott Date: Wed, 17 Jan 2024 18:16:47 -0700 Subject: [PATCH] network: Introduce UseDNR DHCPv6 option This is equivalent to the DHCPv4 option introduced earlier. --- src/libsystemd-network/dhcp6-option.c | 1 + src/network/networkd-dhcp-common.h | 1 + src/network/networkd-dhcp6.c | 6 ++++++ src/network/networkd-dns.c | 3 +++ src/network/networkd-network-gperf.gperf | 1 + src/network/networkd-network.c | 1 + src/network/networkd-network.h | 1 + 7 files changed, 14 insertions(+) diff --git a/src/libsystemd-network/dhcp6-option.c b/src/libsystemd-network/dhcp6-option.c index 787cc37d00..507cd3547d 100644 --- a/src/libsystemd-network/dhcp6-option.c +++ b/src/libsystemd-network/dhcp6-option.c @@ -206,6 +206,7 @@ bool dhcp6_option_can_request(uint16_t option) { case SD_DHCP6_OPTION_V6_DOTS_RI: case SD_DHCP6_OPTION_V6_DOTS_ADDRESS: case SD_DHCP6_OPTION_IPV6_ADDRESS_ANDSF: + case SD_DHCP6_OPTION_V6_DNR: return true; default: return false; diff --git a/src/network/networkd-dhcp-common.h b/src/network/networkd-dhcp-common.h index 194930a87c..778378f5ff 100644 --- a/src/network/networkd-dhcp-common.h +++ b/src/network/networkd-dhcp-common.h @@ -5,6 +5,7 @@ #include "conf-parser.h" #include "dhcp-duid-internal.h" +#include "dns-resolver-internal.h" #include "in-addr-util.h" #include "set.h" #include "time-util.h" diff --git a/src/network/networkd-dhcp6.c b/src/network/networkd-dhcp6.c index 3f773cbb99..fdab0e0e23 100644 --- a/src/network/networkd-dhcp6.c +++ b/src/network/networkd-dhcp6.c @@ -646,6 +646,12 @@ static int dhcp6_configure(Link *link) { return log_link_debug_errno(link, r, "DHCPv6 CLIENT: Failed to request domains: %m"); } + if (link_get_use_dnr(link, NETWORK_CONFIG_SOURCE_DHCP6)) { + r = sd_dhcp6_client_set_request_option(client, SD_DHCP6_OPTION_V6_DNR); + if (r < 0) + return log_link_debug_errno(link, r, "DHCPv6 CLIENT: Failed to request DNR: %m"); + } + if (link->network->dhcp6_use_captive_portal > 0) { r = sd_dhcp6_client_set_request_option(client, SD_DHCP6_OPTION_CAPTIVE_PORTAL); if (r < 0) diff --git a/src/network/networkd-dns.c b/src/network/networkd-dns.c index fb2b282bc8..b57785a92a 100644 --- a/src/network/networkd-dns.c +++ b/src/network/networkd-dns.c @@ -106,6 +106,9 @@ bool link_get_use_dnr(Link *link, NetworkConfigSource proto) { case NETWORK_CONFIG_SOURCE_DHCP4: n = link->network->dhcp_use_dnr; break; + case NETWORK_CONFIG_SOURCE_DHCP6: + n = link->network->dhcp6_use_dnr; + break; default: assert_not_reached(); } diff --git a/src/network/networkd-network-gperf.gperf b/src/network/networkd-network-gperf.gperf index 89be7e8ae2..61dd333e1d 100644 --- a/src/network/networkd-network-gperf.gperf +++ b/src/network/networkd-network-gperf.gperf @@ -279,6 +279,7 @@ DHCPv4.RapidCommit, config_parse_tristate, DHCPv6.UseAddress, config_parse_bool, 0, offsetof(Network, dhcp6_use_address) DHCPv6.UseDelegatedPrefix, config_parse_bool, 0, offsetof(Network, dhcp6_use_pd_prefix) DHCPv6.UseDNS, config_parse_tristate, 0, offsetof(Network, dhcp6_use_dns) +DHCPv6.UseDNR, config_parse_tristate, 0, offsetof(Network, dhcp6_use_dnr) DHCPv6.UseHostname, config_parse_bool, 0, offsetof(Network, dhcp6_use_hostname) DHCPv6.UseDomains, config_parse_use_domains, 0, offsetof(Network, dhcp6_use_domains) DHCPv6.UseNTP, config_parse_tristate, 0, offsetof(Network, dhcp6_use_ntp) diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c index 873894d82c..6339e25cef 100644 --- a/src/network/networkd-network.c +++ b/src/network/networkd-network.c @@ -408,6 +408,7 @@ int network_load_one(Manager *manager, OrderedHashmap **networks, const char *fi .dhcp6_use_address = true, .dhcp6_use_pd_prefix = true, .dhcp6_use_dns = -1, + .dhcp6_use_dnr = -1, .dhcp6_use_domains = _USE_DOMAINS_INVALID, .dhcp6_use_hostname = true, .dhcp6_use_ntp = -1, diff --git a/src/network/networkd-network.h b/src/network/networkd-network.h index fbcc5be9c5..74fefde07a 100644 --- a/src/network/networkd-network.h +++ b/src/network/networkd-network.h @@ -186,6 +186,7 @@ struct Network { bool dhcp6_send_hostname; bool dhcp6_send_hostname_set; int dhcp6_use_dns; + int dhcp6_use_dnr; bool dhcp6_use_hostname; int dhcp6_use_ntp; bool dhcp6_use_captive_portal; -- 2.25.1