diff options
Diffstat (limited to 'src/devices/nm-device.c')
-rw-r--r-- | src/devices/nm-device.c | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c index 81e8d934f9..02963b52c2 100644 --- a/src/devices/nm-device.c +++ b/src/devices/nm-device.c @@ -7736,7 +7736,13 @@ dhcp4_fail (NMDevice *self, NMDhcpState dhcp_state) _ip_state_to_string (priv->ip_state_4), priv->dhcp4.was_active); - /* Keep client running if there are static addresses configured + /* The client is always left running after a failure. */ + + /* Nothing to do if we failed before... */ + if (priv->ip_state_4 == NM_DEVICE_IP_STATE_FAIL) + goto clear_config; + + /* ... and also if there are static addresses configured * on the interface. */ if ( priv->ip_state_4 == NM_DEVICE_IP_STATE_DONE @@ -7752,14 +7758,12 @@ dhcp4_fail (NMDevice *self, NMDhcpState dhcp_state) */ if ( dhcp_state == NM_DHCP_STATE_TERMINATED || (!priv->dhcp4.was_active && priv->ip_state_4 == NM_DEVICE_IP_STATE_CONF)) { - dhcp4_cleanup (self, CLEANUP_TYPE_DECONFIGURE, FALSE); nm_device_activate_schedule_ip_config_timeout (self, AF_INET); return; } /* In any other case (expired lease, assumed connection, etc.), - * start a grace period in which we keep the client running, - * hoping that it will regain a lease. + * wait for some time before failing the IP method. */ if (!priv->dhcp4.grace_id) { priv->dhcp4.grace_id = g_timeout_add_seconds (DHCP_GRACE_PERIOD_SEC, @@ -8381,10 +8385,16 @@ dhcp6_fail (NMDevice *self, NMDhcpState dhcp_state) _ip_state_to_string (priv->ip_state_6), priv->dhcp6.was_active); + /* The client is always left running after a failure. */ + + /* Nothing to do if we failed before... */ + if (priv->ip_state_6 == NM_DEVICE_IP_STATE_FAIL) + goto clear_config; + is_dhcp_managed = (priv->dhcp6.mode == NM_NDISC_DHCP_LEVEL_MANAGED); if (is_dhcp_managed) { - /* Keep client running if there are static addresses configured + /* ... and also if there are static addresses configured * on the interface. */ if ( priv->ip_state_6 == NM_DEVICE_IP_STATE_DONE @@ -8400,14 +8410,12 @@ dhcp6_fail (NMDevice *self, NMDhcpState dhcp_state) */ if ( dhcp_state == NM_DHCP_STATE_TERMINATED || (!priv->dhcp6.was_active && priv->ip_state_6 == NM_DEVICE_IP_STATE_CONF)) { - dhcp6_cleanup (self, CLEANUP_TYPE_DECONFIGURE, FALSE); nm_device_activate_schedule_ip_config_timeout (self, AF_INET6); return; } /* In any other case (expired lease, assumed connection, etc.), - * start a grace period in which we keep the client running, - * hoping that it will regain a lease. + * wait for some time before failing the IP method. */ if (!priv->dhcp6.grace_id) { priv->dhcp6.grace_id = g_timeout_add_seconds (DHCP_GRACE_PERIOD_SEC, |