[Feature][ZK-107] remove connman, add default route manage script and
control api (part 2)

Affected branch: ZK-first-oem-release
Affected module: network management
Is it affected on both ZXIC and MTK: mtk
Self-test: Yes
Doc Update: No

Change-Id: I0163168ab6f4f94fc1fc210b256ab22df0dae981
diff --git a/LYNQ_PUBLIC/IC_meta/mtk/2735/liblynq-data/liblynq-data.bb b/LYNQ_PUBLIC/IC_meta/mtk/2735/liblynq-data/liblynq-data.bb
index 678282d..e7d8f96 100755
--- a/LYNQ_PUBLIC/IC_meta/mtk/2735/liblynq-data/liblynq-data.bb
+++ b/LYNQ_PUBLIC/IC_meta/mtk/2735/liblynq-data/liblynq-data.bb
@@ -16,6 +16,7 @@
                 'TARGET_PLATFORM = ${TARGET_PLATFORM}'"

 

 EXTRA_OEMAKE += "'MOBILETEK_RIL_CFG = ${MOBILETEK_RIL_CFG}'"

+EXTRA_OEMAKE += "'CONNMAN_SUPPORT = ${CONNMAN_SUPPORT}'"

 

 FILES_${PN} = "${base_libdir}/*.so \

                ${base_bindir}\

diff --git a/LYNQ_PUBLIC/IC_meta/mtk/2735/lynq-ril-service/lynq-ril-service.bb b/LYNQ_PUBLIC/IC_meta/mtk/2735/lynq-ril-service/lynq-ril-service.bb
index 7ec9ecf..fafc153 100755
--- a/LYNQ_PUBLIC/IC_meta/mtk/2735/lynq-ril-service/lynq-ril-service.bb
+++ b/LYNQ_PUBLIC/IC_meta/mtk/2735/lynq-ril-service/lynq-ril-service.bb
@@ -20,6 +20,7 @@
                 'MTK_LED_SUPPORT = ${MTK_LED_SUPPORT}'"
 
 EXTRA_OEMAKE += "'MOBILETEK_RIL_CFG = ${MOBILETEK_RIL_CFG}'"
+EXTRA_OEMAKE += "'CONNMAN_SUPPORT = ${CONNMAN_SUPPORT}'"
 
 #INHIBIT_PACKAGE_STRIP = "1"
 do_compile () {
diff --git a/LYNQ_PUBLIC/common_src/framework/lynq-ril-service/src/data/data_gdbus.cpp b/LYNQ_PUBLIC/common_src/framework/lynq-ril-service/src/data/data_gdbus.cpp
index 0136939..1c5533a 100755
--- a/LYNQ_PUBLIC/common_src/framework/lynq-ril-service/src/data/data_gdbus.cpp
+++ b/LYNQ_PUBLIC/common_src/framework/lynq-ril-service/src/data/data_gdbus.cpp
@@ -53,6 +53,8 @@
 #ifdef LED_SUPPORT
 #include "led.h"
 #endif
+//youchen@2024-06-27 add for modify route when default apn status changed
+#include <include/lynq_uci.h>
 using android::Parcel;
 
 /*Warren add for t800 ril service 2021/12/25 end*/
@@ -87,6 +89,102 @@
     return 0;
 }
 
