summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuillaume Lucas <guillaumex.lucas@intel.com>2011-02-04 08:04:05 +0000
committerSamuel Ortiz <sameo@linux.intel.com>2011-02-04 11:37:21 +0100
commit483fb555c74ad7ee754c0292a9ecefff28e54cf8 (patch)
tree34d3d1c09ad685371b741e221d38b98afbeb86e5
parent1bc70d43943373200b3bbfc69d5a6b8e880a6657 (diff)
downloadconnman-483fb555c74ad7ee754c0292a9ecefff28e54cf8.tar.gz
connman-483fb555c74ad7ee754c0292a9ecefff28e54cf8.tar.bz2
connman-483fb555c74ad7ee754c0292a9ecefff28e54cf8.zip
technology: trigger technology creation by new interface
-rw-r--r--src/technology.c154
1 files changed, 79 insertions, 75 deletions
diff --git a/src/technology.c b/src/technology.c
index 7d89b2ef..5ef3d10e 100644
--- a/src/technology.c
+++ b/src/technology.c
@@ -139,81 +139,6 @@ void connman_technology_driver_unregister(struct connman_technology_driver *driv
driver_list = g_slist_remove(driver_list, driver);
}
-void __connman_technology_add_interface(enum connman_service_type type,
- int index, const char *name, const char *ident)
-{
- GSList *list;
-
- switch (type) {
- case CONNMAN_SERVICE_TYPE_UNKNOWN:
- case CONNMAN_SERVICE_TYPE_SYSTEM:
- return;
- case CONNMAN_SERVICE_TYPE_ETHERNET:
- case CONNMAN_SERVICE_TYPE_WIFI:
- case CONNMAN_SERVICE_TYPE_WIMAX:
- case CONNMAN_SERVICE_TYPE_BLUETOOTH:
- case CONNMAN_SERVICE_TYPE_CELLULAR:
- case CONNMAN_SERVICE_TYPE_GPS:
- case CONNMAN_SERVICE_TYPE_VPN:
- case CONNMAN_SERVICE_TYPE_GADGET:
- break;
- }
-
- connman_info("Create interface %s [ %s ]", name,
- __connman_service_type2string(type));
-
- for (list = technology_list; list; list = list->next) {
- struct connman_technology *technology = list->data;
-
- if (technology->type != type)
- continue;
-
- if (technology->driver == NULL)
- continue;
-
- if (technology->driver->add_interface)
- technology->driver->add_interface(technology,
- index, name, ident);
- }
-}
-
-void __connman_technology_remove_interface(enum connman_service_type type,
- int index, const char *name, const char *ident)
-{
- GSList *list;
-
- switch (type) {
- case CONNMAN_SERVICE_TYPE_UNKNOWN:
- case CONNMAN_SERVICE_TYPE_SYSTEM:
- return;
- case CONNMAN_SERVICE_TYPE_ETHERNET:
- case CONNMAN_SERVICE_TYPE_WIFI:
- case CONNMAN_SERVICE_TYPE_WIMAX:
- case CONNMAN_SERVICE_TYPE_BLUETOOTH:
- case CONNMAN_SERVICE_TYPE_CELLULAR:
- case CONNMAN_SERVICE_TYPE_GPS:
- case CONNMAN_SERVICE_TYPE_VPN:
- case CONNMAN_SERVICE_TYPE_GADGET:
- break;
- }
-
- connman_info("Remove interface %s [ %s ]", name,
- __connman_service_type2string(type));
-
- for (list = technology_list; list; list = list->next) {
- struct connman_technology *technology = list->data;
-
- if (technology->type != type)
- continue;
-
- if (technology->driver == NULL)
- continue;
-
- if (technology->driver->remove_interface)
- technology->driver->remove_interface(technology, index);
- }
-}
-
static void tethering_changed(struct connman_technology *technology)
{
connman_bool_t tethering = technology->tethering;
@@ -619,6 +544,85 @@ static void technology_put(struct connman_technology *technology)
g_free(technology);
}
+void __connman_technology_add_interface(enum connman_service_type type,
+ int index, const char *name, const char *ident)
+{
+ GSList *list;
+
+ switch (type) {
+ case CONNMAN_SERVICE_TYPE_UNKNOWN:
+ case CONNMAN_SERVICE_TYPE_SYSTEM:
+ return;
+ case CONNMAN_SERVICE_TYPE_ETHERNET:
+ case CONNMAN_SERVICE_TYPE_WIFI:
+ case CONNMAN_SERVICE_TYPE_WIMAX:
+ case CONNMAN_SERVICE_TYPE_BLUETOOTH:
+ case CONNMAN_SERVICE_TYPE_CELLULAR:
+ case CONNMAN_SERVICE_TYPE_GPS:
+ case CONNMAN_SERVICE_TYPE_VPN:
+ case CONNMAN_SERVICE_TYPE_GADGET:
+ break;
+ }
+
+ connman_info("Create interface %s [ %s ]", name,
+ __connman_service_type2string(type));
+
+ technology_get(type);
+
+ for (list = technology_list; list; list = list->next) {
+ struct connman_technology *technology = list->data;
+
+ if (technology->type != type)
+ continue;
+
+ if (technology->driver == NULL)
+ continue;
+
+ if (technology->driver->add_interface)
+ technology->driver->add_interface(technology,
+ index, name, ident);
+ }
+}
+
+void __connman_technology_remove_interface(enum connman_service_type type,
+ int index, const char *name, const char *ident)
+{
+ GSList *list;
+
+ switch (type) {
+ case CONNMAN_SERVICE_TYPE_UNKNOWN:
+ case CONNMAN_SERVICE_TYPE_SYSTEM:
+ return;
+ case CONNMAN_SERVICE_TYPE_ETHERNET:
+ case CONNMAN_SERVICE_TYPE_WIFI:
+ case CONNMAN_SERVICE_TYPE_WIMAX:
+ case CONNMAN_SERVICE_TYPE_BLUETOOTH:
+ case CONNMAN_SERVICE_TYPE_CELLULAR:
+ case CONNMAN_SERVICE_TYPE_GPS:
+ case CONNMAN_SERVICE_TYPE_VPN:
+ case CONNMAN_SERVICE_TYPE_GADGET:
+ break;
+ }
+
+ connman_info("Remove interface %s [ %s ]", name,
+ __connman_service_type2string(type));
+
+ for (list = technology_list; list; list = list->next) {
+ struct connman_technology *technology = list->data;
+
+ if (technology->type != type)
+ continue;
+
+ if (technology->driver == NULL)
+ continue;
+
+ if (technology->driver->remove_interface)
+ technology->driver->remove_interface(technology, index);
+
+ technology_put(technology);
+ }
+}
+
static void unregister_technology(gpointer data)
{
struct connman_technology *technology = data;