summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/devices/nm-device-factory.c21
-rw-r--r--src/nm-manager.c3
2 files changed, 21 insertions, 3 deletions
diff --git a/src/devices/nm-device-factory.c b/src/devices/nm-device-factory.c
index 1303480857..b8edb9d102 100644
--- a/src/devices/nm-device-factory.c
+++ b/src/devices/nm-device-factory.c
@@ -88,12 +88,17 @@ nm_device_factory_new_link (NMDeviceFactory *factory,
const NMLinkType *link_types = NULL;
const char **setting_types = NULL;
int i;
+ NMDevice *device;
+ gboolean ignore = FALSE;
g_return_val_if_fail (factory != NULL, NULL);
g_return_val_if_fail (plink != NULL, NULL);
/* Ensure the factory can create interfaces for this connection */
nm_device_factory_get_supported_types (factory, &link_types, &setting_types);
+
+ NM_SET_OUT (out_ignore, FALSE);
+
for (i = 0; link_types[i] > NM_LINK_TYPE_UNKNOWN; i++) {
if (plink->type == link_types[i])
break;
@@ -115,7 +120,21 @@ nm_device_factory_new_link (NMDeviceFactory *factory,
return NULL;
}
- return interface->new_link (factory, plink, out_ignore, error);
+ device = interface->new_link (factory, plink, &ignore, error);
+ NM_SET_OUT (out_ignore, ignore);
+
+ if (!device && error && !*error) {
+ if (ignore) {
+ g_set_error (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_FAILED,
+ "Device factory %s ignores device",
+ G_OBJECT_TYPE_NAME (factory));
+ } else {
+ g_set_error (error, NM_MANAGER_ERROR, NM_MANAGER_ERROR_FAILED,
+ "Device factory %s failed to create device",
+ G_OBJECT_TYPE_NAME (factory));
+ }
+ }
+ return device;
}
NMDevice *
diff --git a/src/nm-manager.c b/src/nm-manager.c
index 082b7ef908..61e3aef78b 100644
--- a/src/nm-manager.c
+++ b/src/nm-manager.c
@@ -1936,7 +1936,6 @@ platform_link_added (NMManager *self,
{
NMDeviceFactory *factory;
NMDevice *device = NULL;
- GError *error = NULL;
g_return_if_fail (ifindex > 0);
@@ -1947,13 +1946,13 @@ platform_link_added (NMManager *self,
factory = nm_device_factory_manager_find_factory_for_link_type (plink->type);
if (factory) {
gboolean ignore = FALSE;
+ gs_free_error GError *error = NULL;
device = nm_device_factory_new_link (factory, plink, &ignore, &error);
if (!device) {
if (!ignore) {
nm_log_warn (LOGD_HW, "%s: factory failed to create device: %s",
plink->name, error->message);
- g_clear_error (&error);
}
return;
}