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=