+static gboolean set_connected(gpointer user_data)
+{
+ struct connman_network *network = user_data;
+
+ if (network->connected == TRUE) {
+ struct connman_element *element;
+ enum connman_element_type type = CONNMAN_ELEMENT_TYPE_UNKNOWN;
+
+ switch (network->protocol) {
+ case CONNMAN_NETWORK_PROTOCOL_UNKNOWN:
+ return 0;
+ case CONNMAN_NETWORK_PROTOCOL_IP:
+ type = CONNMAN_ELEMENT_TYPE_DHCP;
+ break;
+ case CONNMAN_NETWORK_PROTOCOL_PPP:
+ type = CONNMAN_ELEMENT_TYPE_PPP;
+ break;
+ }
+
+ __connman_device_increase_connections(network->device);
+
+ __connman_device_set_network(network->device, network);
+
+ connman_device_set_disconnected(network->device, FALSE);
+
+ element = connman_element_create(NULL);
+ if (element != NULL) {
+ element->type = type;
+ element->index = network->element.index;
+
+ if (connman_element_register(element,
+ &network->element) < 0)
+ connman_element_unref(element);
+ }
+ } else {
+ connman_element_unregister_children(&network->element);
+
+ __connman_device_set_network(network->device, NULL);
+
+ __connman_device_decrease_connections(network->device);
+ }
+
+ return FALSE;
+}
+