diff --git a/src/network/networkd-link-bus.c b/src/network/networkd-link-bus.c index 84ed42987c..ef2e811255 100644 --- a/src/network/networkd-link-bus.c +++ b/src/network/networkd-link-bus.c @@ -669,7 +669,6 @@ int bus_link_method_reconfigure(sd_bus_message *message, void *userdata, sd_bus_ if (r < 0) return r; if (r > 0) { - link_set_state(l, LINK_STATE_INITIALIZED); r = link_save_and_clean_full(l, /* also_save_manager = */ true); if (r < 0) return r; diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 3940aa79b3..2f7aaec2e5 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -1454,6 +1454,9 @@ int link_reconfigure(Link *link, bool force) { if (r < 0) return r; + if (force || link->state == LINK_STATE_FAILED) + link_set_state(link, LINK_STATE_INITIALIZED); + return 1; /* 1 means the interface will be reconfigured. */ } @@ -1536,6 +1539,9 @@ int link_reconfigure_on_bus_method_reload(Link *link, sd_bus_message *message) { TAKE_PTR(data); link->manager->reloading++; + if (link->state == LINK_STATE_FAILED) + link_set_state(link, LINK_STATE_INITIALIZED); + return 0; }