From 9250f56b5bfee3b9020e81064c14302ecd854dd1 Mon Sep 17 00:00:00 2001 From: Ronan Pigott Date: Mon, 22 Jan 2024 14:37:42 -0700 Subject: [PATCH] network: Introduce IPv6RA UseDNR= option Same as the DHCP v4/v6 options, this controls the use of DNR received from ipv6ra. --- man/systemd.network.xml | 10 ++++++++++ src/network/networkd-dns.c | 3 +++ src/network/networkd-ndisc.c | 3 +++ src/network/networkd-network-gperf.gperf | 1 + src/network/networkd-network.c | 1 + src/network/networkd-network.h | 1 + 6 files changed, 19 insertions(+) diff --git a/man/systemd.network.xml b/man/systemd.network.xml index bdd9986f9a4..96833cba409 100644 --- a/man/systemd.network.xml +++ b/man/systemd.network.xml @@ -3353,6 +3353,16 @@ Token=prefixstable:2002:da8:1:: + + UseDNR= + + When true, the DNR servers received in the Router Advertisement will be used. Defaults to + the value of . + + + + + UseDomains= diff --git a/src/network/networkd-dns.c b/src/network/networkd-dns.c index fd5134dc222..09afabd0b40 100644 --- a/src/network/networkd-dns.c +++ b/src/network/networkd-dns.c @@ -109,6 +109,9 @@ bool link_get_use_dnr(Link *link, NetworkConfigSource proto) { case NETWORK_CONFIG_SOURCE_DHCP6: n = link->network->dhcp6_use_dnr; break; + case NETWORK_CONFIG_SOURCE_NDISC: + n = link->network->ndisc_use_dnr; + break; default: assert_not_reached(); } diff --git a/src/network/networkd-ndisc.c b/src/network/networkd-ndisc.c index 03c9ec74a6d..6c67ea4e5e6 100644 --- a/src/network/networkd-ndisc.c +++ b/src/network/networkd-ndisc.c @@ -1868,6 +1868,9 @@ static int ndisc_router_process_encrypted_dns(Link *link, sd_ndisc_router *rt) { sd_dns_resolver *res; _cleanup_(ndisc_dnr_freep) NDiscDNR *new_entry = NULL; + if (!link_get_use_dnr(link, NETWORK_CONFIG_SOURCE_NDISC)) + return 0; + r = sd_ndisc_router_get_sender_address(rt, &router); if (r < 0) return log_link_warning_errno(link, r, "Failed to get gateway address from RA: %m"); diff --git a/src/network/networkd-network-gperf.gperf b/src/network/networkd-network-gperf.gperf index c70bb2de72a..fc920d4e318 100644 --- a/src/network/networkd-network-gperf.gperf +++ b/src/network/networkd-network-gperf.gperf @@ -306,6 +306,7 @@ IPv6AcceptRA.UseAutonomousPrefix, config_parse_bool, IPv6AcceptRA.UseOnLinkPrefix, config_parse_bool, 0, offsetof(Network, ndisc_use_onlink_prefix) IPv6AcceptRA.UsePREF64, config_parse_bool, 0, offsetof(Network, ndisc_use_pref64) IPv6AcceptRA.UseDNS, config_parse_tristate, 0, offsetof(Network, ndisc_use_dns) +IPv6AcceptRA.UseDNR, config_parse_tristate, 0, offsetof(Network, ndisc_use_dnr) IPv6AcceptRA.UseDomains, config_parse_use_domains, 0, offsetof(Network, ndisc_use_domains) IPv6AcceptRA.UseMTU, config_parse_bool, 0, offsetof(Network, ndisc_use_mtu) IPv6AcceptRA.UseHopLimit, config_parse_bool, 0, offsetof(Network, ndisc_use_hop_limit) diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c index 512e5f8653b..5d932b391da 100644 --- a/src/network/networkd-network.c +++ b/src/network/networkd-network.c @@ -482,6 +482,7 @@ int network_load_one(Manager *manager, OrderedHashmap **networks, const char *fi .ndisc = -1, .ndisc_use_redirect = true, .ndisc_use_dns = -1, + .ndisc_use_dnr = -1, .ndisc_use_gateway = true, .ndisc_use_captive_portal = true, .ndisc_use_route_prefix = true, diff --git a/src/network/networkd-network.h b/src/network/networkd-network.h index e88ff06d257..c1a02206caf 100644 --- a/src/network/networkd-network.h +++ b/src/network/networkd-network.h @@ -343,6 +343,7 @@ struct Network { /* NDisc support */ int ndisc; + int ndisc_use_dnr; bool ndisc_use_redirect; int ndisc_use_dns; bool ndisc_use_gateway;