summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/network/networkd-link.c48
-rw-r--r--src/network/networkd-manager.c28
2 files changed, 11 insertions, 65 deletions
diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c
index 151346f198..b3dccb7b09 100644
--- a/src/network/networkd-link.c
+++ b/src/network/networkd-link.c
@@ -1293,46 +1293,10 @@ static int link_force_reconfigure_handler(sd_netlink *rtnl, sd_netlink_message *
return link_reconfigure_handler_internal(rtnl, m, link, /* force = */ true);
}
-static int link_reconfigure_after_sleep_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
- int r;
-
- assert(link);
-
- r = link_reconfigure_handler_internal(rtnl, m, link, /* force = */ false);
- if (r != 0)
- return r;
-
- /* r == 0 means an error occurs, the link is unmanaged, or the matching network file is unchanged. */
- if (!IN_SET(link->state, LINK_STATE_CONFIGURING, LINK_STATE_CONFIGURED))
- return 0;
-
- /* re-request static configs, and restart engines. */
- r = link_stop_engines(link, false);
- if (r < 0) {
- link_enter_failed(link);
- return 0;
- }
-
- r = link_acquire_dynamic_conf(link);
- if (r < 0) {
- link_enter_failed(link);
- return 0;
- }
-
- r = link_request_static_configs(link);
- if (r < 0) {
- link_enter_failed(link);
- return 0;
- }
-
- return 0;
-}
-
-static int link_reconfigure_internal(Link *link, link_netlink_message_handler_t callback) {
+int link_reconfigure(Link *link, bool force) {
int r;
assert(link);
- assert(callback);
/* When link in pending or initialized state, then link_configure() will be called. To prevent
* the function from being called multiple times simultaneously, refuse to reconfigure the
@@ -1340,21 +1304,13 @@ static int link_reconfigure_internal(Link *link, link_netlink_message_handler_t
if (IN_SET(link->state, LINK_STATE_PENDING, LINK_STATE_INITIALIZED, LINK_STATE_LINGER))
return 0; /* 0 means no-op. */
- r = link_call_getlink(link, callback);
+ r = link_call_getlink(link, force ? link_force_reconfigure_handler : link_reconfigure_handler);
if (r < 0)
return r;
return 1; /* 1 means the interface will be reconfigured. */
}
-int link_reconfigure(Link *link, bool force) {
- return link_reconfigure_internal(link, force ? link_force_reconfigure_handler : link_reconfigure_handler);
-}
-
-int link_reconfigure_after_sleep(Link *link) {
- return link_reconfigure_internal(link, link_reconfigure_after_sleep_handler);
-}
-
static int link_initialized_and_synced(Link *link) {
int r;
diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c
index cdfd29bc0e..684d635d36 100644
--- a/src/network/networkd-manager.c
+++ b/src/network/networkd-manager.c
@@ -64,25 +64,9 @@
/* use 128 MB for receive socket kernel queue. */
#define RCVBUF_SIZE (128*1024*1024)
-static int manager_reset_all(Manager *m) {
- Link *link;
- int r;
-
- assert(m);
-
- HASHMAP_FOREACH(link, m->links_by_index) {
- r = link_reconfigure_after_sleep(link);
- if (r < 0) {
- log_link_warning_errno(link, r, "Failed to reconfigure interface: %m");
- link_enter_failed(link);
- }
- }
-
- return 0;
-}
-
static int match_prepare_for_sleep(sd_bus_message *message, void *userdata, sd_bus_error *ret_error) {
Manager *m = ASSERT_PTR(userdata);
+ Link *link;
int b, r;
assert(message);
@@ -96,9 +80,15 @@ static int match_prepare_for_sleep(sd_bus_message *message, void *userdata, sd_b
if (b)
return 0;
- log_debug("Coming back from suspend, resetting all connections...");
+ log_debug("Coming back from suspend, reconfiguring all connections...");
- (void) manager_reset_all(m);
+ HASHMAP_FOREACH(link, m->links_by_index) {
+ r = link_reconfigure(link, /* force = */ true);
+ if (r < 0) {
+ log_link_warning_errno(link, r, "Failed to reconfigure interface: %m");
+ link_enter_failed(link);
+ }
+ }
return 0;
}