[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)