summaryrefslogtreecommitdiff
path: root/src/nm-manager.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nm-manager.c')
-rw-r--r--src/nm-manager.c37
1 files changed, 22 insertions, 15 deletions
diff --git a/src/nm-manager.c b/src/nm-manager.c
index fe7c005061..5db7313631 100644
--- a/src/nm-manager.c
+++ b/src/nm-manager.c
@@ -1796,7 +1796,7 @@ factory_device_added_cb (NMDeviceFactory *factory,
{
GError *error = NULL;
- if (nm_device_realize (device, NULL, &error)) {
+ if (nm_device_realize (device, NULL, NULL, &error)) {
add_device (NM_MANAGER (user_data), device);
nm_device_setup_finish (device, NULL);
} else {
@@ -1848,22 +1848,29 @@ platform_link_added (NMManager *self,
device = find_device_by_iface (self, plink->name);
if (device) {
- if (!nm_device_is_real (device)) {
- if (nm_device_realize (device, plink, &error))
- nm_device_setup_finish (device, plink);
- else {
- nm_log_warn (LOGD_DEVICE, "(%s): %s", plink->name, error->message);
- g_clear_error (&error);
- remove_device (self, device, FALSE, FALSE);
- }
+ gboolean compatible = FALSE;
+
+ if (nm_device_is_real (device))
return;
- } else if (!nm_device_realize (device, plink, &error)) {
- nm_log_warn (LOGD_HW, "%s: factory failed to create device: %s",
- plink->name, error->message);
- g_clear_error (&error);
+
+ if (nm_device_realize (device, plink, &compatible, &error)) {
+ /* Success */
+ nm_device_setup_finish (device, plink);
return;
}
- return;
+
+ nm_log_warn (LOGD_DEVICE, "(%s): %s", plink->name, error->message);
+ remove_device (self, device, FALSE, FALSE);
+ g_clear_error (&error);
+
+ if (compatible) {
+ /* Device compatible with platform link, but some other fatal error
+ * happened during realization.
+ */
+ return;
+ }
+
+ /* Fall through and create new compatible device for the link */
}
/* Try registered device factories */
@@ -1902,7 +1909,7 @@ platform_link_added (NMManager *self,
if (device) {
if (nm_plugin_missing)
nm_device_set_nm_plugin_missing (device, TRUE);
- if (nm_device_realize (device, plink, &error)) {
+ if (nm_device_realize (device, plink, NULL, &error)) {
add_device (self, device);
nm_device_setup_finish (device, plink);
} else {