return "network";
case CONNMAN_ELEMENT_TYPE_SERVICE:
return "service";
- case CONNMAN_ELEMENT_TYPE_IPV4:
- return "ipv4";
case CONNMAN_ELEMENT_TYPE_IPV6:
return "ipv6";
- case CONNMAN_ELEMENT_TYPE_DHCP:
- return "dhcp";
case CONNMAN_ELEMENT_TYPE_BOOTP:
return "bootp";
case CONNMAN_ELEMENT_TYPE_ZEROCONF:
return "zeroconf";
- case CONNMAN_ELEMENT_TYPE_CONNECTION:
- return "connection";
case CONNMAN_ELEMENT_TYPE_VENDOR:
return "vendor";
}
enum connman_device_type type;
device = __connman_element_get_device(element);
- if (device == NULL)
- return NULL;
+ if (device == NULL) {
+ /* Workaround for the connection removal. */
+ service = __connman_service_lookup_from_index(element->index);
+ return service;
+ }
type = connman_device_get_type(device);
case CONNMAN_DEVICE_TYPE_UNKNOWN:
case CONNMAN_DEVICE_TYPE_VENDOR:
case CONNMAN_DEVICE_TYPE_GPS:
+ case CONNMAN_DEVICE_TYPE_GADGET:
break;
case CONNMAN_DEVICE_TYPE_ETHERNET:
case CONNMAN_DEVICE_TYPE_WIFI:
return __connman_element_get_device(element->parent);
}
-const char *__connman_element_get_device_path(struct connman_element *element)
-{
- struct connman_device *device;
-
- device = __connman_element_get_device(element);
- if (device == NULL)
- return NULL;
-
- return connman_device_get_path(device);
-}
-
-const char *__connman_element_get_network_path(struct connman_element *element)
-{
- if (element->type == CONNMAN_ELEMENT_TYPE_NETWORK &&
- element->network != NULL)
- return element->path;
-
- if (element->parent == NULL)
- return NULL;
-
- return __connman_element_get_network_path(element->parent);
-}
-
struct find_data {
enum connman_service_type type;
struct connman_device *device;
case CONNMAN_SERVICE_TYPE_CELLULAR:
case CONNMAN_SERVICE_TYPE_GPS:
case CONNMAN_SERVICE_TYPE_VPN:
+ case CONNMAN_SERVICE_TYPE_GADGET:
return FALSE;
case CONNMAN_SERVICE_TYPE_WIFI:
case CONNMAN_SERVICE_TYPE_WIMAX:
case CONNMAN_SERVICE_TYPE_SYSTEM:
case CONNMAN_SERVICE_TYPE_GPS:
case CONNMAN_SERVICE_TYPE_VPN:
+ case CONNMAN_SERVICE_TYPE_GADGET:
return FALSE;
case CONNMAN_SERVICE_TYPE_ETHERNET:
case CONNMAN_SERVICE_TYPE_WIFI:
case CONNMAN_SERVICE_TYPE_SYSTEM:
case CONNMAN_SERVICE_TYPE_GPS:
case CONNMAN_SERVICE_TYPE_VPN:
+ case CONNMAN_SERVICE_TYPE_GADGET:
return FALSE;
case CONNMAN_SERVICE_TYPE_ETHERNET:
case CONNMAN_SERVICE_TYPE_WIFI:
__connman_element_initialize(element);
+ element->name = g_strdup(name);
+
return element;
}
free_properties(element);
g_free(element->hostname);
g_free(element->domainname);
- g_free(element->ipv4.address);
- g_free(element->ipv4.netmask);
- g_free(element->ipv4.gateway);
- g_free(element->ipv4.network);
- g_free(element->ipv4.broadcast);
- g_free(element->ipv4.nameserver);
- g_free(element->ipv4.timeserver);
- g_free(element->ipv4.pac);
g_free(element->ipv6.address);
g_free(element->ipv6.network);
g_free(element->devname);
id, value);
*((char **) value) = element->domainname;
break;
- case CONNMAN_PROPERTY_ID_IPV4_METHOD:
- if (element->ipv4.method == CONNMAN_IPCONFIG_METHOD_UNKNOWN)
- return connman_element_get_value(element->parent,
- id, value);
- *((const char **) value) = __connman_ipconfig_method2string(element->ipv4.method);
- break;
- case CONNMAN_PROPERTY_ID_IPV4_ADDRESS:
- if (element->ipv4.address == NULL)
- return connman_element_get_value(element->parent,
- id, value);
- *((char **) value) = element->ipv4.address;
- break;
- case CONNMAN_PROPERTY_ID_IPV4_NETMASK:
- if (element->ipv4.netmask == NULL)
- return connman_element_get_value(element->parent,
- id, value);
- *((char **) value) = element->ipv4.netmask;
- break;
- case CONNMAN_PROPERTY_ID_IPV4_GATEWAY:
- if (element->ipv4.gateway == NULL)
- return connman_element_get_value(element->parent,
- id, value);
- *((char **) value) = element->ipv4.gateway;
- break;
- case CONNMAN_PROPERTY_ID_IPV4_BROADCAST:
- if (element->ipv4.broadcast == NULL)
- return connman_element_get_value(element->parent,
- id, value);
- *((char **) value) = element->ipv4.broadcast;
- break;
- case CONNMAN_PROPERTY_ID_IPV4_NAMESERVER:
- if (element->ipv4.nameserver == NULL)
- return connman_element_get_value(element->parent,
- id, value);
- *((char **) value) = element->ipv4.nameserver;
- break;
- case CONNMAN_PROPERTY_ID_IPV4_TIMESERVER:
- if (element->ipv4.timeserver == NULL)
- return connman_element_get_value(element->parent,
- id, value);
- *((char **) value) = element->ipv4.timeserver;
- break;
- case CONNMAN_PROPERTY_ID_IPV4_PAC:
- if (element->ipv4.pac == NULL)
- return connman_element_get_value(element->parent,
- id, value);
- *((char **) value) = element->ipv4.pac;
- break;
case CONNMAN_PROPERTY_ID_IPV6_GATEWAY:
if (element->ipv6.gateway == NULL)
return connman_element_get_value(element->parent,
}
}
- if (element->type == CONNMAN_ELEMENT_TYPE_DHCP)
- element->ipv4.method = CONNMAN_IPCONFIG_METHOD_DHCP;
-
element->parent = parent;
register_element(element, NULL);
__connman_service_indicate_error(service, convert_error(error));
}
+void __connman_element_set_driver(struct connman_element *element)
+{
+ GSList *list;
+
+ DBG("element %p name %s driver %p", element, element->name,
+ element->driver);
+
+ if (element->driver)
+ return;
+
+ for (list = driver_list; list; list = list->next) {
+ struct connman_driver *driver = list->data;
+
+ if (match_driver(element, driver) == FALSE)
+ continue;
+
+ element->driver = driver;
+
+ break;
+ }
+}
+
int __connman_element_init(const char *device, const char *nodevice)
{
struct connman_element *element;
__connman_rtnl_start();
- __connman_connection_init();
- __connman_ipv4_init();
__connman_dhcp_init();
__connman_wpad_init();
+ __connman_wispr_init();
__connman_rfkill_init();
}
__connman_rfkill_cleanup();
+ __connman_wispr_cleanup();
__connman_wpad_cleanup();
__connman_dhcp_cleanup();
- __connman_ipv4_cleanup();
__connman_provider_cleanup();
- __connman_connection_cleanup();
}
static gboolean free_driver(GNode *node, gpointer data)
g_node_traverse(element_root, G_POST_ORDER, G_TRAVERSE_ALL, -1,
free_node, NULL);
+ connman_element_unref(element_root->data);
+
g_node_destroy(element_root);
element_root = NULL;