]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: introduce ManageTemporaryAddress= setting in [DHCPv6PrefixDelegation] section 18227/head
authorYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 12 Jan 2021 21:34:32 +0000 (06:34 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 13 Jan 2021 15:17:05 +0000 (00:17 +0900)
The setting is enabled by default, as NDisc also enabled the flag by
default.

Closes #18208.

man/systemd.network.xml
src/network/networkd-dhcp6.c
src/network/networkd-network-gperf.gperf
src/network/networkd-network.c
src/network/networkd-network.h
test/fuzz/fuzz-network-parser/directives.network

index 5ad9a846f03561633088559a5902cce8aab4cec3..fa80bdc51bbce8a91809f680b881a178bb8aac6b 100644 (file)
@@ -1081,11 +1081,11 @@ IPv6Token=prefixstable:2002:da8:1::</programlisting></para>
           <listitem>
             <para>Takes a boolean. If true the kernel manage temporary addresses created
             from this one as template on behalf of Privacy Extensions
-            <ulink url="https://tools.ietf.org/html/rfc3041">RFC 3041</ulink>.  For this to become
+            <ulink url="https://tools.ietf.org/html/rfc3041">RFC 3041</ulink>. For this to become
             active, the use_tempaddr sysctl setting has to be set to a value greater than zero.
             The given address needs to have a prefix length of 64. This flag allows using privacy
             extensions in a manually configured network, just like if stateless auto-configuration
-            was active. Defaults to false. </para>
+            was active. Defaults to false.</para>
           </listitem>
         </varlistentry>
         <varlistentry>
@@ -2056,6 +2056,13 @@ IPv6Token=prefixstable:2002:da8:1::</programlisting></para>
           addresses. Defaults to unset.</para>
         </listitem>
       </varlistentry>
+
+      <varlistentry>
+        <term><varname>ManageTemporaryAddress=</varname></term>
+        <listitem>
+          <para>As in the [Address] section, but defaults to true.</para>
+        </listitem>
+      </varlistentry>
     </variablelist>
   </refsect1>
 
index 7d5479fc8b433702342c9b5577357e7b050d9e41..9571221da29b9a751185903ca2e4daea49535b6b 100644 (file)
@@ -400,6 +400,7 @@ static int dhcp6_set_pd_address(
         address->family = AF_INET6;
         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);
 
         r = address_configure(address, link, dhcp6_pd_address_handler, true, &ret);
         if (r < 0)
index 00ba043b23efd01991dd4446007efbb53a0ddff3..896a884063781a60ddeef4c8d1d5b62c3200ace5 100644 (file)
@@ -295,6 +295,7 @@ BridgeVLAN.EgressUntagged,                   config_parse_brvlan_untagged,
 DHCPv6PrefixDelegation.SubnetId,             config_parse_dhcp6_pd_subnet_id,                          0,                             offsetof(Network, dhcp6_pd_subnet_id)
 DHCPv6PrefixDelegation.Announce,             config_parse_bool,                                        0,                             offsetof(Network, dhcp6_pd_announce)
 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)
 IPv6SendRA.RouterLifetimeSec,                config_parse_sec,                                         0,                             offsetof(Network, router_lifetime_usec)
 IPv6SendRA.Managed,                          config_parse_bool,                                        0,                             offsetof(Network, router_managed)
index a8d6c58ac4d83deaaeed50982ec5c48b5b8870e7..a74a1e946e56aa0ef550aaf1938245085f62ae95 100644 (file)
@@ -361,6 +361,7 @@ int network_load_one(Manager *manager, OrderedHashmap **networks, const char *fi
                 .dhcp6_pd = -1,
                 .dhcp6_pd_announce = true,
                 .dhcp6_pd_assign = true,
+                .dhcp6_pd_manage_temporary_address = true,
                 .dhcp6_pd_subnet_id = -1,
 
                 .dhcp_server_emit[SD_DHCP_LEASE_DNS].emit = true,
index 656bf6c3669c4923a3f8693ed384b8320e1d686f..bd419f6ef41ebafcf26f21102c789df62a1a5996 100644 (file)
@@ -200,6 +200,7 @@ struct Network {
         int dhcp6_pd;
         bool dhcp6_pd_announce;
         bool dhcp6_pd_assign;
+        bool dhcp6_pd_manage_temporary_address;
         int64_t dhcp6_pd_subnet_id;
         union in_addr_union dhcp6_pd_token;
 
index 3024c65713b362bfc9b1861a9195882c8bcc8bbf..cc91437c164dc514093b6c2621dc0f34c63156b1 100644 (file)
@@ -143,6 +143,7 @@ RouteMetric=
 SubnetId=
 Announce=
 Assign=
+ManageTemporaryAddress=
 Token=
 [Route]
 Destination=