From c1cf3c25c836f5beeecc4589b0aea52da7379587 Mon Sep 17 00:00:00 2001 From: Lubomir Rintel Date: Wed, 20 Jan 2016 12:45:21 +0100 Subject: [PATCH] linux-platform: treat gadget devices as ethernet devices Also, don't manage them by default. Whatver created it should take care of management. --- data/85-nm-unmanaged.rules | 5 +++++ src/platform/nm-linux-platform.c | 20 +++++++++++++------- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/data/85-nm-unmanaged.rules b/data/85-nm-unmanaged.rules index 887ab84599..edc4ddbe79 100644 --- a/data/85-nm-unmanaged.rules +++ b/data/85-nm-unmanaged.rules @@ -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" diff --git a/src/platform/nm-linux-platform.c b/src/platform/nm-linux-platform.c index f73c228b83..f5166803c8 100644 --- a/src/platform/nm-linux-platform.c +++ b/src/platform/nm-linux-platform.c @@ -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;