+}
+
+static int bluetooth_tech_set_tethering(struct connman_technology *technology,
+ const char *identifier, const char *passphrase,
+ const char *bridge, bool enabled)
+{
+ GHashTableIter hash_iter;
+ gpointer key, value;
+ int i = 0;
+
+ bluetooth_tethering = enabled;
+
+ g_hash_table_iter_init(&hash_iter, devices);
+
+ while (g_hash_table_iter_next(&hash_iter, &key, &value)) {
+ const char *path = key;
+ struct connman_device *device = value;
+
+ DBG("device %p", device);
+
+ if (tethering_create(path, technology, bridge, enabled)
+ )
+ i++;
+ }
+
+ DBG("%s %d device(s)", enabled ? "enabled" : "disabled", i);
+
+ if (i == 0)
+ return -ENODEV;
+
+ return 0;
+}
+
+static struct connman_technology_driver tech_driver = {
+ .name = "bluetooth",
+ .type = CONNMAN_SERVICE_TYPE_BLUETOOTH,
+ .probe = bluetooth_tech_probe,
+ .remove = bluetooth_tech_remove,
+ .set_tethering = bluetooth_tech_set_tethering,
+};
+
+static int bluetooth_init(void)
+{