diff options
-rw-r--r-- | man/systemd.network.xml | 8 | ||||
-rw-r--r-- | src/network/networkd-dhcp6.c | 2 | ||||
-rw-r--r-- | src/network/networkd-network-gperf.gperf | 1 | ||||
-rw-r--r-- | src/network/networkd-network.h | 1 | ||||
-rw-r--r-- | test/fuzz/fuzz-network-parser/directives.network | 1 |
5 files changed, 13 insertions, 0 deletions
diff --git a/man/systemd.network.xml b/man/systemd.network.xml index c119c716ac..7a47132336 100644 --- a/man/systemd.network.xml +++ b/man/systemd.network.xml @@ -2160,6 +2160,14 @@ IPv6Token=prefixstable:2002:da8:1::</programlisting></para> <para>As in the [Address] section, but defaults to true.</para> </listitem> </varlistentry> + + <varlistentry> + <term><varname>RouteMetric=</varname></term> + <listitem> + <para>The metric of the route to the delegated prefix subnet. Takes an unsigned integer in + the range 0…4294967295. When unset or set to 0, the kernel's default value is used.</para> + </listitem> + </varlistentry> </variablelist> </refsect1> diff --git a/src/network/networkd-dhcp6.c b/src/network/networkd-dhcp6.c index f5e66b9457..6f3c02d44d 100644 --- a/src/network/networkd-dhcp6.c +++ b/src/network/networkd-dhcp6.c @@ -284,6 +284,7 @@ static int dhcp6_set_pd_route(Link *link, const union in_addr_union *prefix, con route->dst = *prefix; route->dst_prefixlen = 64; route->protocol = RTPROT_DHCP; + route->priority = link->network->dhcp6_pd_route_metric; r = route_configure(route, link, dhcp6_pd_route_handler, &ret); if (r < 0) @@ -399,6 +400,7 @@ static int dhcp6_set_pd_address( address->cinfo.ifa_prefered = lifetime_preferred; address->cinfo.ifa_valid = lifetime_valid; SET_FLAG(address->flags, IFA_F_MANAGETEMPADDR, link->network->dhcp6_pd_manage_temporary_address); + address->route_metric = link->network->dhcp6_pd_route_metric; r = address_configure(address, link, dhcp6_pd_address_handler, &ret); if (r < 0) diff --git a/src/network/networkd-network-gperf.gperf b/src/network/networkd-network-gperf.gperf index 43e4d30bea..50aab8de6d 100644 --- a/src/network/networkd-network-gperf.gperf +++ b/src/network/networkd-network-gperf.gperf @@ -309,6 +309,7 @@ DHCPv6PrefixDelegation.Announce, config_parse_bool, DHCPv6PrefixDelegation.Assign, config_parse_bool, 0, offsetof(Network, dhcp6_pd_assign) DHCPv6PrefixDelegation.ManageTemporaryAddress, config_parse_bool, 0, offsetof(Network, dhcp6_pd_manage_temporary_address) DHCPv6PrefixDelegation.Token, config_parse_dhcp6_pd_token, 0, offsetof(Network, dhcp6_pd_token) +DHCPv6PrefixDelegation.RouteMetric, config_parse_uint32, 0, offsetof(Network, dhcp6_pd_route_metric) IPv6SendRA.RouterLifetimeSec, config_parse_sec, 0, offsetof(Network, router_lifetime_usec) IPv6SendRA.Managed, config_parse_bool, 0, offsetof(Network, router_managed) IPv6SendRA.OtherInformation, config_parse_bool, 0, offsetof(Network, router_other_information) diff --git a/src/network/networkd-network.h b/src/network/networkd-network.h index e36dada344..db0fbbdf1a 100644 --- a/src/network/networkd-network.h +++ b/src/network/networkd-network.h @@ -219,6 +219,7 @@ struct Network { bool dhcp6_pd_assign; bool dhcp6_pd_manage_temporary_address; int64_t dhcp6_pd_subnet_id; + uint32_t dhcp6_pd_route_metric; union in_addr_union dhcp6_pd_token; /* Bridge Support */ diff --git a/test/fuzz/fuzz-network-parser/directives.network b/test/fuzz/fuzz-network-parser/directives.network index a938394bab..467854728e 100644 --- a/test/fuzz/fuzz-network-parser/directives.network +++ b/test/fuzz/fuzz-network-parser/directives.network @@ -147,6 +147,7 @@ Announce= Assign= ManageTemporaryAddress= Token= +RouteMetric= [Route] Destination= Protocol= |