summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLubomir Rintel <lkundrak@v3.sk>2017-08-24 09:09:18 +0200
committerLubomir Rintel <lkundrak@v3.sk>2017-10-26 20:23:02 +0200
commita3983183650e23036dc0361333609750ae615c24 (patch)
tree0624f7f8868739cfc223d9111763532a27f1c47d
parentdc9b642856e558a7b4891cb43df5835d0552afd5 (diff)
downloadNetworkManager-a3983183650e23036dc0361333609750ae615c24.tar.gz
device: ignore enslavement to ovs-master
That one is special. All interfaces that are attached to OpenVSwitch ports appear as slaves to that one even for our purposes we like to pretend they're slaves to the actual OpenVSwitch bridges.
-rw-r--r--src/devices/nm-device.c33
1 files changed, 20 insertions, 13 deletions
diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c
index 4baee014c4..b335f97c5a 100644
--- a/src/devices/nm-device.c
+++ b/src/devices/nm-device.c
@@ -2538,12 +2538,24 @@ static void
device_recheck_slave_status (NMDevice *self, const NMPlatformLink *plink)
{
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+ NMDevice *master;
+ const char *master_ifname;
g_return_if_fail (plink);
if (plink->master <= 0)
return;
+ master = nm_manager_get_device_by_ifindex (nm_manager_get (), plink->master);
+ master_ifname = nm_platform_link_get_name (nm_device_get_platform (self), plink->master);
+
+ if ( master == NULL
+ && g_strcmp0 (master_ifname, "ovs-system") == 0
+ && nm_platform_link_get_type (nm_device_get_platform (self), plink->master) == NM_LINK_TYPE_OPENVSWITCH) {
+ _LOGD (LOGD_DEVICE, "the device claimed by openvswitch");
+ return;
+ }
+
if (priv->master) {
if ( plink->master > 0
&& plink->master == nm_device_get_ifindex (priv->master)) {
@@ -2555,20 +2567,15 @@ device_recheck_slave_status (NMDevice *self, const NMPlatformLink *plink)
nm_device_master_release_one_slave (priv->master, self, FALSE, NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED);
}
- if (plink->master > 0) {
- NMDevice *master;
- master = nm_manager_get_device_by_ifindex (nm_manager_get (), plink->master);
- if (master && NM_DEVICE_GET_CLASS (master)->enslave_slave)
- nm_device_master_add_slave (master, self, FALSE);
- else if (master) {
- _LOGI (LOGD_DEVICE, "enslaved to non-master-type device %s; ignoring",
- nm_device_get_iface (master));
- } else {
- _LOGW (LOGD_DEVICE, "enslaved to unknown device %d %s",
- plink->master,
- nm_platform_link_get_name (nm_device_get_platform (self), plink->master));
- }
+ if (master && NM_DEVICE_GET_CLASS (master)->enslave_slave)
+ nm_device_master_add_slave (master, self, FALSE);
+ else if (master) {
+ _LOGI (LOGD_DEVICE, "enslaved to non-master-type device %s; ignoring",
+ nm_device_get_iface (master));
+ } else {
+ _LOGW (LOGD_DEVICE, "enslaved to unknown device %d %s",
+ plink->master, master_ifname);
}
}