Merge "Fix to prevent RA message processing" into tizen
authortaesub kim <taesub.kim@samsung.com>
Tue, 28 Mar 2017 09:30:43 +0000 (02:30 -0700)
committerGerrit Code Review <gerrit@review.vlan103.tizen.org>
Tue, 28 Mar 2017 09:30:44 +0000 (02:30 -0700)
gdhcp/client.c
src/connman.h
src/dhcp.c
src/network.c

index 9b2de9d..3157632 100755 (executable)
 #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);
index ee127e7..7c44d1c 100755 (executable)
@@ -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);
 
index b48cdc6..32ffcd9 100755 (executable)
@@ -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)
index eb7851c..5828829 100755 (executable)
@@ -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;