From cf6cd7f28e9df7f5e578b0564712ce38886f2f84 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Fri, 27 Mar 2015 17:39:20 -0500 Subject: [PATCH] bridge/bond/team: device availability shouldn't depend on IFF_UP (bgo #746918) The merge of lr/udev-unmanaged-fd731014 made all devices wait until udev found them, but that makes these three device types fail activate when created by NM itself. Since their availability depended on IFF_UP, they could not be activated (eg, 'nmcli con up team0') until they were IFF_UP. But when they are created by NM, although NM knows the ifindex the platform ignores the interface until udev finds it. Thus immediately after creating the interface in _internal_activate_device() it won't be known to the platform, so the nm_device_is_available() check that controls whether the device moves to DISCONNECTED will fail. This prevents any activation and emits the message: "Connection 'foo' is not available on the device %s at this time." because the device is still in the UNAVAILABLE state. danw asked why we care about IFF_UP for these devices, and I can't remember why, and I don't think it makes sense to require now. https://bugzilla.gnome.org/show_bug.cgi?id=746918 (cherry picked from commit 568a8d1da924357125a6addd81b5f870bf31e144) --- src/devices/nm-device-bond.c | 4 +--- src/devices/nm-device-bridge.c | 4 +--- src/devices/team/nm-device-team.c | 4 +--- 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/src/devices/nm-device-bond.c b/src/devices/nm-device-bond.c index 11c36f9ba4..7f1394248d 100644 --- a/src/devices/nm-device-bond.c +++ b/src/devices/nm-device-bond.c @@ -70,9 +70,7 @@ get_generic_capabilities (NMDevice *dev) static gboolean is_available (NMDevice *dev, NMDeviceCheckDevAvailableFlags flags) { - if (NM_DEVICE_GET_CLASS (dev)->is_up) - return NM_DEVICE_GET_CLASS (dev)->is_up (dev); - return FALSE; + return TRUE; } static gboolean diff --git a/src/devices/nm-device-bridge.c b/src/devices/nm-device-bridge.c index b13610b8cd..e1cafd604a 100644 --- a/src/devices/nm-device-bridge.c +++ b/src/devices/nm-device-bridge.c @@ -68,9 +68,7 @@ get_generic_capabilities (NMDevice *dev) static gboolean is_available (NMDevice *dev, NMDeviceCheckDevAvailableFlags flags) { - if (NM_DEVICE_GET_CLASS (dev)->is_up) - return NM_DEVICE_GET_CLASS (dev)->is_up (dev); - return FALSE; + return TRUE; } static gboolean diff --git a/src/devices/team/nm-device-team.c b/src/devices/team/nm-device-team.c index ba7c5b77d0..aedeebfdb2 100644 --- a/src/devices/team/nm-device-team.c +++ b/src/devices/team/nm-device-team.c @@ -79,9 +79,7 @@ get_generic_capabilities (NMDevice *device) static gboolean is_available (NMDevice *device, NMDeviceCheckDevAvailableFlags flags) { - if (NM_DEVICE_GET_CLASS (device)->is_up) - return NM_DEVICE_GET_CLASS (device)->is_up (device); - return FALSE; + return TRUE; } static gboolean