diff --git a/man/systemd.network.xml b/man/systemd.network.xml
index 25a6bc1467..1a02672713 100644
--- a/man/systemd.network.xml
+++ b/man/systemd.network.xml
@@ -1513,6 +1513,23 @@
+
+
+ UseAutonomousPrefix=
+
+ When true (the default), the autonomous prefix received in the Router Advertisement will be used and take
+ precedence over any statically configured ones.
+
+
+
+
+ UseOnLinkPrefix=
+
+ When true (the default), the onlink prefix received in the Router Advertisement will be used and take
+ precedence over any statically configured ones.
+
+
+
diff --git a/src/network/networkd-ndisc.c b/src/network/networkd-ndisc.c
index e5b8d11555..b8384dfe53 100644
--- a/src/network/networkd-ndisc.c
+++ b/src/network/networkd-ndisc.c
@@ -527,10 +527,13 @@ static void ndisc_router_process_options(Link *link, sd_ndisc_router *rt) {
return;
}
- if (flags & ND_OPT_PI_FLAG_ONLINK)
- (void) ndisc_router_process_onlink_prefix(link, rt);
- if (flags & ND_OPT_PI_FLAG_AUTO)
- (void) ndisc_router_process_autonomous_prefix(link, rt);
+ if (link->network->ipv6_accept_ra_use_onlink_prefix)
+ if (flags & ND_OPT_PI_FLAG_ONLINK)
+ (void) ndisc_router_process_onlink_prefix(link, rt);
+
+ if (link->network->ipv6_accept_ra_use_autonomous_prefix)
+ if (flags & ND_OPT_PI_FLAG_AUTO)
+ (void) ndisc_router_process_autonomous_prefix(link, rt);
break;
}
diff --git a/src/network/networkd-network-gperf.gperf b/src/network/networkd-network-gperf.gperf
index 0a0c24c69a..bd79c5438d 100644
--- a/src/network/networkd-network-gperf.gperf
+++ b/src/network/networkd-network-gperf.gperf
@@ -147,6 +147,8 @@ DHCP.IAID, config_parse_iaid,
DHCP.ListenPort, config_parse_uint16, 0, offsetof(Network, dhcp_client_port)
DHCP.RapidCommit, config_parse_bool, 0, offsetof(Network, rapid_commit)
DHCP.ForceDHCPv6PDOtherInformation, config_parse_bool, 0, offsetof(Network, dhcp6_force_pd_other_information)
+IPv6AcceptRA.UseAutonomousPrefix, config_parse_bool, 0, offsetof(Network, ipv6_accept_ra_use_autonomous_prefix)
+IPv6AcceptRA.UseOnLinkPrefix, config_parse_bool, 0, offsetof(Network, ipv6_accept_ra_use_onlink_prefix)
IPv6AcceptRA.UseDNS, config_parse_bool, 0, offsetof(Network, ipv6_accept_ra_use_dns)
IPv6AcceptRA.UseDomains, config_parse_dhcp_use_domains, 0, offsetof(Network, ipv6_accept_ra_use_domains)
IPv6AcceptRA.RouteTable, config_parse_uint32, 0, offsetof(Network, ipv6_accept_ra_route_table)
diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c
index 21fa270631..2d23322378 100644
--- a/src/network/networkd-network.c
+++ b/src/network/networkd-network.c
@@ -206,6 +206,8 @@ int network_load_one(Manager *manager, const char *filename) {
.multicast = -1,
.allmulticast = -1,
.ipv6_accept_ra_use_dns = true,
+ .ipv6_accept_ra_use_autonomous_prefix = true,
+ .ipv6_accept_ra_use_onlink_prefix = true,
.ipv6_accept_ra_route_table = RT_TABLE_MAIN,
};
diff --git a/src/network/networkd-network.h b/src/network/networkd-network.h
index d1cdba55a6..1b2e51337e 100644
--- a/src/network/networkd-network.h
+++ b/src/network/networkd-network.h
@@ -209,6 +209,8 @@ struct Network {
uint32_t ipv6_mtu;
bool ipv6_accept_ra_use_dns;
+ bool ipv6_accept_ra_use_autonomous_prefix;
+ bool ipv6_accept_ra_use_onlink_prefix;
bool active_slave;
bool primary_slave;
DHCPUseDomains ipv6_accept_ra_use_domains;
diff --git a/test/fuzz/fuzz-network-parser/directives.network b/test/fuzz/fuzz-network-parser/directives.network
index 3fb785baa9..587327735f 100644
--- a/test/fuzz/fuzz-network-parser/directives.network
+++ b/test/fuzz/fuzz-network-parser/directives.network
@@ -177,6 +177,8 @@ Prefix=
UseDomains=
RouteTable=
UseDNS=
+UseAutonomousPrefix=
+UseOnLinkPrefix=
[DHCPServer]
EmitNTP=
PoolSize=