*
* 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
#include <linux/if_arp.h>
#include <linux/wireless.h>
-#include <connman/device.h>
-#include <connman/rtnl.h>
-#include <connman/log.h>
+#include <glib.h>
#include "connman.h"
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;
- DBG("index %d", index);
+ DBG("type %d index %d", type, index);
device = find_device(index);
if (device != NULL)
return;
devname = index2name(index);
+ if (devname == NULL)
+ return;
if (type == ARPHRD_ETHER) {
char bridge_path[PATH_MAX], wimax_path[PATH_MAX];
devtype = CONNMAN_DEVICE_TYPE_ETHERNET;
close(sk);
+ } else if (type == ARPHRD_NONE) {
+ if (g_str_has_prefix(devname, "hso") == TRUE)
+ devtype = CONNMAN_DEVICE_TYPE_HSO;
}
- if (devtype == CONNMAN_DEVICE_TYPE_UNKNOWN) {
+ switch (devtype) {
+ case CONNMAN_DEVICE_TYPE_UNKNOWN:
g_free(devname);
return;
+ 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;
}
- name = index2ident(index, "dev_");
-
device = connman_device_create(name, devtype);
if (device == NULL) {
g_free(devname);
return;
}
+ 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;
+ }
+
+ connman_device_set_mode(device, mode);
+
connman_device_set_index(device, index);
connman_device_set_interface(device, devname);
{
struct connman_device *device;
- DBG("index %d", index);
+ DBG("type %d index %d", type, index);
device = find_device(index);
if (device == NULL)