X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Fdetect.c;h=bd51822d1c53a52f2cb2310e3db21edcb972d784;hb=3ff7262ed26840a697c914a7905543d6c3efac6c;hp=c6988df86afd2ecb882e82ced607bb7d8dd33d9b;hpb=62dd8d00c2f5b7bf19b44e7541aa419cd50dd104;p=connman diff --git a/src/detect.c b/src/detect.c index c6988df..bd51822 100644 --- a/src/detect.c +++ b/src/detect.c @@ -2,7 +2,7 @@ * * Connection Manager * - * Copyright (C) 2007-2008 Intel Corporation. All rights reserved. + * Copyright (C) 2007-2009 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -37,10 +37,6 @@ #include -#include -#include -#include - #include "connman.h" static GSList *device_list = NULL; @@ -134,6 +130,7 @@ static void detect_newlink(unsigned short type, int index, unsigned flags, unsigned change) { enum connman_device_type devtype = CONNMAN_DEVICE_TYPE_UNKNOWN; + enum connman_device_mode mode = CONNMAN_DEVICE_MODE_UNKNOWN; struct connman_device *device; gchar *name, *devname; @@ -144,6 +141,8 @@ static void detect_newlink(unsigned short type, int index, return; devname = index2name(index); + if (devname == NULL) + return; if (type == ARPHRD_ETHER) { char bridge_path[PATH_MAX], wimax_path[PATH_MAX]; @@ -168,7 +167,7 @@ static void detect_newlink(unsigned short type, int index, else if (stat(wimax_path, &st) == 0 && (st.st_mode & S_IFDIR)) devtype = CONNMAN_DEVICE_TYPE_WIMAX; else if (ioctl(sk, SIOCGIWNAME, &iwr) == 0) - devtype = CONNMAN_DEVICE_TYPE_UNKNOWN; + devtype = CONNMAN_DEVICE_TYPE_WIFI; else devtype = CONNMAN_DEVICE_TYPE_ETHERNET; @@ -178,18 +177,23 @@ static void detect_newlink(unsigned short type, int index, devtype = CONNMAN_DEVICE_TYPE_HSO; } - if (devtype == CONNMAN_DEVICE_TYPE_UNKNOWN) { + switch (devtype) { + case CONNMAN_DEVICE_TYPE_UNKNOWN: g_free(devname); return; - } - - switch (devtype) { + case CONNMAN_DEVICE_TYPE_ETHERNET: + case CONNMAN_DEVICE_TYPE_WIFI: + case CONNMAN_DEVICE_TYPE_WIMAX: + name = index2ident(index, "dev_"); + break; + case CONNMAN_DEVICE_TYPE_BLUETOOTH: case CONNMAN_DEVICE_TYPE_HSO: + case CONNMAN_DEVICE_TYPE_NOZOMI: + case CONNMAN_DEVICE_TYPE_HUAWEI: + case CONNMAN_DEVICE_TYPE_NOVATEL: + case CONNMAN_DEVICE_TYPE_VENDOR: name = strdup(devname); break; - default: - name = index2ident(index, "dev_"); - break; } device = connman_device_create(name, devtype); @@ -200,14 +204,31 @@ static void detect_newlink(unsigned short type, int index, } switch (devtype) { + case CONNMAN_DEVICE_TYPE_UNKNOWN: + case CONNMAN_DEVICE_TYPE_VENDOR: + case CONNMAN_DEVICE_TYPE_NOZOMI: + case CONNMAN_DEVICE_TYPE_HUAWEI: + case CONNMAN_DEVICE_TYPE_NOVATEL: + mode = CONNMAN_DEVICE_MODE_UNKNOWN; + break; + case CONNMAN_DEVICE_TYPE_ETHERNET: + mode = CONNMAN_DEVICE_MODE_TRANSPORT_IP; + break; + case CONNMAN_DEVICE_TYPE_WIFI: + case CONNMAN_DEVICE_TYPE_WIMAX: + mode = CONNMAN_DEVICE_MODE_NETWORK_SINGLE; + break; case CONNMAN_DEVICE_TYPE_BLUETOOTH: + mode = CONNMAN_DEVICE_MODE_NETWORK_MULTIPLE; + break; case CONNMAN_DEVICE_TYPE_HSO: + mode = CONNMAN_DEVICE_MODE_NETWORK_SINGLE; connman_device_set_policy(device, CONNMAN_DEVICE_POLICY_MANUAL); break; - default: - break; } + connman_device_set_mode(device, mode); + connman_device_set_index(device, index); connman_device_set_interface(device, devname);