From: Ronan Pigott Date: Mon, 22 Jan 2024 21:37:42 +0000 (-0700) Subject: network: Introduce IPv6RA UseDNR= option X-Git-Tag: v257-rc1~171^2~5 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9c683c0e1f431ea2c0f1c2136128ab2c6be0e08d;p=thirdparty%2Fsystemd.git network: Introduce IPv6RA UseDNR= option Same as the DHCP v4/v6 options, this controls the use of DNR received from ipv6ra. --- diff --git a/man/systemd.network.xml b/man/systemd.network.xml index eb6eaf3ce29..567d41bf238 100644 --- a/man/systemd.network.xml +++ b/man/systemd.network.xml @@ -3431,6 +3431,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 b57785a92a0..25a96eb486d 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 6110bcdec90..53d1297d1a7 100644 --- a/src/network/networkd-ndisc.c +++ b/src/network/networkd-ndisc.c @@ -1912,6 +1912,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 61dd333e1d7..62662654a29 100644 --- a/src/network/networkd-network-gperf.gperf +++ b/src/network/networkd-network-gperf.gperf @@ -309,6 +309,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 6339e25cef1..3691f7730db 100644 --- a/src/network/networkd-network.c +++ b/src/network/networkd-network.c @@ -484,6 +484,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 74fefde07a1..b4ab1179289 100644 --- a/src/network/networkd-network.h +++ b/src/network/networkd-network.h @@ -345,6 +345,7 @@ struct Network { /* NDisc support */ int ndisc; + int ndisc_use_dnr; bool ndisc_use_redirect; int ndisc_use_dns; bool ndisc_use_gateway;