]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: rename KeepConfiguration=dhcp -> dynamic
authorYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 5 Nov 2024 03:14:01 +0000 (12:14 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 14 Nov 2024 01:23:09 +0000 (10:23 +0900)
KeepConfiguration=dhcp keeps not only DHCP configurations but
also SLAAC or IPV4LL. Let's rename the value to 'dynamic'.

src/network/networkd-address.c
src/network/networkd-dhcp4.c
src/network/networkd-ipv4ll.c
src/network/networkd-link.c
src/network/networkd-link.h
src/network/networkd-manager.c
src/network/networkd-network.c
src/network/networkd-network.h
src/network/networkd-route.c

index a689fa68bd0705cbce5a7b4491959ac775b91f9f..0b7fbec28b9ce7d434bf2a947a57e6c13eb750c5 100644 (file)
@@ -1274,8 +1274,8 @@ bool link_address_is_dynamic(const Link *link, const Address *address) {
         if (address->family != AF_INET)
                 return false;
 
-        /* Even when the address is leased from a DHCP server, networkd assign the address
-         * without lifetime when KeepConfiguration=dhcp. So, let's check that we have
+        /* Even if an IPv4 address is leased from a DHCP server with a finite lifetime, networkd assign the
+         * address without lifetime when KeepConfiguration=dynamic. So, let's check that we have
          * corresponding routes with RTPROT_DHCP. */
         SET_FOREACH(route, link->manager->routes) {
                 if (route->source != NETWORK_CONFIG_SOURCE_FOREIGN)
@@ -1410,9 +1410,9 @@ int link_drop_unmanaged_addresses(Link *link) {
                                 continue;
 
                         /* link_address_is_dynamic() is slightly heavy. Let's call the function only when
-                         * KeepConfiguration=dhcp or static. */
-                        if (IN_SET(link->network->keep_configuration, KEEP_CONFIGURATION_DHCP, KEEP_CONFIGURATION_STATIC) &&
-                            link_address_is_dynamic(link, address) == (link->network->keep_configuration == KEEP_CONFIGURATION_DHCP))
+                         * KeepConfiguration=dynamic or static. */
+                        if (IN_SET(link->network->keep_configuration, KEEP_CONFIGURATION_DYNAMIC, KEEP_CONFIGURATION_STATIC) &&
+                            link_address_is_dynamic(link, address) == (link->network->keep_configuration == KEEP_CONFIGURATION_DYNAMIC))
                                 continue;
 
                 } else if (address->source != NETWORK_CONFIG_SOURCE_STATIC)
index 684580f5b6057869a73405878a39fe8e2f4e2672..d94ac1a213afbb60b862d77684a8763b3c60532b 100644 (file)
@@ -915,7 +915,7 @@ static int dhcp4_request_address(Link *link, bool announce) {
         if (r < 0)
                 return log_link_debug_errno(link, r, "DHCP error: failed to get DHCP server IP address: %m");
 
-        if (!FLAGS_SET(link->network->keep_configuration, KEEP_CONFIGURATION_DHCP)) {
+        if (!FLAGS_SET(link->network->keep_configuration, KEEP_CONFIGURATION_DYNAMIC)) {
                 r = sd_dhcp_lease_get_lifetime_timestamp(link->dhcp_lease, CLOCK_BOOTTIME, &lifetime_usec);
                 if (r < 0)
                         return log_link_warning_errno(link, r, "DHCP error: failed to get lifetime: %m");
@@ -1168,7 +1168,7 @@ static int dhcp4_handler(sd_dhcp_client *client, int event, void *userdata) {
 
         switch (event) {
                 case SD_DHCP_CLIENT_EVENT_STOP:
-                        if (FLAGS_SET(link->network->keep_configuration, KEEP_CONFIGURATION_DHCP)) {
+                        if (FLAGS_SET(link->network->keep_configuration, KEEP_CONFIGURATION_DYNAMIC)) {
                                 log_link_notice(link, "DHCPv4 connection considered critical, ignoring request to reconfigure it.");
                                 return 0;
                         }
@@ -1199,7 +1199,7 @@ static int dhcp4_handler(sd_dhcp_client *client, int event, void *userdata) {
 
                         break;
                 case SD_DHCP_CLIENT_EVENT_EXPIRED:
-                        if (FLAGS_SET(link->network->keep_configuration, KEEP_CONFIGURATION_DHCP)) {
+                        if (FLAGS_SET(link->network->keep_configuration, KEEP_CONFIGURATION_DYNAMIC)) {
                                 log_link_notice(link, "DHCPv4 connection considered critical, ignoring request to reconfigure it.");
                                 return 0;
                         }
@@ -1214,7 +1214,7 @@ static int dhcp4_handler(sd_dhcp_client *client, int event, void *userdata) {
 
                         break;
                 case SD_DHCP_CLIENT_EVENT_IP_CHANGE:
-                        if (FLAGS_SET(link->network->keep_configuration, KEEP_CONFIGURATION_DHCP)) {
+                        if (FLAGS_SET(link->network->keep_configuration, KEEP_CONFIGURATION_DYNAMIC)) {
                                 log_link_notice(link, "DHCPv4 connection considered critical, ignoring request to reconfigure it.");
                                 return 0;
                         }
@@ -1400,8 +1400,8 @@ static int dhcp4_set_request_address(Link *link) {
                 return sd_dhcp_client_set_request_address(link->dhcp_client, &link->network->dhcp_request_address);
         }
 
-        /* 3. If KeepConfiguration=dhcp, use a foreign dynamic address. */
-        if (!FLAGS_SET(link->network->keep_configuration, KEEP_CONFIGURATION_DHCP))
+        /* 3. If KeepConfiguration=dynamic, use a foreign dynamic address. */
+        if (!FLAGS_SET(link->network->keep_configuration, KEEP_CONFIGURATION_DYNAMIC))
                 return 0;
 
         SET_FOREACH(a, link->addresses) {
index 9682d0d8746c32aa2581c113d9724abebb72d63e..046e4ca95712e301b50a54495573b7596b12f8c9 100644 (file)
@@ -195,8 +195,8 @@ static int ipv4ll_set_address(Link *link) {
         if (in4_addr_is_set(&link->network->ipv4ll_start_address))
                 return sd_ipv4ll_set_address(link->ipv4ll, &link->network->ipv4ll_start_address);
 
-        /* 3. If KeepConfiguration=dhcp, use a foreign IPv4LL address. */
-        if (!FLAGS_SET(link->network->keep_configuration, KEEP_CONFIGURATION_DHCP))
+        /* 3. If KeepConfiguration=dynamic, use a foreign IPv4LL address. */
+        if (!FLAGS_SET(link->network->keep_configuration, KEEP_CONFIGURATION_DYNAMIC))
                 return 0;
 
         SET_FOREACH(a, link->addresses) {
index 9d903b7057cf6d9a5d4b518559213cddde8585b7..4b341a96c742f392cb1bac51c79877c70989db73 100644 (file)
@@ -369,20 +369,20 @@ void link_set_state(Link *link, LinkState state) {
         link_dirty(link);
 }
 
-int link_stop_engines(Link *link, bool may_keep_dhcp) {
+int link_stop_engines(Link *link, bool may_keep_dynamic) {
         int r, ret = 0;
 
         assert(link);
         assert(link->manager);
         assert(link->manager->event);
 
-        bool keep_dhcp =
-                may_keep_dhcp &&
+        bool keep_dynamic =
+                may_keep_dynamic &&
                 link->network &&
                 (link->manager->state == MANAGER_RESTARTING ||
-                 FLAGS_SET(link->network->keep_configuration, KEEP_CONFIGURATION_DHCP_ON_STOP));
+                 FLAGS_SET(link->network->keep_configuration, KEEP_CONFIGURATION_DYNAMIC_ON_STOP));
 
-        if (!keep_dhcp) {
+        if (!keep_dynamic) {
                 r = sd_dhcp_client_stop(link->dhcp_client);
                 if (r < 0)
                         RET_GATHER(ret, log_link_warning_errno(link, r, "Could not stop DHCPv4 client: %m"));
@@ -449,7 +449,7 @@ void link_enter_failed(Link *link) {
                 return;
 
 stop:
-        (void) link_stop_engines(link, /* may_keep_dhcp = */ false);
+        (void) link_stop_engines(link, /* may_keep_dynamic = */ false);
 }
 
 void link_check_ready(Link *link) {
@@ -1339,7 +1339,7 @@ static void link_enter_unmanaged(Link *link) {
         log_link_full(link, link->state == LINK_STATE_INITIALIZED ? LOG_DEBUG : LOG_INFO,
                       "Unmanaging interface.");
 
-        (void) link_stop_engines(link, /* may_keep_dhcp = */ false);
+        (void) link_stop_engines(link, /* may_keep_dynamic = */ false);
         (void) link_drop_requests(link);
         (void) link_drop_static_config(link);
 
@@ -1410,10 +1410,10 @@ int link_reconfigure_impl(Link *link, LinkReconfigurationFlag flags) {
         /* Then, apply new .network file */
         link->network = network_ref(network);
 
-        if (FLAGS_SET(network->keep_configuration, KEEP_CONFIGURATION_DHCP) ||
+        if (FLAGS_SET(network->keep_configuration, KEEP_CONFIGURATION_DYNAMIC) ||
             !FLAGS_SET(flags, LINK_RECONFIGURE_CLEANLY)) {
                 /* To make 'networkctl reconfigure INTERFACE' work safely for an interface whose new .network
-                 * file has KeepConfiguration=dhcp or yes, even if a clean reconfiguration is requested,
+                 * file has KeepConfiguration=dynamic or yes, even if a clean reconfiguration is requested,
                  * drop only unnecessary or possibly being changed dynamic configurations here. */
                 r = link_drop_dynamic_config(link, old_network);
                 if (r < 0)
@@ -1799,7 +1799,7 @@ static int link_carrier_lost_impl(Link *link) {
         if (!link->network)
                 return ret;
 
-        RET_GATHER(ret, link_stop_engines(link, false));
+        RET_GATHER(ret, link_stop_engines(link, /* may_keep_dynamic = */ false));
         RET_GATHER(ret, link_drop_static_config(link));
 
         return ret;
index 848e67c843e39d4f73e34849cc5b711d5245ea0b..113217cdb6ad8f5cfad00ed3a701c71d162a9953 100644 (file)
@@ -257,7 +257,7 @@ bool link_ipv6_enabled(Link *link);
 int link_ipv6ll_gained(Link *link);
 bool link_has_ipv6_connectivity(Link *link);
 
-int link_stop_engines(Link *link, bool may_keep_dhcp);
+int link_stop_engines(Link *link, bool may_keep_dynamic);
 
 const char* link_state_to_string(LinkState s) _const_;
 LinkState link_state_from_string(const char *s) _pure_;
index ca6ab48502265bba0bc116aa97a74e4a40b04643..9290255ad06af9c3914a81f5a3a4439ca1ebebfa 100644 (file)
@@ -481,7 +481,7 @@ static int manager_stop(Manager *manager, ManagerState state) {
 
         Link *link;
         HASHMAP_FOREACH(link, manager->links_by_index)
-                (void) link_stop_engines(link, /* may_keep_dhcp = */ true);
+                (void) link_stop_engines(link, /* may_keep_dynamic = */ true);
 
         return 0;
 }
@@ -508,8 +508,8 @@ static int manager_set_keep_configuration(Manager *m) {
         assert(m);
 
         if (in_initrd()) {
-                log_debug("Running in initrd, keep DHCPv4 addresses on stopping networkd by default.");
-                m->keep_configuration = KEEP_CONFIGURATION_DHCP_ON_STOP;
+                log_debug("Running in initrd, keep dynamically assigned configurations on stopping networkd by default.");
+                m->keep_configuration = KEEP_CONFIGURATION_DYNAMIC_ON_STOP;
                 return 0;
         }
 
index 248853082928135920bbc0fe7f9adf40033234d1..89dcf4f6c49c74daa048717766b32e933a2d40c5 100644 (file)
@@ -1093,15 +1093,53 @@ int config_parse_ignore_carrier_loss(
         return 0;
 }
 
+int config_parse_keep_configuration(
+                const char *unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        KeepConfiguration t, *k = ASSERT_PTR(data);
+        Network *network = ASSERT_PTR(userdata);
+
+        if (isempty(rvalue)) {
+                *k = ASSERT_PTR(network->manager)->keep_configuration;
+                return 0;
+        }
+
+        /* backward compatibility */
+        if (streq(rvalue, "dhcp")) {
+                *k = KEEP_CONFIGURATION_DYNAMIC;
+                return 0;
+        }
+
+        if (streq(rvalue, "dhcp-on-stop")) {
+                *k = KEEP_CONFIGURATION_DYNAMIC_ON_STOP;
+                return 0;
+        }
+
+        t = keep_configuration_from_string(rvalue);
+        if (t < 0)
+                return log_syntax_parse_error(unit, filename, line, t, lvalue, rvalue);
+
+        *k = t;
+        return 0;
+}
+
 DEFINE_CONFIG_PARSE_ENUM(config_parse_required_family_for_online, link_required_address_family, AddressFamily);
-DEFINE_CONFIG_PARSE_ENUM(config_parse_keep_configuration, keep_configuration, KeepConfiguration);
 
 static const char* const keep_configuration_table[_KEEP_CONFIGURATION_MAX] = {
-        [KEEP_CONFIGURATION_NO]           = "no",
-        [KEEP_CONFIGURATION_DHCP_ON_STOP] = "dhcp-on-stop",
-        [KEEP_CONFIGURATION_DHCP]         = "dhcp",
-        [KEEP_CONFIGURATION_STATIC]       = "static",
-        [KEEP_CONFIGURATION_YES]          = "yes",
+        [KEEP_CONFIGURATION_NO]              = "no",
+        [KEEP_CONFIGURATION_DYNAMIC_ON_STOP] = "dynamic-on-stop",
+        [KEEP_CONFIGURATION_DYNAMIC]         = "dynamic",
+        [KEEP_CONFIGURATION_STATIC]          = "static",
+        [KEEP_CONFIGURATION_YES]             = "yes",
 };
 
 DEFINE_STRING_TABLE_LOOKUP_WITH_BOOLEAN(keep_configuration, KeepConfiguration, KEEP_CONFIGURATION_YES);
index 3ea94e0e49deac4ad21f189b695bec658c81554a..03e310862358924bf39ca19d02d94e9db7af27e8 100644 (file)
 #include "socket-netlink.h"
 
 typedef enum KeepConfiguration {
-        KEEP_CONFIGURATION_NO            = 0,
-        KEEP_CONFIGURATION_DHCP_ON_START = 1 << 0,
-        KEEP_CONFIGURATION_DHCP_ON_STOP  = 1 << 1,
-        KEEP_CONFIGURATION_DHCP          = KEEP_CONFIGURATION_DHCP_ON_START | KEEP_CONFIGURATION_DHCP_ON_STOP,
-        KEEP_CONFIGURATION_STATIC        = 1 << 2,
-        KEEP_CONFIGURATION_YES           = KEEP_CONFIGURATION_DHCP | KEEP_CONFIGURATION_STATIC,
+        KEEP_CONFIGURATION_NO               = 0,
+        KEEP_CONFIGURATION_DYNAMIC_ON_START = 1 << 0,
+        KEEP_CONFIGURATION_DYNAMIC_ON_STOP  = 1 << 1,
+        KEEP_CONFIGURATION_DYNAMIC          = KEEP_CONFIGURATION_DYNAMIC_ON_START | KEEP_CONFIGURATION_DYNAMIC_ON_STOP,
+        KEEP_CONFIGURATION_STATIC           = 1 << 2,
+        KEEP_CONFIGURATION_YES              = KEEP_CONFIGURATION_DYNAMIC | KEEP_CONFIGURATION_STATIC,
         _KEEP_CONFIGURATION_MAX,
-        _KEEP_CONFIGURATION_INVALID = -EINVAL,
+        _KEEP_CONFIGURATION_INVALID         = -EINVAL,
 } KeepConfiguration;
 
 typedef enum ActivationPolicy {
index b85d2a037a65e62327cba2538cc91d819aabd0eb..0f3f79ec4fe099a93cb1a78733dda9b8404cd327 100644 (file)
@@ -1486,7 +1486,7 @@ int link_drop_routes(Link *link, bool only_static) {
                                         continue;
 
                                 if (IN_SET(route->protocol, RTPROT_DHCP, RTPROT_RA, RTPROT_REDIRECT) &&
-                                    FLAGS_SET(link->network->keep_configuration, KEEP_CONFIGURATION_DHCP))
+                                    FLAGS_SET(link->network->keep_configuration, KEEP_CONFIGURATION_DYNAMIC))
                                         continue;
                         }
                 }