summaryrefslogtreecommitdiff
path: root/src/devices/nm-device.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/nm-device.c')
-rw-r--r--src/devices/nm-device.c24
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,