From: Martin Xu <martin...@intel.com> We can not just use __connman_inet_get_device_type to acquire connman_device_type, because it can't decide the Wireless WAN device and Ethernet device. consequently, when inserting 3G card such as Dell 5530/5540 the 3G service and wired service will show at the same time and ConnMan will mess up. udev_device_get_devtype can get the devtype, such as Wireless WAN and Wireless LAN device. But at some cases it just return NULL to Ethernet and "Bluetooth" device. At this case, __connman_inet_get_device_type is used to decide the Ethernet and "Bluetooth" device. --- src/udev.c | 32 +++++++++++++++++++++++++++++++- 1 files changed, 31 insertions(+), 1 deletions(-)
diff --git a/src/udev.c b/src/udev.c index fe814b8..c1cc490 100644 --- a/src/udev.c +++ b/src/udev.c @@ -54,6 +54,30 @@ static struct connman_device *find_device(int index) return NULL; } +static enum connman_device_type string2devtype(const char *devtype) +{ + if (g_strcmp0(devtype, "wwan") == 0) + return CONNMAN_DEVICE_TYPE_CELLULAR; + else if (g_strcmp0(devtype, "wlan") == 0) + return CONNMAN_DEVICE_TYPE_WIFI; + else if (g_strcmp0(devtype, "wimax") == 0) + return CONNMAN_DEVICE_TYPE_WIMAX; + + return CONNMAN_DEVICE_TYPE_UNKNOWN; +} + +static enum connman_device_type get_device_type( + struct udev_device *udev_device, int index) +{ + const char *devtype = NULL; + + devtype = udev_device_get_devtype(udev_device); + if (devtype == NULL) + return __connman_inet_get_device_type(index); + + return string2devtype(devtype); +} + static void add_net_device(struct udev_device *udev_device) { struct udev_list_entry *entry; @@ -84,7 +108,10 @@ static void add_net_device(struct udev_device *udev_device) if (index < 0) return; - devtype = __connman_inet_get_device_type(index); + + devtype = get_device_type(udev_device, index); + + DBG("devtype %d", devtype); switch (devtype) { case CONNMAN_DEVICE_TYPE_UNKNOWN: @@ -325,6 +352,9 @@ static void print_device(struct udev_device *device, const char *action) } devtype = udev_device_get_devtype(device); + + DBG("devtype %s", devtype); + sysname = udev_device_get_sysname(device); driver = udev_device_get_driver(parent); -- 1.6.1.3 _______________________________________________ connman mailing list connman@connman.net http://lists.connman.net/listinfo/connman