diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c index c3469a8895..866879c2fe 100644 --- a/src/devices/nm-device.c +++ b/src/devices/nm-device.c @@ -2253,10 +2253,16 @@ carrier_changed (NMDevice *self, gboolean carrier) if (!carrier) return; - if (nm_device_activate_ip4_state_in_wait (self)) - nm_device_activate_stage3_ip4_start (self); - if (nm_device_activate_ip6_state_in_wait (self)) - nm_device_activate_stage3_ip6_start (self); + /* Force master to retry getting ip addresses when carrier + * is restored. */ + if (priv->state == NM_DEVICE_STATE_ACTIVATED) + nm_device_update_dynamic_ip_setup (self); + else { + if (nm_device_activate_ip4_state_in_wait (self)) + nm_device_activate_stage3_ip4_start (self); + if (nm_device_activate_ip6_state_in_wait (self)) + nm_device_activate_stage3_ip6_start (self); + } return; } else if (priv->is_enslaved && !carrier) {