1
0
mirror of https://github.com/systemd/systemd.git synced 2024-12-25 01:34:28 +03:00

network: do not bring down bound interfaces immediately

Even if a timespan specified to IgnoreCarrierLoss= for an interface,
when the carrier of the interface lost, bound interfaces might be bring
down immediately.

Let's also postpone bringing down bound interfaces with the specified
timespan.

(cherry picked from commit e8eaed0240)
This commit is contained in:
Yu Watanabe 2024-07-31 03:04:04 +09:00 committed by Luca Boccassi
parent f23fe35c9f
commit 9468a6ea47

View File

@ -1769,25 +1769,22 @@ static int link_carrier_gained(Link *link) {
}
static int link_carrier_lost_impl(Link *link) {
int r, ret = 0;
int ret = 0;
assert(link);
link->previous_ssid = mfree(link->previous_ssid);
ret = link_handle_bound_by_list(link);
if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
return 0;
return ret;
if (!link->network)
return 0;
return ret;
r = link_stop_engines(link, false);
if (r < 0)
ret = r;
r = link_drop_managed_config(link);
if (r < 0 && ret >= 0)
ret = r;
RET_GATHER(ret, link_stop_engines(link, false));
RET_GATHER(ret, link_drop_managed_config(link));
return ret;
}
@ -1808,22 +1805,17 @@ static int link_carrier_lost_handler(sd_event_source *s, uint64_t usec, void *us
static int link_carrier_lost(Link *link) {
uint16_t dhcp_mtu;
usec_t usec;
int r;
assert(link);
r = link_handle_bound_by_list(link);
if (r < 0)
return r;
if (link->iftype == ARPHRD_CAN)
/* let's shortcut things for CAN which doesn't need most of what's done below. */
return 0;
usec = 0;
if (!link->network)
return 0;
else if (!link->network)
usec = 0;
if (link->network->ignore_carrier_loss_set)
else if (link->network->ignore_carrier_loss_set)
/* If IgnoreCarrierLoss= is explicitly specified, then use the specified value. */
usec = link->network->ignore_carrier_loss_usec;