diff options
-rwxr-xr-x | gdhcp/client.c | 55 | ||||
-rwxr-xr-x | src/connman.h | 5 | ||||
-rwxr-xr-x | src/dhcp.c | 11 | ||||
-rwxr-xr-x | src/network.c | 25 |
4 files changed, 94 insertions, 2 deletions
diff --git a/gdhcp/client.c b/gdhcp/client.c index 9b2de9db..3157632a 100755 --- a/gdhcp/client.c +++ b/gdhcp/client.c @@ -50,9 +50,30 @@ #define DISCOVER_TIMEOUT 5 #define DISCOVER_RETRIES 6 +#if defined TIZEN_EXT +#define REQUEST_TIMEOUT 1 +#else #define REQUEST_TIMEOUT 5 +#endif #define REQUEST_RETRIES 3 +#if defined TIZEN_EXT +#define DISCOVER_TIMEOUT_WIFI 1 +#define DISCOVER_RETRIES_WIFI 10 +static int dhcp_discover_timeout = DISCOVER_TIMEOUT_WIFI; +static int dhcp_discover_max_retry = DISCOVER_RETRIES_WIFI; + +void set_dhcp_discover_timeout(int timeout_value) +{ + dhcp_discover_timeout = timeout_value; +} + +void set_dhcp_discover_retry_count(int retry_count) +{ + dhcp_discover_max_retry = retry_count; +} +#endif + typedef enum _listen_mode { L_NONE, L2, @@ -2688,6 +2709,11 @@ int g_dhcp_client_start(GDHCPClient *dhcp_client, const char *last_address) uint32_t addr; uint64_t rand; +#if defined TIZEN_EXT + int discover_retry = 0; + int timeout = 0; +#endif + remove_timeouts(dhcp_client); if (dhcp_client->type == G_DHCP_IPV6) { @@ -2774,13 +2800,32 @@ int g_dhcp_client_start(GDHCPClient *dhcp_client, const char *last_address) return 0; } +#if defined TIZEN_EXT + if (g_ascii_strncasecmp(dhcp_client->interface, "wlan", 4) + == 0) { + discover_retry = DISCOVER_RETRIES_WIFI; + timeout = DISCOVER_TIMEOUT_WIFI; + } else { + discover_retry = DISCOVER_RETRIES; + timeout = DISCOVER_TIMEOUT; + } + + debug(dhcp_client, "[DHCPC] Discover retry/total : [%d]/[%d] timeout [%d]", + dhcp_client->retry_times, discover_retry, timeout); +#endif + + if (dhcp_client->type == G_DHCP_IPV4LL) { dhcp_client->state = INIT_SELECTING; ipv4ll_start(dhcp_client); return 0; } - if (dhcp_client->retry_times == DISCOVER_RETRIES) { +#if defined TIZEN_EXT + if (dhcp_client->retry_times == discover_retry) { +#else + if (dhcp_client->retry_times == DISCOVER_RETRIES) { +#endif if (dhcp_client->no_lease_cb) dhcp_client->no_lease_cb(dhcp_client, dhcp_client->no_lease_data); @@ -2823,7 +2868,11 @@ int g_dhcp_client_start(GDHCPClient *dhcp_client, const char *last_address) dhcp_client->timeout = g_timeout_add_seconds_full( G_PRIORITY_HIGH, +#if defined TIZEN_EXT + timeout, +#else REQUEST_TIMEOUT, +#endif reboot_timeout, dhcp_client, NULL); @@ -2832,7 +2881,11 @@ int g_dhcp_client_start(GDHCPClient *dhcp_client, const char *last_address) send_discover(dhcp_client, addr); dhcp_client->timeout = g_timeout_add_seconds_full(G_PRIORITY_HIGH, +#if defined TIZEN_EXT + timeout, +#else DISCOVER_TIMEOUT, +#endif discover_timeout, dhcp_client, NULL); diff --git a/src/connman.h b/src/connman.h index 499f38db..c8e0ab00 100755 --- a/src/connman.h +++ b/src/connman.h @@ -455,6 +455,11 @@ enum __connman_dhcpv6_status { CONNMAN_DHCPV6_STATUS_RESTART = 2, }; +#if defined TIZEN_EXT +void set_dhcp_discover_timeout(int timeout_value); +void set_dhcp_discover_retry_count(int retry_count); +#endif + typedef void (* dhcpv6_cb) (struct connman_network *network, enum __connman_dhcpv6_status status, gpointer data); @@ -637,7 +637,9 @@ int __connman_dhcp_start(struct connman_ipconfig *ipconfig, struct connman_network *network, dhcp_cb callback, gpointer user_data) { +#if !defined TIZEN_EXT const char *last_addr = NULL; +#endif struct connman_dhcp *dhcp; int err; @@ -651,7 +653,9 @@ int __connman_dhcp_start(struct connman_ipconfig *ipconfig, return -EINVAL; } +#if !defined TIZEN_EXT last_addr = __connman_ipconfig_get_dhcp_address(ipconfig); +#endif dhcp = g_hash_table_lookup(ipconfig_table, ipconfig); if (!dhcp) { @@ -683,7 +687,14 @@ int __connman_dhcp_start(struct connman_ipconfig *ipconfig, dhcp->callback = callback; dhcp->user_data = user_data; +#if defined TIZEN_EXT + 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 + } void __connman_dhcp_stop(struct connman_ipconfig *ipconfig) diff --git a/src/network.c b/src/network.c index eb7851ca..58288293 100755 --- a/src/network.c +++ b/src/network.c @@ -111,6 +111,8 @@ struct connman_network { }; +static void autoconf_ipv6_set(struct connman_network *network); + static const char *type2string(enum connman_network_type type) { switch (type) { @@ -223,12 +225,27 @@ static void dhcp_callback(struct connman_ipconfig *ipconfig, struct connman_network *network, bool success, gpointer data) { +#if defined TIZEN_EXT + struct connman_service *service; + struct connman_ipconfig *ipconfig_ipv6; +#endif + network->connecting = false; if (success) dhcp_success(network); else dhcp_failure(network); + +#if defined TIZEN_EXT + service = connman_service_lookup_from_network(network); + ipconfig_ipv6 = __connman_service_get_ip6config(service); + if (__connman_ipconfig_get_method(ipconfig_ipv6) == CONNMAN_IPCONFIG_METHOD_AUTO) { + DBG("IPv6 autoconf start"); + set_configuration(network, CONNMAN_IPCONFIG_TYPE_IPV6); + autoconf_ipv6_set(network); + } +#endif } static int set_connected_manual(struct connman_network *network) @@ -387,7 +404,6 @@ err: return err; } -static void autoconf_ipv6_set(struct connman_network *network); static void dhcpv6_callback(struct connman_network *network, enum __connman_dhcpv6_status status, gpointer data); @@ -1800,7 +1816,9 @@ int __connman_network_enable_ipconfig(struct connman_network *network, return -ENOSYS; case CONNMAN_IPCONFIG_TYPE_IPV6: +#if !defined TIZEN_EXT set_configuration(network, type); +#endif method = __connman_ipconfig_get_method(ipconfig); @@ -1823,11 +1841,16 @@ int __connman_network_enable_ipconfig(struct connman_network *network, CONNMAN_SERVICE_STATE_CONFIGURATION, CONNMAN_IPCONFIG_TYPE_IPV6); #endif +#if !defined TIZEN_EXT autoconf_ipv6_set(network); +#endif break; case CONNMAN_IPCONFIG_METHOD_FIXED: case CONNMAN_IPCONFIG_METHOD_MANUAL: +#if defined TIZEN_EXT + set_configuration(network, type); +#endif r = manual_ipv6_set(network, ipconfig); break; |