diff options
author | Beniamino Galvani <bgalvani@redhat.com> | 2015-09-03 16:51:39 +0200 |
---|---|---|
committer | Lubomir Rintel <lkundrak@v3.sk> | 2015-09-03 17:59:51 +0200 |
commit | b3b0b4625053d5647e2756bbe745652889684a21 (patch) | |
tree | f502e6e6d91cc42b45769b532ee8ab8b75eaa42d /src/nm-manager.c | |
parent | de5d98197f751c4ff4eed36af27131a024e47b73 (diff) | |
download | NetworkManager-b3b0b4625053d5647e2756bbe745652889684a21.tar.gz |
device: retry creation of default connection after link is initialized
When a new link is detected, NM tries to generate a default "Wired
connection" in nm_settings_device_added(), but if the link has not
been initialized by udev yet the function returns early because
priv->unmanaged_flags = UNMANAGED_PLATFORM_INIT.
To be sure that a default connection is created is such situation, we
need to call again nm_settings_device_added() after link
initialization.
https://bugzilla.redhat.com/show_bug.cgi?id=1254089
Diffstat (limited to 'src/nm-manager.c')
-rw-r--r-- | src/nm-manager.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/nm-manager.c b/src/nm-manager.c index 71b9d7074f..871bda39d3 100644 --- a/src/nm-manager.c +++ b/src/nm-manager.c @@ -796,6 +796,14 @@ device_removed_cb (NMDevice *device, gpointer user_data) remove_device (NM_MANAGER (user_data), device, FALSE, TRUE); } +static void +device_link_initialized_cb (NMDevice *device, gpointer user_data) +{ + NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (user_data); + + nm_settings_device_added (priv->settings, device); +} + NMState nm_manager_get_state (NMManager *manager) { @@ -1727,6 +1735,10 @@ add_device (NMManager *self, NMDevice *device, gboolean try_assume) G_CALLBACK (device_removed_cb), self); + g_signal_connect (device, NM_DEVICE_LINK_INITIALIZED, + G_CALLBACK (device_link_initialized_cb), + self); + g_signal_connect (device, "notify::" NM_DEVICE_IP_IFACE, G_CALLBACK (device_ip_iface_changed), self); @@ -1787,6 +1799,9 @@ add_device (NMManager *self, NMDevice *device, gboolean try_assume) NM_DEVICE_STATE_REASON_NOW_MANAGED); } + /* Try to generate a default connection. If this fails because the link is + * not initialized, we will retry again in device_link_initialized_cb(). + */ nm_settings_device_added (priv->settings, device); g_signal_emit (self, signals[DEVICE_ADDED], 0, device); g_object_notify (G_OBJECT (self), NM_MANAGER_DEVICES); |