summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJukka Rissanen <jukka.rissanen@linux.intel.com>2013-04-25 14:47:49 +0300
committerPatrik Flykt <patrik.flykt@linux.intel.com>2013-04-26 12:31:32 +0300
commit409f346fbf0cc54c04682fdb8982a76e1ce53b21 (patch)
treefb9df123a82f0f15c5b918da489f1d3d6bd535e5
parent03055c5a5eabca0f8bc1daf9e7f20708fa11e324 (diff)
downloadconnman-409f346fbf0cc54c04682fdb8982a76e1ce53b21.tar.gz
connman-409f346fbf0cc54c04682fdb8982a76e1ce53b21.tar.bz2
connman-409f346fbf0cc54c04682fdb8982a76e1ce53b21.zip
device: Add support functions needed by ethernet tethering
-rw-r--r--include/device.h3
-rw-r--r--src/device.c43
2 files changed, 46 insertions, 0 deletions
diff --git a/include/device.h b/include/device.h
index b372821f..33825756 100644
--- a/include/device.h
+++ b/include/device.h
@@ -113,6 +113,9 @@ int connman_device_set_regdom(struct connman_device *device,
void connman_device_regdom_notify(struct connman_device *device,
int result, const char *alpha2);
struct connman_device *connman_device_create_from_index(int index);
+struct connman_device *connman_device_find_by_index(int index);
+int connman_device_disconnect_service(struct connman_device *device);
+int connman_device_reconnect_service(struct connman_device *device);
struct connman_device_driver {
const char *name;
diff --git a/src/device.c b/src/device.c
index 2e0dbdca..5feeee12 100644
--- a/src/device.c
+++ b/src/device.c
@@ -647,6 +647,36 @@ int __connman_device_disconnect(struct connman_device *device)
return 0;
}
+int connman_device_disconnect_service(struct connman_device *device)
+{
+ DBG("device %p", device);
+
+ device->reconnect = FALSE;
+
+ if (device->network) {
+ struct connman_service *service =
+ connman_service_lookup_from_network(device->network);
+
+ if (service != NULL)
+ __connman_service_disconnect(service);
+ else
+ connman_network_set_connected(device->network, FALSE);
+ }
+
+ return 0;
+}
+
+int connman_device_reconnect_service(struct connman_device *device)
+{
+ DBG("device %p", device);
+
+ device->reconnect = TRUE;
+
+ __connman_service_auto_connect();
+
+ return 0;
+}
+
static void mark_network_available(gpointer key, gpointer value,
gpointer user_data)
{
@@ -1035,6 +1065,19 @@ struct connman_device *__connman_device_find_device(
return NULL;
}
+struct connman_device *connman_device_find_by_index(int index)
+{
+ GSList *list;
+
+ for (list = device_list; list != NULL; list = list->next) {
+ struct connman_device *device = list->data;
+ if (device->index == index)
+ return device;
+ }
+
+ return NULL;
+}
+
/**
* connman_device_set_regdom
* @device: device structure