summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLubomir Rintel <lkundrak@v3.sk>2014-12-05 13:10:51 +0100
committerLubomir Rintel <lkundrak@v3.sk>2014-12-11 11:49:29 +0100
commit81553b69786eade65ced35782486d2807cfa2504 (patch)
treeba04764b30614b0693b2ddb9994df5bc98ff2450
parent8b77b931698468419d1ed04738069613a4fea79b (diff)
downloadNetworkManager-81553b69786eade65ced35782486d2807cfa2504.tar.gz
device: release and enslave an interface if its master changed
In case of an atomic master change, we'd not notice that the master changed: ip link set dummy0 master bridge0 ip link set dummy0 master bridge1
-rw-r--r--src/devices/nm-device.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c
index f834875cbf..0956135a97 100644
--- a/src/devices/nm-device.c
+++ b/src/devices/nm-device.c
@@ -1180,6 +1180,8 @@ device_link_changed (NMDevice *self, NMPlatformLink *info)
}
/* Update slave status for external changes */
+ if (priv->enslaved && info->master != nm_device_get_ifindex (priv->master))
+ nm_device_release_one_slave (priv->master, self, FALSE, NM_DEVICE_STATE_REASON_NONE);
if (info->master && !priv->enslaved) {
NMDevice *master;
@@ -1197,8 +1199,7 @@ device_link_changed (NMDevice *self, NMPlatformLink *info)
info->master,
nm_platform_link_get_name (info->master));
}
- } else if (priv->enslaved && !info->master)
- nm_device_release_one_slave (priv->master, self, FALSE, NM_DEVICE_STATE_REASON_NONE);
+ }
if (klass->link_changed)
klass->link_changed (self, info);