summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBeniamino Galvani <bgalvani@redhat.com>2019-09-26 13:41:02 +0200
committerBeniamino Galvani <bgalvani@redhat.com>2019-09-26 13:47:53 +0200
commit26d03848530a80a24c5c1196de8adf7577dbe42c (patch)
tree702bbd41da9d7b0c25e64bb72fdaed5a636bfbeb
parent35c83138ce34189eb14063ec173834599485b182 (diff)
downloadNetworkManager-bg/ip-config-apply-rh1754511.tar.gz
device: don't reapply IP config on link up for disconnected devicesbg/ip-config-apply-rh1754511
Only reapply the IP configuration on link up if the IP state is CONF or DONE. Previously we also reapplied it when the devices was disconnected (IP state NONE) and this could lead to a situation where an incomplete config was applied; then we intersected the desired configuration with the external - incomplete - one, causing the removal of part of desired configuration (for example the default route). Fixes: d0b16b9283dc ('device: unconditionally reapply IP configuration on link up') https://bugzilla.redhat.com/show_bug.cgi?id=1754511
-rw-r--r--src/devices/nm-device.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c
index bcbf5c27cd..5091aa9860 100644
--- a/src/devices/nm-device.c
+++ b/src/devices/nm-device.c
@@ -3934,12 +3934,18 @@ device_link_changed (NMDevice *self)
if (priv->up && (!was_up || seen_down)) {
/* the link was down and just came up. That happens for example, while changing MTU.
* We must restore IP configuration. */
- if (!ip_config_merge_and_apply (self, AF_INET, TRUE))
- _LOGW (LOGD_IP4, "failed applying IP4 config after link comes up again");
+ if (NM_IN_SET (priv->ip_state_4, NM_DEVICE_IP_STATE_CONF,
+ NM_DEVICE_IP_STATE_DONE)) {
+ if (!ip_config_merge_and_apply (self, AF_INET, TRUE))
+ _LOGW (LOGD_IP4, "failed applying IP4 config after link comes up again");
+ }
priv->linklocal6_dad_counter = 0;
- if (!ip_config_merge_and_apply (self, AF_INET6, TRUE))
- _LOGW (LOGD_IP6, "failed applying IP6 config after link comes up again");
+ if (NM_IN_SET (priv->ip_state_6, NM_DEVICE_IP_STATE_CONF,
+ NM_DEVICE_IP_STATE_DONE)) {
+ if (!ip_config_merge_and_apply (self, AF_INET6, TRUE))
+ _LOGW (LOGD_IP6, "failed applying IP6 config after link comes up again");
+ }
}
if (update_unmanaged_specs)