#define RATE_LIMIT_INTERVAL 60 /* delay between successive attempts */
+#if defined TIZEN_EXT
+#define DHCP_SUCCESS "DHCP_SUCCESS"
+#endif
+
struct connman_dhcp {
struct connman_ipconfig *ipconfig;
struct connman_network *network;
dhcp->ipv4ll_client);
#if defined TIZEN_EXT
+ if (dhcp->network &&
+ connman_network_get_bool(dhcp->network, "WiFi.RoamingDHCP")) {
+ int lease_time = 0;
+
+ connman_network_set_bool(dhcp->network, "WiFi.RoamingDHCP", false);
+ __connman_network_enable_ipconfig(dhcp->network, dhcp->ipconfig);
+ __connman_network_notify_dhcp_changed("DHCP_FAIL", &lease_time);
+
+ return;
+ }
+
if (connman_setting_get_bool("EnableAutoIp") == false) {
DBG("link-local address autoconfiguration is disabled.");
- if (dhcp->network)
- __connman_network_disconnect(dhcp->network);
+ if (dhcp->network) {
+ int lease_time = 0;
+ DBG("[DHCP-C] auto ip is not used, set dhcp-fail error and disconnect");
+ __connman_network_notify_dhcp_changed("DHCP_FAIL", &lease_time);
+ connman_network_set_error(dhcp->network, CONNMAN_NETWORK_ERROR_DHCP_FAIL);
+ }
return;
}
#endif
#if defined TIZEN_EXT
__connman_ipconfig_set_dhcp_lease_duration(dhcp->ipconfig, dhcp_lease_duration);
+ __connman_network_notify_dhcp_changed(DHCP_SUCCESS, &dhcp_lease_duration);
#endif
/*
__connman_service_notify_ipv4_configuration(service);
}
+#if defined TIZEN_EXT
+ if (connman_network_get_bool(dhcp->network, "WiFi.RoamingDHCP")) {
+
+ if (ip_change)
+ connman_service_notify_reconnection(
+ connman_service_lookup_from_network(dhcp->network));
+
+ connman_network_set_bool(dhcp->network, "WiFi.RoamingDHCP", false);
+ }
+#endif
+
if (ip_change) {
__connman_ipconfig_set_local(dhcp->ipconfig, address);
__connman_ipconfig_set_prefixlen(dhcp->ipconfig, prefixlen);
dhcp->user_data = user_data;
#if defined TIZEN_EXT
- DBG("Start DHCP with DHCPDISCOVER request");
+ if (network && connman_network_get_bool(network, "WiFi.RoamingDHCP")) {
+ const char *last_addr = __connman_ipconfig_get_dhcp_address(ipconfig);
- return g_dhcp_client_start(dhcp->dhcp_client, NULL);
+ DBG("Start DHCP with last address request");
+ return g_dhcp_client_start(dhcp->dhcp_client, last_addr);
+ } else {
+ DBG("Start DHCP with DHCPDISCOVER request");
+ return g_dhcp_client_start(dhcp->dhcp_client, NULL);
+ }
#else
return g_dhcp_client_start(dhcp->dhcp_client, last_addr);
#endif