platform: always try to refetch new ethernet links
authorBeniamino Galvani <bgalvani@redhat.com>
Tue, 26 Jan 2016 20:32:07 +0000 (21:32 +0100)
committerBeniamino Galvani <bgalvani@redhat.com>
Fri, 12 Feb 2016 13:41:56 +0000 (14:41 +0100)
Due to a kernel bug [1], we sometimes receive spurious NEWLINK
messages after a wifi interface has disappeared. Since the link is not
present anymore we can't determine its type and thus it will show up
as a Ethernet one, with no address specified.  Request the link again
to check if it really exists.

[1] https://bugzilla.redhat.com/show_bug.cgi?id=1302037

https://bugzilla.gnome.org/show_bug.cgi?id=761151

src/platform/nm-linux-platform.c

index 7d0ca9c..6801082 100644 (file)
@@ -3282,6 +3282,19 @@ cache_pre_hook (NMPCache *cache, const NMPObject *old, const NMPObject *new, NMP
                                                         DELAYED_ACTION_TYPE_REFRESH_LINK,
                                                         GINT_TO_POINTER (new->link.ifindex));
                        }
+                       if (   new->link.type == NM_LINK_TYPE_ETHERNET
+                           && new->link.addr.len == 0) {
+                               /* Due to a kernel bug, we sometimes receive spurious NEWLINK
+                                * messages after a wifi interface has disappeared. Since the
+                                * link is not present anymore we can't determine its type and
+                                * thus it will show up as a Ethernet one, with no address
+                                * specified.  Request the link again to check if it really
+                                * exists.  https://bugzilla.redhat.com/show_bug.cgi?id=1302037
+                                */
+                               delayed_action_schedule (platform,
+                                                        DELAYED_ACTION_TYPE_REFRESH_LINK,
+                                                        GINT_TO_POINTER (new->link.ifindex));
+                       }
                }
                {
                        /* on enslave/release, we also refresh the master. */