]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: move IPv6LinkLocalAddressGenerationMode= to [Network] section
authorYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 30 Jun 2020 08:01:30 +0000 (17:01 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 30 Jun 2020 09:58:52 +0000 (18:58 +0900)
This also moves and renames variables and functions.

Follow-ups for a6f1848a2328cf1493f363968d105cc23019af8a.

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

diff --git a/NEWS b/NEWS
index 49de335a489e9fb7baa6a0a793308d0f811f1174..aaa847031395adff483003c21b0c5bc7b576f0cd 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -212,7 +212,7 @@ CHANGES WITH 246 in spe:
         * systemd-networkd supports a new Group= setting in the [Link] section
           of the .network files, to control the link group.
 
-        * systemd-networkd's [Link] section gained a new
+        * systemd-networkd's [Network] section gained a new
           IPv6LinkLocalAddressGenerationMode= setting, which specifies how IPv6
           link local address is generated.
 
index 6f3e89978f777e90813481964d5132274269ff33..dce81692dfe01060718a16bea6d35b55a47d5e50 100644 (file)
           This happens when multicast routing is enabled.</para>
         </listitem>
       </varlistentry>
-      <varlistentry>
-        <term><varname>IPv6LinkLocalAddressGenerationMode=</varname></term>
-        <listitem>
-          <para>Specifies how IPv6 link local address is generated. Takes one of <literal>eui64</literal>,
-          <literal>none</literal>, <literal>stable-privacy</literal> and <literal>random</literal>.
-          When unset, the kernel's default will be used. Note that if <varname>LinkLocalAdressing=</varname>
-          not configured as <literal>ipv6</literal> then <varname>IPv6LinkLocalAddressGenerationMode=</varname>
-          is ignored.</para>
-        </listitem>
-      </varlistentry>
       <varlistentry>
         <term><varname>Unmanaged=</varname></term>
         <listitem>
             </para>
           </listitem>
         </varlistentry>
+        <varlistentry>
+          <term><varname>IPv6LinkLocalAddressGenerationMode=</varname></term>
+          <listitem>
+            <para>Specifies how IPv6 link local address is generated. Takes one of <literal>eui64</literal>,
+            <literal>none</literal>, <literal>stable-privacy</literal> and <literal>random</literal>.
+            When unset, the kernel's default will be used. Note that if <varname>LinkLocalAdressing=</varname>
+            not configured as <literal>ipv6</literal> then <varname>IPv6LinkLocalAddressGenerationMode=</varname>
+            is ignored.</para>
+          </listitem>
+        </varlistentry>
         <varlistentry>
           <term><varname>IPv4LLRoute=</varname></term>
           <listitem>
index f73d00f697142512e88089fcbf5919e00b70ee3c..b3c0224034b43e5fb4ce291219bc34fd48106dbe 100644 (file)
@@ -1698,7 +1698,7 @@ static int link_configure_addrgen_mode(Link *link) {
 
         if (!link_ipv6ll_enabled(link))
                 ipv6ll_mode = IN6_ADDR_GEN_MODE_NONE;
-        else if (link->network->ipv6_address_gen_mode < 0) {
+        else if (link->network->ipv6ll_address_gen_mode < 0) {
                 r = sysctl_read_ip_property(AF_INET6, link->ifname, "stable_secret", NULL);
                 if (r < 0) {
                         /* The file may not exist. And even if it exists, when stable_secret is unset,
@@ -1709,7 +1709,7 @@ static int link_configure_addrgen_mode(Link *link) {
                 } else
                         ipv6ll_mode = IN6_ADDR_GEN_MODE_STABLE_PRIVACY;
         } else
-                ipv6ll_mode = link->network->ipv6_address_gen_mode;
+                ipv6ll_mode = link->network->ipv6ll_address_gen_mode;
 
         r = sd_netlink_message_append_u8(req, IFLA_INET6_ADDR_GEN_MODE, ipv6ll_mode);
         if (r < 0)
@@ -4427,16 +4427,6 @@ void link_clean(Link *link) {
         link_unref(set_remove(link->manager->dirty_links, link));
 }
 
-static const char* const link_ipv6_address_gen_mode_table[_LINK_IPV6_ADDRESS_GEN_MODE_MAX] = {
-        [LINK_IPV6_ADDRESSS_GEN_MODE_EUI64] = "eui64",
-        [LINK_IPV6_ADDRESSS_GEN_MODE_NONE] = "none",
-        [LINK_IPV6_ADDRESSS_GEN_MODE_STABLE_PRIVACY] = "stable-privacy",
-        [LINK_IPV6_ADDRESSS_GEN_MODE_RANDOM] = "random",
-};
-
-DEFINE_STRING_TABLE_LOOKUP(link_ipv6_address_gen_mode, LinkIPv6AddressGenMode);
-DEFINE_CONFIG_PARSE_ENUM(config_parse_link_ipv6_address_gen_mode, link_ipv6_address_gen_mode, LinkIPv6AddressGenMode, "Failed to parse link IPv6 address generation mode");
-
 static const char* const link_state_table[_LINK_STATE_MAX] = {
         [LINK_STATE_PENDING] = "pending",
         [LINK_STATE_INITIALIZED] = "initialized",
index 2d36ed24630cb3a19c7beeaabfe3168a5e40457f..5a81805a04d11235738e212a05465e088c779aa2 100644 (file)
@@ -35,15 +35,6 @@ typedef enum LinkState {
         _LINK_STATE_INVALID = -1
 } LinkState;
 
-typedef enum LinkIPv6AddressGenMode {
-       LINK_IPV6_ADDRESSS_GEN_MODE_EUI64          = IN6_ADDR_GEN_MODE_EUI64,
-       LINK_IPV6_ADDRESSS_GEN_MODE_NONE           = IN6_ADDR_GEN_MODE_NONE,
-       LINK_IPV6_ADDRESSS_GEN_MODE_STABLE_PRIVACY = IN6_ADDR_GEN_MODE_STABLE_PRIVACY,
-       LINK_IPV6_ADDRESSS_GEN_MODE_RANDOM         = IN6_ADDR_GEN_MODE_RANDOM,
-       _LINK_IPV6_ADDRESS_GEN_MODE_MAX,
-       _LINK_IPV6_ADDRESS_GEN_MODE_INVALID        = -1
-} LinkIPv6AddressGenMode;
-
 typedef struct Manager Manager;
 typedef struct Network Network;
 typedef struct Address Address;
@@ -220,9 +211,6 @@ int link_stop_clients(Link *link, bool may_keep_dhcp);
 const char* link_state_to_string(LinkState s) _const_;
 LinkState link_state_from_string(const char *s) _pure_;
 
-const char* link_ipv6_address_gen_mode_to_string(LinkIPv6AddressGenMode s) _const_;
-LinkIPv6AddressGenMode link_ipv6_address_gen_mode_from_string(const char *s) _pure_;
-
 uint32_t link_get_vrf_table(Link *link);
 uint32_t link_get_dhcp_route_table(Link *link);
 uint32_t link_get_ipv6_accept_ra_route_table(Link *link);
@@ -232,8 +220,6 @@ int link_request_set_nexthop(Link *link);
 int link_reconfigure(Link *link, bool force);
 int address_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link);
 
-CONFIG_PARSER_PROTOTYPE(config_parse_link_ipv6_address_gen_mode);
-
 int log_link_message_full_errno(Link *link, sd_netlink_message *m, int level, int err, const char *msg);
 #define log_link_message_error_errno(link, m, err, msg)   log_link_message_full_errno(link, m, LOG_ERR, err, msg)
 #define log_link_message_warning_errno(link, m, err, msg) log_link_message_full_errno(link, m, LOG_WARNING, err, msg)
index 0326ae62de54f79b1510bab82439729924dc5600..5a0c86b5b37c917cfe20fa7981b7db98a4a8d756 100644 (file)
@@ -52,7 +52,6 @@ Link.ARP,                                    config_parse_tristate,
 Link.Multicast,                              config_parse_tristate,                                    0,                             offsetof(Network, multicast)
 Link.AllMulticast,                           config_parse_tristate,                                    0,                             offsetof(Network, allmulticast)
 Link.Unmanaged,                              config_parse_bool,                                        0,                             offsetof(Network, unmanaged)
-Link.IPv6LinkLocalAddressGenerationMode,     config_parse_link_ipv6_address_gen_mode,                  0,                             offsetof(Network, ipv6_address_gen_mode)
 Link.RequiredForOnline,                      config_parse_required_for_online,                         0,                             0
 Network.Description,                         config_parse_string,                                      0,                             offsetof(Network, description)
 Network.Bridge,                              config_parse_ifname,                                      0,                             offsetof(Network, bridge_name)
@@ -71,6 +70,7 @@ Network.VRF,                                 config_parse_ifname,
 Network.DHCP,                                config_parse_dhcp,                                        0,                             offsetof(Network, dhcp)
 Network.DHCPServer,                          config_parse_bool,                                        0,                             offsetof(Network, dhcp_server)
 Network.LinkLocalAddressing,                 config_parse_link_local_address_family,                   0,                             offsetof(Network, link_local)
+Network.IPv6LinkLocalAddressGenerationMode,  config_parse_ipv6_link_local_address_gen_mode,            0,                             offsetof(Network, ipv6ll_address_gen_mode)
 Network.IPv4LLRoute,                         config_parse_bool,                                        0,                             offsetof(Network, ipv4ll_route)
 Network.DefaultRouteOnDevice,                config_parse_bool,                                        0,                             offsetof(Network, default_route_on_device)
 Network.IPv6Token,                           config_parse_address_generation_type,                     0,                             0
index 0d54a7ef6bbac942e340f7e7babf7a421f050644..e3012b476993aa2eb67cf1564dd8ac1e566ae778 100644 (file)
@@ -451,6 +451,7 @@ int network_load_one(Manager *manager, OrderedHashmap **networks, const char *fi
 
                 /* If LinkLocalAddressing= is not set, then set to ADDRESS_FAMILY_IPV6 later. */
                 .link_local = _ADDRESS_FAMILY_INVALID,
+                .ipv6ll_address_gen_mode = _IPV6_LINK_LOCAL_ADDRESS_GEN_MODE_INVALID,
 
                 .ipv4_accept_local = -1,
 
@@ -474,7 +475,6 @@ int network_load_one(Manager *manager, OrderedHashmap **networks, const char *fi
                 .configure_without_carrier = false,
                 .ignore_carrier_loss = -1,
                 .keep_configuration = _KEEP_CONFIGURATION_INVALID,
-                .ipv6_address_gen_mode = _LINK_IPV6_ADDRESS_GEN_MODE_INVALID,
                 .can_triple_sampling = -1,
                 .can_termination = -1,
                 .ip_service_type = -1,
@@ -1392,3 +1392,13 @@ static const char* const keep_configuration_table[_KEEP_CONFIGURATION_MAX] = {
 };
 
 DEFINE_STRING_TABLE_LOOKUP_WITH_BOOLEAN(keep_configuration, KeepConfiguration, KEEP_CONFIGURATION_YES);
+
+static const char* const ipv6_link_local_address_gen_mode_table[_IPV6_LINK_LOCAL_ADDRESS_GEN_MODE_MAX] = {
+        [IPV6_LINK_LOCAL_ADDRESSS_GEN_MODE_EUI64] = "eui64",
+        [IPV6_LINK_LOCAL_ADDRESSS_GEN_MODE_NONE] = "none",
+        [IPV6_LINK_LOCAL_ADDRESSS_GEN_MODE_STABLE_PRIVACY] = "stable-privacy",
+        [IPV6_LINK_LOCAL_ADDRESSS_GEN_MODE_RANDOM] = "random",
+};
+
+DEFINE_STRING_TABLE_LOOKUP(ipv6_link_local_address_gen_mode, IPv6LinkLocalAddressGenMode);
+DEFINE_CONFIG_PARSE_ENUM(config_parse_ipv6_link_local_address_gen_mode, ipv6_link_local_address_gen_mode, IPv6LinkLocalAddressGenMode, "Failed to parse IPv6 link local address generation mode");
index 67cf056b9dafb76d05a1984555ca102aa1ba3a40..916bfdc9a837dc946bb02f1ce33d5eee3bb81e06 100644 (file)
@@ -52,6 +52,15 @@ typedef enum KeepConfiguration {
         _KEEP_CONFIGURATION_INVALID = -1,
 } KeepConfiguration;
 
+typedef enum IPv6LinkLocalAddressGenMode {
+       IPV6_LINK_LOCAL_ADDRESSS_GEN_MODE_EUI64          = IN6_ADDR_GEN_MODE_EUI64,
+       IPV6_LINK_LOCAL_ADDRESSS_GEN_MODE_NONE           = IN6_ADDR_GEN_MODE_NONE,
+       IPV6_LINK_LOCAL_ADDRESSS_GEN_MODE_STABLE_PRIVACY = IN6_ADDR_GEN_MODE_STABLE_PRIVACY,
+       IPV6_LINK_LOCAL_ADDRESSS_GEN_MODE_RANDOM         = IN6_ADDR_GEN_MODE_RANDOM,
+       _IPV6_LINK_LOCAL_ADDRESS_GEN_MODE_MAX,
+       _IPV6_LINK_LOCAL_ADDRESS_GEN_MODE_INVALID        = -1
+} IPv6LinkLocalAddressGenMode;
+
 typedef struct Manager Manager;
 
 typedef struct NetworkDHCPServerEmitAddress {
@@ -163,8 +172,9 @@ struct Network {
         uint32_t dhcp_server_pool_offset;
         uint32_t dhcp_server_pool_size;
 
-        /* IPV4LL Support */
+        /* link local addressing support */
         AddressFamily link_local;
+        IPv6LinkLocalAddressGenMode ipv6ll_address_gen_mode;
         bool ipv4ll_route;
 
         bool default_route_on_device;
@@ -256,7 +266,6 @@ struct Network {
         bool configure_without_carrier;
         int ignore_carrier_loss;
         KeepConfiguration keep_configuration;
-        LinkIPv6AddressGenMode ipv6_address_gen_mode;
         uint32_t iaid;
         DUID duid;
 
@@ -351,6 +360,7 @@ CONFIG_PARSER_PROTOTYPE(config_parse_dnssec_negative_trust_anchors);
 CONFIG_PARSER_PROTOTYPE(config_parse_ntp);
 CONFIG_PARSER_PROTOTYPE(config_parse_required_for_online);
 CONFIG_PARSER_PROTOTYPE(config_parse_keep_configuration);
+CONFIG_PARSER_PROTOTYPE(config_parse_ipv6_link_local_address_gen_mode);
 
 const struct ConfigPerfItem* network_network_gperf_lookup(const char *key, GPERF_LEN_TYPE length);
 
@@ -359,3 +369,6 @@ IPv6PrivacyExtensions ipv6_privacy_extensions_from_string(const char *s) _pure_;
 
 const char* keep_configuration_to_string(KeepConfiguration i) _const_;
 KeepConfiguration keep_configuration_from_string(const char *s) _pure_;
+
+const char* ipv6_link_local_address_gen_mode_to_string(IPv6LinkLocalAddressGenMode s) _const_;
+IPv6LinkLocalAddressGenMode ipv6_link_local_address_gen_mode_from_string(const char *s) _pure_;
index 628971f83a1046b3d4638a4e4a6cc4e3ec722cde..703da475b6ddf54bb62b8b412c0136d87ace5016 100644 (file)
@@ -38,7 +38,6 @@ MTUBytes=
 Multicast=
 MACAddress=
 Group=
-IPv6LinkLocalAddressGenerationMode=
 [BridgeFDB]
 VLANId=
 MACAddress=
@@ -187,6 +186,7 @@ VXLAN=
 L2TP=
 MACsec=
 LinkLocalAddressing=
+IPv6LinkLocalAddressGenerationMode=
 ConfigureWithoutCarrier=
 NTP=
 DHCP=