about summary refs log tree commit diff
path: root/src/core/nm-manager.c
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2024-02-22 17:22:03 +0100
committerMichael Biebl <biebl@debian.org>2024-02-22 17:22:03 +0100
commitee7b97d8af11fb1c2cbcd4df0deb298ff906fa8b (patch)
treeb0978e9f3ed4e2e9b727844e57637783ca47a8ef /src/core/nm-manager.c
parentd8ad0e3c21e712308cf070716acc421adfabd7d3 (diff)
parentbba2e4b4de668db525cbfdfc35292e5a0b51671a (diff)
Update upstream source from tag 'upstream/1.46.0'
Update to upstream version '1.46.0'
with Debian dir 8c30a24f4e6f4278d9943aef82e6ae63c4528df5
Diffstat (limited to 'src/core/nm-manager.c')
-rw-r--r--src/core/nm-manager.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/src/core/nm-manager.c b/src/core/nm-manager.c
index 2cf9cb1d..730ba476 100644
--- a/src/core/nm-manager.c
+++ b/src/core/nm-manager.c
@@ -4168,8 +4168,11 @@ platform_link_added(NMManager                     *self,
         gboolean              compatible = TRUE;
         gs_free_error GError *error      = NULL;
 
-        if (nm_device_get_link_type(candidate) != plink->type)
+        if (nm_device_get_device_type(candidate) == NM_DEVICE_TYPE_GENERIC) {
+            /* generic devices are compatible with all link types */
+        } else if (nm_device_get_link_type(candidate) != plink->type) {
             continue;
+        }
 
         if (!nm_streq(nm_device_get_iface(candidate), plink->name))
             continue;
@@ -4213,8 +4216,12 @@ platform_link_added(NMManager                     *self,
     }
 
 add:
-    /* Try registered device factories */
-    factory = nm_device_factory_manager_find_factory_for_link_type(plink->type);
+    if (dev_state && dev_state->generic_sw) {
+        factory = nm_device_factory_get_generic_factory();
+    } else {
+        /* Try registered device factories */
+        factory = nm_device_factory_manager_find_factory_for_link_type(plink->type);
+    }
     if (factory) {
         gboolean              ignore = FALSE;
         gs_free_error GError *error  = NULL;
@@ -7860,7 +7867,10 @@ nm_manager_write_device_state(NMManager *self, NMDevice *device, int *out_ifinde
                                       route_metric_default_aspired,
                                       route_metric_default_effective,
                                       nm_device_get_dhcp_config(device, AF_INET),
-                                      nm_device_get_dhcp_config(device, AF_INET6)))
+                                      nm_device_get_dhcp_config(device, AF_INET6),
+                                      nm_device_is_software(device)
+                                          && nm_device_get_device_type(device)
+                                                 == NM_DEVICE_TYPE_GENERIC))
         return FALSE;
 
     NM_SET_OUT(out_ifindex, ifindex);