# 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"
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;