nm_device_match_parent() is called to check whether a device is
compatible with a given parent (UUID or interface). Accept any UUID If
there is no connection active on the device.

Without this, when there is a VLAN/MACVLAN connection with a parent
UUID the manager would create the device in
system_create_virtual_device(), realize it and then at the next call
of system_create_virtual_device() it would notice that the connection
is not compatible with the device because of the parent UUID;
therefore the manager would try to create again the same device,
failing.

https://mail.gnome.org/archives/networkmanager-list/2017-September/msg00034.html
---
 src/devices/nm-device.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c
index 6d51641f2..934d29fff 100644
--- a/src/devices/nm-device.c
+++ b/src/devices/nm-device.c
@@ -4405,12 +4405,13 @@ nm_device_match_parent (NMDevice *self, const char 
*parent)
                NMActiveConnection *ac;
                NMConnection *connection;
 
-               /* If the parent is a UUID, the connection matches if our parent
-                * device has that connection activated.
+               /* If the parent is a UUID, the connection matches when there is
+                * no connection active on the device or when a connection with
+                * that UUID is active.
                 */
                ac = (NMActiveConnection *) nm_device_get_act_request 
(parent_device);
                if (!ac)
-                       return FALSE;
+                       return TRUE;
 
                connection = nm_active_connection_get_applied_connection (ac);
                if (!connection)
-- 
2.13.5

_______________________________________________
networkmanager-list mailing list
[email protected]
https://mail.gnome.org/mailman/listinfo/networkmanager-list

Reply via email to