From d4e56644a21464be6af716739cdbe4a8545a696d Mon Sep 17 00:00:00 2001 From: Martin Xu Date: Tue, 23 Mar 2010 17:27:46 +0800 Subject: [PATCH] Use udev_device_get_devtype before __connman_inet_get_device_type With some specific 3G cards __connman_inet_get_device_type() fails to give the correct device type and we end up having both ethernet and 3G services when pluging those in. As udev_device_get_devtype() is more reliable, we're now calling it first and falling back to __connman_inet_get_device_type() when udev_device_get_devtype() returns a NULL string. --- src/udev.c | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/src/udev.c b/src/udev.c index fe814b8..79df87c 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, "wlan") == 0) + return CONNMAN_DEVICE_TYPE_WIFI; + else if (g_strcmp0(devtype, "wimax") == 0) + return CONNMAN_DEVICE_TYPE_WIMAX; + else if (g_strcmp0(devtype, "wwan") == 0) + return CONNMAN_DEVICE_TYPE_CELLULAR; + + return CONNMAN_DEVICE_TYPE_UNKNOWN; +} + +static enum connman_device_type get_device_type( + struct udev_device *udev_device, int index) +{ + const char *devtype; + + 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,9 @@ 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 +351,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); -- 2.7.4