+//youchen@2024-06-27 add for modify route when default apn status changed --begin
+#if !(defined(GSW_RIL_CFG) || defined(CONNMAN_SUPPORT))
+#include <arpa/inet.h>
+
+static inline bool is_valid_ip_v4(char * addr) {
+    return !(addr == NULL || strlen(addr) == 0 || inet_addr(addr) == INADDR_NONE);
+}
+
+static void lynq_check_default_apn_status_changed(MTK_Data_Call_Response_v1 *urc_response)
+{
+    char *cmd_tail, *ip, *p, ip_addr[128], gateways[128];
+    char default_route_config_type[128] = {0};
+    char default_route_modify_script[1024] = {0};
+    if( urc_response->pdnState != PDN_DISCONNECTED && urc_response->pdnState != PDN_CONNECTED )
+    {
+        return;
+    }
+    if (strcmp(urc_response->apnType, "default") != 0)
+    {
+        return;
+    }
+    if ( 0 != lynq_get_value("lynq_uci", "lynq_default_route_config", "lynq_default_route_config_type" , default_route_config_type))
+    {
+        return;
+    }
+    cmd_tail = default_route_modify_script;
+    if (strcmp(default_route_config_type, "lynq") == 0) {
+        cmd_tail += sprintf(cmd_tail, "/usr/share/init/lynq_drcfg.sh %s", urc_response->ifname);
+    }
+    else if (strcmp(default_route_config_type, "oem") == 0) {
+        cmd_tail += sprintf(cmd_tail, "/usr/share/init/oem_drcfg.sh %s", urc_response->ifname);
+    }
+    else {
+        RLOGE("unkown lynq_default_route_config_type got [ %s ]", default_route_config_type);
+    }
+
+    if ( urc_response->pdnState == PDN_CONNECTED )
+    {
+        strcpy(ip_addr, urc_response->addresses);
+        RLOGD("ip addr is [%s]", ip_addr);
+        ip = ip_addr;
+        while( *ip != '\0' )
+        {
+            RLOGD("ip is [%s]", ip);
+            if (*ip == ' ')
+            {
+                ip++;
+                continue;
+            }
+            p=strstr(ip, " ");
+            if ( p != NULL )
+                *p = '\0';
+            if ( is_valid_ip_v4(ip) ) //ipv4
+            {
+                strcpy(gateways, urc_response->gateways);
+                p = strstr(gateways, " ");
+                if (p != NULL )
+                {
+                    *p = '\0';
+                }
+                if ( !is_valid_ip_v4 (gateways) )
+                {
+                    gateways[0] = '-';
+                }
+                cmd_tail += sprintf( cmd_tail, " set_ipv4 %s %s %s", ip, gateways, urc_response->dnses);
+            }
+            else if (strstr(ip, ":") != NULL ) //ipv6
+            {
+                cmd_tail += sprintf( cmd_tail, " set_ipv6 %s", ip);
+            }
+            else
+            {
+                RLOGE("got bad ip addr, do nothing");
+                return;
+            }
+            if (0 != system(default_route_modify_script))
+            {
+                RLOGE("connected execute fail [%s]", default_route_modify_script);
+            }
+            ip += strlen(ip);
+            if (p != NULL)
+                ip += 1;
+        }
+    }
+    else if (urc_response->pdnState == PDN_DISCONNECTED)
+    {
+        strcat(default_route_modify_script, " disconnect");
+        if (0 != system(default_route_modify_script))
+        {
+            RLOGE("disconnect execute fail [%s]", default_route_modify_script);
+        }
+    }
+}
+#endif
+//youchen@2024-06-27 add for modify route when default apn status changed --end
+
 /*Typethree add for t800 ril service 2022/04/14 end*/
 
 /*Warren add for t103 szzt atsvc 2022/1/5 start*/
@@ -119,6 +217,11 @@
         android::LYNQ_RIL_urcBroadcast(p,LYNQ_URC_DATA_CALL_STATUS_IND);
         return 0;
     }
+    //youchen@2024-06-27 add for modify route when default apn status changed --begin
+#if !(defined(GSW_RIL_CFG) || defined(CONNMAN_SUPPORT))
+    lynq_check_default_apn_status_changed(urc_response);	
+#endif
+    //youchen@2024-06-27 add for modify route when default apn status changed --end
     if(urc_response->cId > 0)
     {
         if(urc_response->pdnState==PDN_DISCONNECTED)//if user disable data call,the pdn state wiil change to disconnected.
diff --git a/LYNQ_PUBLIC/common_src/framework/lynq-ril-service/src/makefile b/LYNQ_PUBLIC/common_src/framework/lynq-ril-service/src/makefile
index db6b04e..6ea4b77 100755
--- a/LYNQ_PUBLIC/common_src/framework/lynq-ril-service/src/makefile
+++ b/LYNQ_PUBLIC/common_src/framework/lynq-ril-service/src/makefile
@@ -29,6 +29,10 @@
     LOCAL_CFLAGS += -DLED_SUPPORT
 endif
 
+ifeq ($(strip $(CONNMAN_SUPPORT)), yes)
+    LOCAL_CFLAGS += -DCONNMAN_SUPPORT
+endif
+
 $(warning ################# TARGET_PLATFORM: $(TARGET_PLATFORM))
 ifeq ($(strip $(TARGET_PLATFORM)), mt2731)
 $(warning ################# TARGET_PLATFORM_MT2731)
diff --git a/LYNQ_PUBLIC/common_src/lib/liblynq-data/include/libdata/lynq_data.h b/LYNQ_PUBLIC/common_src/lib/liblynq-data/include/libdata/lynq_data.h
index 3f065f0..2b5d099 100755
--- a/LYNQ_PUBLIC/common_src/lib/liblynq-data/include/libdata/lynq_data.h
+++ b/LYNQ_PUBLIC/common_src/lib/liblynq-data/include/libdata/lynq_data.h
@@ -68,6 +68,13 @@
 int lynq_get_apn_msg(int handle,lynq_apn_msg_t *apn_msg);
 
 
+/**
+ * @brief lynq_set_default_route_config_type set the type of default route management when "default" apn status changes
+ * @param type (in param, 0 for disable, all mamaged by upper programs; 1 for lynq manage, call lynq_drcfg.sh; 2 for oem manage, call oem_drcfg.sh )
+ * @return 0 success, -1 some error occur
+ */
+int lynq_set_default_route_config_type(int type);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/LYNQ_PUBLIC/common_src/lib/liblynq-data/lynq_data.cpp b/LYNQ_PUBLIC/common_src/lib/liblynq-data/lynq_data.cpp
index 06913d4..8bf5677 100755
--- a/LYNQ_PUBLIC/common_src/lib/liblynq-data/lynq_data.cpp
+++ b/LYNQ_PUBLIC/common_src/lib/liblynq-data/lynq_data.cpp
@@ -991,10 +991,10 @@
         LYERRLOG("[%s][%d]Invalid operation",__FUNCTION__,__LINE__);
         return error;
     }
-    #ifdef GSW_RIL_CFG  //becuase gsw not have connman,data can not be triggered by connman.
+#ifdef GSW_RIL_CFG  //becuase gsw not have connman,data can not be triggered by connman.
     LYINFLOG("[%s][%d]",__FUNCTION__,__LINE__);
     error = lynq_setup_data_call_sp(handle,NULL,"default",NULL,NULL,NULL,NULL,NULL);
-    #else
+#elif defined (CONNMAN_SUPPORT)
     Parcel *p = NULL;
     lynq_client_t client;
     int resp_type = -1;
@@ -1067,7 +1067,10 @@
         }
     }
     printf_apn_table_debug(__FUNCTION__,__LINE__);
