linux-platform: treat gadget devices as ethernet devices
authorLubomir Rintel <lkundrak@v3.sk>
Wed, 20 Jan 2016 11:45:21 +0000 (12:45 +0100)
committerLubomir Rintel <lkundrak@v3.sk>
Thu, 21 Jan 2016 10:33:59 +0000 (11:33 +0100)
Also, don't manage them by default. Whatver created it should take care of
management.

data/85-nm-unmanaged.rules
src/platform/nm-linux-platform.c

index 887ab84..edc4ddb 100644 (file)
@@ -26,4 +26,9 @@ ATTR{address}=="00:1c:42:*", ENV{INTERFACE}=="vnic[0-9]*", ENV{NM_UNMANAGED}="1"
 # in another net namespace and managed by libvirt, Docker or the like.
 ENV{ID_NET_DRIVER}=="veth", ENV{NM_UNMANAGED}="1"
 
+# USB gadget device. Unmanage by default, since whatever created it
+# might want to set it up itself (e.g. activate an ipv4.method=shared
+# connection).
+ENV{DEVTYPE}=="gadget", ENV{NM_UNMANAGED}="1"
+
 LABEL="nm_unmanaged_end"
index f73c228..f516680 100644 (file)
@@ -732,13 +732,19 @@ _linktype_get_type (NMPlatform *platform,
                if (wifi_utils_is_wifi (ifname, sysfs_path))
                        return NM_LINK_TYPE_WIFI;
 
-               /* Standard wired ethernet interfaces don't report an rtnl_link_type, so
-                * only allow fallback to Ethernet if no type is given.  This should
-                * prevent future virtual network drivers from being treated as Ethernet
-                * when they should be Generic instead.
-                */
-               if (arptype == ARPHRD_ETHER && !kind && !devtype)
-                       return NM_LINK_TYPE_ETHERNET;
+               if (arptype == ARPHRD_ETHER) {
+                       /* Standard wired ethernet interfaces don't report an rtnl_link_type, so
+                        * only allow fallback to Ethernet if no type is given.  This should
+                        * prevent future virtual network drivers from being treated as Ethernet
+                        * when they should be Generic instead.
+                        */
+                       if (!kind && !devtype)
+                               return NM_LINK_TYPE_ETHERNET;
+                       /* The USB gadget interfaces behave and look like ordinary ethernet devices
+                        * aside from the DEVTYPE. */
+                       if (!g_strcmp0 (devtype, "gadget"))
+                               return NM_LINK_TYPE_ETHERNET;
+               }
        }
 
        return NM_LINK_TYPE_UNKNOWN;