diff options
author | Lubomir Rintel <lkundrak@v3.sk> | 2017-08-24 09:09:18 +0200 |
---|---|---|
committer | Lubomir Rintel <lkundrak@v3.sk> | 2017-10-26 20:23:02 +0200 |
commit | a3983183650e23036dc0361333609750ae615c24 (patch) | |
tree | 0624f7f8868739cfc223d9111763532a27f1c47d | |
parent | dc9b642856e558a7b4891cb43df5835d0552afd5 (diff) | |
download | NetworkManager-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.c | 33 |
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); } } |