-    #endif //GSW_RIL_CFG
+#else
+    LYERRLOG("not support lynq_setup_data_call without connman!!!");
+    error = -1;
+#endif //GSW_RIL_CFG, CONNMAN_SUPPORT
     return error;
 }
 
@@ -2072,3 +2075,35 @@
     free_parcel(p);
     return error;
 }
+
+#define LOG_UCI_FILE "lynq_uci"
+#define LOG_UCI_MODULE "lynq_default_route_config"
+#define LOG_UCI_MODULE_TYPE "lynq_default_route_config_rw"
+#define LOG_UCI_ITEM_CONFIG_TYPE "lynq_default_route_config_type"
+
+int lynq_set_default_route_config_type(int type)
+{
+#if (defined (GSW_RIL_CFG) || defined (CONNMAN_SUPPORT))
+    LYERRLOG("not support lynq_set_default_route_manage_type in this mode");
+    return -1;
+#else
+    char default_route_config_type[1024] = {0};
+    if (type == 0) { // disable
+        if ( 0 != lynq_get_value(LOG_UCI_FILE, LOG_UCI_MODULE, LOG_UCI_ITEM_CONFIG_TYPE, default_route_config_type))
+            return 0;
+        return lynq_set_value(LOG_UCI_MODULE, LOG_UCI_ITEM_CONFIG_TYPE, "");
+    }
+    else if (type == 1)  { //lynq default
+        lynq_add_section(LOG_UCI_MODULE_TYPE, LOG_UCI_MODULE);
+        return lynq_set_value(LOG_UCI_MODULE, LOG_UCI_ITEM_CONFIG_TYPE, "lynq");
+    }
+    else if (type == 2) { // oem chosen script
+        lynq_add_section(LOG_UCI_MODULE_TYPE, LOG_UCI_MODULE);
+        return lynq_set_value(LOG_UCI_MODULE, LOG_UCI_ITEM_CONFIG_TYPE, "oem");
+    }
+    else {
+         LYERRLOG("lynq_set_default_route_manage_type unkown type [%d]", type);
+         return -1;
+    }
+#endif
+}
diff --git a/LYNQ_PUBLIC/common_src/lib/liblynq-data/makefile b/LYNQ_PUBLIC/common_src/lib/liblynq-data/makefile
index e2d17d0..e1ec879 100755
--- a/LYNQ_PUBLIC/common_src/lib/liblynq-data/makefile
+++ b/LYNQ_PUBLIC/common_src/lib/liblynq-data/makefile
@@ -38,6 +38,9 @@
     LOCAL_CFLAGS += -DGSW_RIL_CFG
 
 endif
+ifeq ($(strip $(CONNMAN_SUPPORT)), yes)
+    LOCAL_CFLAGS += -DCONNMAN_SUPPORT
+endif
 
 SOURCES = $(wildcard *.cpp)