static int start_dhcp_client(struct connman_peer *peer) { if (peer->sub_device) __connman_ipconfig_set_index(peer->ipconfig, connman_device_get_index(peer->sub_device)); __connman_ipconfig_enable(peer->ipconfig); return __connman_dhcp_start(peer->ipconfig, NULL, dhcp_callback, peer); }
int __connman_network_set_ipconfig(struct connman_network *network, struct connman_ipconfig *ipconfig_ipv4, struct connman_ipconfig *ipconfig_ipv6) { enum connman_ipconfig_method method; int ret; if (network == NULL) return -EINVAL; if (ipconfig_ipv6) { method = __connman_ipconfig_get_method(ipconfig_ipv6); switch (method) { case CONNMAN_IPCONFIG_METHOD_UNKNOWN: case CONNMAN_IPCONFIG_METHOD_OFF: break; case CONNMAN_IPCONFIG_METHOD_AUTO: autoconf_ipv6_set(network); break; case CONNMAN_IPCONFIG_METHOD_FIXED: case CONNMAN_IPCONFIG_METHOD_MANUAL: ret = manual_ipv6_set(network, ipconfig_ipv6); if (ret != 0) { connman_network_set_error(network, CONNMAN_NETWORK_ERROR_ASSOCIATE_FAIL); return ret; } break; case CONNMAN_IPCONFIG_METHOD_DHCP: break; } } if (ipconfig_ipv4) { method = __connman_ipconfig_get_method(ipconfig_ipv4); switch (method) { case CONNMAN_IPCONFIG_METHOD_UNKNOWN: case CONNMAN_IPCONFIG_METHOD_OFF: case CONNMAN_IPCONFIG_METHOD_FIXED: case CONNMAN_IPCONFIG_METHOD_AUTO: return -EINVAL; case CONNMAN_IPCONFIG_METHOD_MANUAL: return manual_ipv4_set(network, ipconfig_ipv4); case CONNMAN_IPCONFIG_METHOD_DHCP: return __connman_dhcp_start(network, dhcp_callback); } } return 0; }
static int set_connected_dhcp(struct connman_network *network) { int err; DBG("network %p", network); set_configuration(network); err = __connman_dhcp_start(network, dhcp_callback); if (err < 0) { connman_error("Can not request DHCP lease"); return err; } return 0; }