Merge tag 'upstream/1.40' into tizen.
[platform/upstream/connman.git] / src / connection.c
old mode 100644 (file)
new mode 100755 (executable)
index 9d2c696..33f6103
@@ -674,8 +674,15 @@ static void connection_newgateway(int index, const char *gateway)
        }
 
        if (!found) {
+#if defined TIZEN_EXT
+               if (data->ipv4_gateway != NULL){
+                       set_default_gateway(data, CONNMAN_IPCONFIG_TYPE_IPV4);
+                       connman_check_proxy_setup_and_wispr_start(data->service);
+               }
+#else
                if (data->ipv4_gateway)
                        set_default_gateway(data, CONNMAN_IPCONFIG_TYPE_IPV4);
+#endif
 
                if (data->ipv6_gateway)
                        set_default_gateway(data, CONNMAN_IPCONFIG_TYPE_IPV6);
@@ -803,6 +810,32 @@ static void add_host_route(int family, int index, const char *gateway,
        }
 }
 
+#if defined TIZEN_EXT
+static bool __connman_service_is_not_cellular_internet_profile(
+               struct connman_service *cellular)
+{
+       char *suffix;
+       const char *path;
+       const char internet_suffix[] = "_1";
+       const char prepaid_internet_suffix[] = "_3";
+
+       if (connman_service_get_type(cellular) != CONNMAN_SERVICE_TYPE_CELLULAR)
+               return FALSE;
+
+       path = __connman_service_get_path(cellular);
+
+       suffix = strrchr(path, '_');
+
+       if (g_strcmp0(suffix, internet_suffix) != 0 &&
+                       g_strcmp0(suffix, prepaid_internet_suffix) != 0) {
+               DBG("not internet service profile: %s", path);
+               return TRUE;
+       }
+
+       return FALSE;
+}
+#endif
+
 int __connman_connection_gateway_add(struct connman_service *service,
                                        const char *gateway,
                                        enum connman_ipconfig_type type,
@@ -829,6 +862,28 @@ int __connman_connection_gateway_add(struct connman_service *service,
        if (!gateway && type == CONNMAN_IPCONFIG_TYPE_IPV6)
                gateway = "::";
 
+#if defined TIZEN_EXT
+       if (__connman_service_is_not_cellular_internet_profile(service) == TRUE) {
+               /* not internet service should not be default gateway */
+
+               DBG("no internet service %p index %d gateway %s vpn ip %s type %d",
+                       service, index, gateway, peer, type);
+
+               if (type == CONNMAN_IPCONFIG_TYPE_IPV4) {
+                       add_host_route(AF_INET, index, gateway, service_type);
+                       __connman_service_nameserver_add_routes(service, gateway);
+                       type4 = CONNMAN_IPCONFIG_TYPE_IPV4;
+               }
+
+               if (type == CONNMAN_IPCONFIG_TYPE_IPV6) {
+                       add_host_route(AF_INET6, index, gateway, service_type);
+                       __connman_service_nameserver_add_routes(service, gateway);
+                       type6 = CONNMAN_IPCONFIG_TYPE_IPV6;
+               }
+
+               goto done;
+       }
+#endif
        DBG("service %p index %d gateway %s vpn ip %s type %d",
                service, index, gateway, peer, type);
 
@@ -873,6 +928,12 @@ int __connman_connection_gateway_add(struct connman_service *service,
        }
 
        if (!active_gateway) {
+#if defined TIZEN_EXT
+               if(new_gateway->ipv4_gateway)
+                       DBG("ConnMan, Set default gateway[%s], active[%d]",
+                               new_gateway->ipv4_gateway->gateway,
+                               new_gateway->ipv4_gateway->active);
+#endif
                set_default_gateway(new_gateway, type);
                goto done;
        }
@@ -988,6 +1049,9 @@ bool __connman_connection_update_gateway(void)
        bool updated = false;
        GHashTableIter iter;
        gpointer value, key;
+#if defined TIZEN_EXT
+       static struct gateway_data *old_default = NULL;
+#endif
 
        if (!gateway_hash)
                return updated;
@@ -1025,6 +1089,12 @@ bool __connman_connection_update_gateway(void)
                }
        }
 
+#if defined TIZEN_EXT
+       if (updated == false && old_default != default_gateway) {
+               updated = true;
+               old_default = default_gateway;
+       }
+#endif
        /*
         * Set default gateway if it has been updated or if it has not been
         * set as active yet.