-
- if (ipdevice->config_ipv4 == NULL && ipdevice->config_ipv6 == NULL)
- return;
-
- if (ipdevice->driver_ipv4 != NULL && ipdevice->driver_ipv6 != NULL)
- return;
-
- if (ipdevice->config_ipv4) {
- switch (ipdevice->config_ipv4->method) {
- case CONNMAN_IPCONFIG_METHOD_UNKNOWN:
- case CONNMAN_IPCONFIG_METHOD_OFF:
- case CONNMAN_IPCONFIG_METHOD_FIXED:
- case CONNMAN_IPCONFIG_METHOD_MANUAL:
- break;
- case CONNMAN_IPCONFIG_METHOD_DHCP:
- is_dhcpv4 = 1;
- break;
- }
- }
-
- if (ipdevice->config_ipv6) {
- switch (ipdevice->config_ipv6->method) {
- case CONNMAN_IPCONFIG_METHOD_UNKNOWN:
- case CONNMAN_IPCONFIG_METHOD_OFF:
- case CONNMAN_IPCONFIG_METHOD_FIXED:
- case CONNMAN_IPCONFIG_METHOD_MANUAL:
- break;
- case CONNMAN_IPCONFIG_METHOD_DHCP:
- is_dhcpv6 = 1;
- break;
- }
- }
-
- if (is_dhcpv4 && ipdevice->config_ipv4) {
- ipdevice->driver_config_ipv4 = connman_ipconfig_clone(
- ipdevice->config_ipv4);
- if (ipdevice->driver_config_ipv4 == NULL)
- return;
- }
-
- if (is_dhcpv6 && ipdevice->config_ipv6) {
- ipdevice->driver_config_ipv6 = connman_ipconfig_clone(
- ipdevice->config_ipv6);
- if (ipdevice->driver_config_ipv6 == NULL)
- return;
- }
-
- for (list = driver_list; list; list = list->next) {
- struct connman_ipconfig_driver *driver = list->data;
-
- if (is_dhcpv4 && ipdevice->driver_ipv4 != NULL) {
- if (!driver->request(ipdevice->driver_config_ipv4)) {
- ipdevice->driver_ipv4 = driver;
- found++;
- }
- }
-
- if (is_dhcpv6 && ipdevice->driver_ipv6 != NULL) {
- if (!driver->request(ipdevice->driver_config_ipv6)) {
- ipdevice->driver_ipv6 = driver;
- found++;
- }
- }
-
- if (found > 1)
- break;
- }
-
- if (ipdevice->driver_ipv4 == NULL) {
- connman_ipconfig_unref(ipdevice->driver_config_ipv4);
- ipdevice->driver_config_ipv4 = NULL;
- }
-
- if (ipdevice->driver_ipv6 == NULL) {
- connman_ipconfig_unref(ipdevice->driver_config_ipv6);
- ipdevice->driver_config_ipv6 = NULL;
- }