/** * connman_device_register: * @device: device structure * * Register device with the system */ int connman_device_register(struct connman_device *device) { GSList *list; DBG("device %p name %s", device, device->name); if (device->driver != NULL) return -EALREADY; for (list = driver_list; list; list = list->next) { struct connman_device_driver *driver = list->data; if (match_driver(device, driver) == FALSE) continue; DBG("driver %p name %s", driver, driver->name); if (driver->probe(device) == 0) { device->driver = driver; break; } } if (device->driver == NULL) return 0; return __connman_technology_add_device(device); }
static int network_probe(struct connman_element *element) { struct connman_network *network = element->network; GSList *list; int err; _DBG_NETWORK("element %p name %s", element, element->name); if (network == NULL) return -ENODEV; for (list = driver_list; list; list = list->next) { struct connman_network_driver *driver = list->data; if (match_driver(network, driver) == FALSE) continue; _DBG_NETWORK("driver %p name %s", driver, driver->name); if (driver->probe(network) == 0) { network->driver = driver; break; } } if (network->driver == NULL) return -ENODEV; err = register_interface(element); if (err < 0) { if (network->driver->remove) network->driver->remove(network); return err; } network->secondary = connman_device_get_secondary(network->device); switch (network->type) { case CONNMAN_NETWORK_TYPE_UNKNOWN: case CONNMAN_NETWORK_TYPE_VENDOR: break; case CONNMAN_NETWORK_TYPE_BLUETOOTH_PAN: case CONNMAN_NETWORK_TYPE_BLUETOOTH_DUN: case CONNMAN_NETWORK_TYPE_MBM: case CONNMAN_NETWORK_TYPE_HSO: case CONNMAN_NETWORK_TYPE_WIFI: case CONNMAN_NETWORK_TYPE_WIMAX: if (network->group != NULL && network->secondary == FALSE) __connman_profile_add_network(network); break; } return 0; }
static int network_probe(struct connman_network *network) { GSList *list; struct connman_network_driver *driver = NULL; DBG("network %p name %s", network, network->name); if (network->driver != NULL) return -EALREADY; for (list = driver_list; list; list = list->next) { driver = list->data; if (match_driver(network, driver) == FALSE) continue; DBG("driver %p name %s", driver, driver->name); if (driver->probe(network) == 0) break; driver = NULL; } if (driver == NULL) return -ENODEV; if (network->group == NULL) return -EINVAL; switch (network->type) { case CONNMAN_NETWORK_TYPE_UNKNOWN: case CONNMAN_NETWORK_TYPE_VENDOR: return 0; case CONNMAN_NETWORK_TYPE_ETHERNET: case CONNMAN_NETWORK_TYPE_BLUETOOTH_PAN: case CONNMAN_NETWORK_TYPE_BLUETOOTH_DUN: case CONNMAN_NETWORK_TYPE_CELLULAR: case CONNMAN_NETWORK_TYPE_WIFI: case CONNMAN_NETWORK_TYPE_WIMAX: network->driver = driver; if (__connman_service_create_from_network(network) == NULL) { network->driver = NULL; return -EINVAL; } } return 0; }