From 3909f166fb41fba2521bf84ed5fc87d367c163b8 Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Thu, 1 Jan 2009 18:52:16 +0100 Subject: [PATCH] Allow transport definition for device mode --- include/device.h | 7 ++++--- plugins/bluetooth.c | 2 +- plugins/wifi.c | 2 +- src/detect.c | 22 ++++++++++++++++++---- src/device.c | 50 ++++++++++++++++++++++++++++++++++++++++---------- 5 files changed, 64 insertions(+), 19 deletions(-) diff --git a/include/device.h b/include/device.h index c9f6d76..b434db5 100644 --- a/include/device.h +++ b/include/device.h @@ -46,9 +46,10 @@ enum connman_device_type { }; enum connman_device_mode { - CONNMAN_DEVICE_MODE_NO_NETWORK = 0, - CONNMAN_DEVICE_MODE_SINGLE_NETWORK = 1, - CONNMAN_DEVICE_MODE_MULTIPLE_NETWORKS = 2, + CONNMAN_DEVICE_MODE_UNKNOWN = 0, + CONNMAN_DEVICE_MODE_NETWORK_SINGLE = 1, + CONNMAN_DEVICE_MODE_NETWORK_MULTIPLE = 2, + CONNMAN_DEVICE_MODE_TRANSPORT_IP = 3, }; enum connman_device_policy { diff --git a/plugins/bluetooth.c b/plugins/bluetooth.c index 8f90a98..ba5c3a2 100644 --- a/plugins/bluetooth.c +++ b/plugins/bluetooth.c @@ -627,7 +627,7 @@ static void adapter_properties(DBusConnection *connection, const char *path, connman_device_set_interface(adapter, node); connman_device_set_policy(adapter, CONNMAN_DEVICE_POLICY_MANUAL); - connman_device_set_mode(adapter, CONNMAN_DEVICE_MODE_MULTIPLE_NETWORKS); + connman_device_set_mode(adapter, CONNMAN_DEVICE_MODE_NETWORK_MULTIPLE); if (connman_device_register(adapter) < 0) { connman_device_unref(adapter); diff --git a/plugins/wifi.c b/plugins/wifi.c index 10541f2..e07901c 100644 --- a/plugins/wifi.c +++ b/plugins/wifi.c @@ -568,7 +568,7 @@ static void wifi_newlink(unsigned short type, int index, g_free(devname); g_free(name); - connman_device_set_mode(device, CONNMAN_DEVICE_MODE_SINGLE_NETWORK); + connman_device_set_mode(device, CONNMAN_DEVICE_MODE_NETWORK_SINGLE); if (connman_device_register(device) < 0) { connman_device_unregister(device); diff --git a/src/detect.c b/src/detect.c index 781b8fa..57ea83e 100644 --- a/src/detect.c +++ b/src/detect.c @@ -130,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; struct connman_device *device; gchar *name, *devname; @@ -198,15 +199,28 @@ static void detect_newlink(unsigned short type, int index, } switch (devtype) { + case CONNMAN_DEVICE_TYPE_UNKNOWN: + case CONNMAN_DEVICE_TYPE_VENDOR: + 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); - connman_device_set_mode(device, - CONNMAN_DEVICE_MODE_SINGLE_NETWORK); - break; - default: break; } + connman_device_set_mode(device, mode); + connman_device_set_index(device, index); connman_device_set_interface(device, devname); diff --git a/src/device.c b/src/device.c index 84be26e..d5e836b 100644 --- a/src/device.c +++ b/src/device.c @@ -48,6 +48,9 @@ struct connman_device { static const char *type2description(enum connman_device_type type) { switch (type) { + case CONNMAN_DEVICE_TYPE_UNKNOWN: + case CONNMAN_DEVICE_TYPE_VENDOR: + break; case CONNMAN_DEVICE_TYPE_ETHERNET: return "Ethernet"; case CONNMAN_DEVICE_TYPE_WIFI: @@ -58,14 +61,17 @@ static const char *type2description(enum connman_device_type type) return "Bluetooth"; case CONNMAN_DEVICE_TYPE_HSO: return "Cellular"; - default: - return NULL; } + + return NULL; } static const char *type2string(enum connman_device_type type) { switch (type) { + case CONNMAN_DEVICE_TYPE_UNKNOWN: + case CONNMAN_DEVICE_TYPE_VENDOR: + break; case CONNMAN_DEVICE_TYPE_ETHERNET: return "ethernet"; case CONNMAN_DEVICE_TYPE_WIFI: @@ -76,9 +82,9 @@ static const char *type2string(enum connman_device_type type) return "bluetooth"; case CONNMAN_DEVICE_TYPE_HSO: return "cellular"; - default: - return NULL; } + + return NULL; } static const char *policy2string(enum connman_device_policy policy) @@ -264,11 +270,17 @@ static DBusMessage *get_properties(DBusConnection *conn, connman_dbus_dict_append_variant(&dict, "Scanning", DBUS_TYPE_BOOLEAN, &device->scanning); - if (device->mode != CONNMAN_DEVICE_MODE_NO_NETWORK) { + switch (device->mode) { + case CONNMAN_DEVICE_MODE_UNKNOWN: + case CONNMAN_DEVICE_MODE_TRANSPORT_IP: + break; + case CONNMAN_DEVICE_MODE_NETWORK_SINGLE: + case CONNMAN_DEVICE_MODE_NETWORK_MULTIPLE: dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, NULL, &entry); append_networks(device, &entry); dbus_message_iter_close_container(&dict, &entry); + break; } dbus_message_iter_close_container(&array, &dict); @@ -357,8 +369,14 @@ static DBusMessage *propose_scan(DBusConnection *conn, DBG("conn %p", conn); - if (device->mode == CONNMAN_DEVICE_MODE_NO_NETWORK) + switch (device->mode) { + case CONNMAN_DEVICE_MODE_UNKNOWN: + case CONNMAN_DEVICE_MODE_TRANSPORT_IP: return __connman_error_not_supported(msg); + case CONNMAN_DEVICE_MODE_NETWORK_SINGLE: + case CONNMAN_DEVICE_MODE_NETWORK_MULTIPLE: + break; + } if (!device->driver || !device->driver->scan) return __connman_error_not_supported(msg); @@ -557,8 +575,8 @@ struct connman_device *connman_device_create(const char *node, device->element.device = device; device->element.destruct = device_destruct; - device->type = type; - device->mode = CONNMAN_DEVICE_MODE_NO_NETWORK; + device->type = type; + device->mode = CONNMAN_DEVICE_MODE_UNKNOWN; device->policy = CONNMAN_DEVICE_POLICY_AUTO; device->networks = g_hash_table_new_full(g_str_hash, g_str_equal, @@ -748,8 +766,14 @@ int connman_device_set_carrier(struct connman_device *device, { DBG("driver %p carrier %d", device, carrier); - if (device->mode != CONNMAN_DEVICE_MODE_NO_NETWORK) + switch (device->mode) { + case CONNMAN_DEVICE_MODE_UNKNOWN: + case CONNMAN_DEVICE_MODE_NETWORK_SINGLE: + case CONNMAN_DEVICE_MODE_NETWORK_MULTIPLE: return -EINVAL; + case CONNMAN_DEVICE_MODE_TRANSPORT_IP: + break; + } if (device->carrier == carrier) return -EALREADY; @@ -833,8 +857,14 @@ int connman_device_add_network(struct connman_device *device, DBG("device %p network %p", device, network); - if (device->mode == CONNMAN_DEVICE_MODE_NO_NETWORK) + switch (device->mode) { + case CONNMAN_DEVICE_MODE_UNKNOWN: + case CONNMAN_DEVICE_MODE_TRANSPORT_IP: return -EINVAL; + case CONNMAN_DEVICE_MODE_NETWORK_SINGLE: + case CONNMAN_DEVICE_MODE_NETWORK_MULTIPLE: + break; + } __connman_network_set_device(network, device); -- 1.7.9.5