Merge "[Feature][RIL][T8TSK-279] Modify the IP address of RIL service and related libraries to 127.0.0.1" into GSW3.0-No-Connman
diff --git a/framework/lynq-ril-service/src/data/data_gdbus.cpp b/framework/lynq-ril-service/src/data/data_gdbus.cpp
index 980ebd8..d6fb6cd 100755
--- a/framework/lynq-ril-service/src/data/data_gdbus.cpp
+++ b/framework/lynq-ril-service/src/data/data_gdbus.cpp
@@ -121,6 +121,7 @@
                 {
                     bzero(apn_table[i].apn,LYNQ_APN_LEN_MAX);
                     bzero(apn_table[i].apntype,LYNQ_APNTPYE_LEN_MAX);
+                    bzero(apn_table[i].ifaceName,LYNQ_APNTPYE_LEN_MAX);
                     apn_table[i].used = 0;
                     apn_table[i].netId = 0;
                     apn_table[i].pdpstate = PDN_DISCONNECTED;
@@ -280,6 +281,7 @@
                 {
                     bzero(apn_table[i].apn,LYNQ_APN_LEN_MAX);
                     bzero(apn_table[i].apntype,LYNQ_APNTPYE_LEN_MAX);
+                    bzero(apn_table[i].ifaceName,LYNQ_APNTPYE_LEN_MAX);
                     apn_table[i].used = 0;
                     apn_table[i].netId = 0;
                     apn_table[i].pdpstate = PDN_DISCONNECTED;
@@ -312,6 +314,7 @@
                     else
                     {
                         memcpy(iface_t,urc_response->ifname,strlen(urc_response->ifname)+1);
+                        memcpy(apn_table[i].ifaceName,urc_response->ifname,strlen(urc_response->ifname)+1);
                     }
                     if(NULL == urc_response->addresses)
                     {
@@ -363,6 +366,7 @@
                 else
                 {
                     memcpy(iface_t,urc_response->ifname,strlen(urc_response->ifname)+1);
+                    memcpy(apn_table[i].ifaceName,urc_response->ifname,strlen(urc_response->ifname)+1);
                 }
                 if(NULL == urc_response->addresses)
                 {
diff --git a/framework/lynq-ril-service/src/mtk_ril_unsol_commands.h b/framework/lynq-ril-service/src/mtk_ril_unsol_commands.h
index 5c461f4..bdd73e2 100755
--- a/framework/lynq-ril-service/src/mtk_ril_unsol_commands.h
+++ b/framework/lynq-ril-service/src/mtk_ril_unsol_commands.h
@@ -50,3 +50,4 @@
 { RIL_UNSOL_ECC_NUM,responseString, WAKE_PARTIAL},
 {RIL_UNSOL_SIP_CALL_PROGRESS_INDICATOR, responseStrings, WAKE_PARTIAL},
 {RIL_UNSOL_CALL_INFO_INDICATION, responseStrings, WAKE_PARTIAL},
+{RIL_UNSOL_TELEPHONY_RESTART, responseVoid, WAKE_PARTIAL}
diff --git a/framework/lynq-ril-service/src/ril.cpp b/framework/lynq-ril-service/src/ril.cpp
index 5ef13d8..011a083 100755
--- a/framework/lynq-ril-service/src/ril.cpp
+++ b/framework/lynq-ril-service/src/ril.cpp
@@ -26,6 +26,7 @@
 #include <hardware_legacy/power.h>
 #include <vendor-ril/telephony/ril.h>
 #include <telephony/ril_cdma_sms.h>
+#include <telephony/mtk_ril_sp.h>
 #include <cutils/jstring.h>
 #include <telephony/record_stream.h>
 #include <utils/SystemClock.h>
@@ -5397,6 +5398,7 @@
         case LYNQ_REQUEST_SET_DEFAULT_SIM_ALL:return "SET_DEFAULT_SIM_ALL";
         case LYNQ_REQUEST_CHANGE_SCREEN_STATE:return "LYNQ_REQUEST_CHANGE_SCREEN_STATE";/*jb.qi add for two sim sleep 2022/9/19*/
         case LYNQ_REQUEST_CHANGE_RADIO:return "LYNQ_REQUEST_CHANGE_RADIO";/*lei add for factory test of sleep 2022/9/19*/
+        case RIL_UNSOL_TELEPHONY_RESTART:return "RIL_UNSOL_TELEPHONY_RESTART";/*xy.he add for t800 ril service 2023/10/23*/
         /*warren add for t800 ril service 2022/1/22 end*/
         default: return "<unknown request>";
     }
@@ -5695,6 +5697,7 @@
         case RIL_UNSOL_ECALL_MSDHACK: return 1;
         case RIL_UNSOL_TX_POWER: return 1;
         case RIL_UNSOL_NETWORK_INFO: return 1;
+        case RIL_UNSOL_TELEPHONY_RESTART: return 1;
 #ifdef ECALL_SUPPORT
         case RIL_UNSOL_ECALL_INDICATIONS: return 1;
 #endif /*ECALL_SUPPORT*/
diff --git a/lib/liblynq-data/lynq_data.cpp b/lib/liblynq-data/lynq_data.cpp
index 0bff5b4..facd0fe 100755
--- a/lib/liblynq-data/lynq_data.cpp
+++ b/lib/liblynq-data/lynq_data.cpp
@@ -28,6 +28,7 @@
 
 #define LYNQ_DATA_UCI_BUF 258
 #define LYNQ_DATA_TIME_OUT 1000*120
+#define TELEPHONY_RESTART 10
 
 
 using ::android::Parcel;
@@ -67,6 +68,7 @@
 int lynq_data_socket_server_addr_len;
 
 int lynq_data_call_change_id = -1;
+int lynq_telephony_restart_g = 0;
 pthread_t lynq_data_tid =-1;
 static pthread_mutex_t s_data_call_state_change_mutex = PTHREAD_MUTEX_INITIALIZER;
 static pthread_cond_t s_data_call_state_change_cond = PTHREAD_COND_INITIALIZER;
@@ -117,6 +119,8 @@
 lynq_data_call_response_v11_t lynq_data_call_lists[LYNQ_APN_CHANNEL_MAX] = {};
 int lynq_data_call = 0;
 
+int radio_switch(int status);
+
 int getLynqApnID(char apnType[])
 {
     int ret = 0;
@@ -566,6 +570,7 @@
 
         case LYNQ_URC_MODIFY_APNDB:
         case LYNQ_URC_RESET_APNDB:
+        case LYNQ_TELEPHONY_RESTART:
             return true;                
         default:
             return false;
@@ -802,6 +807,23 @@
                 }
                 free(urc_msg);
             }
+        case LYNQ_TELEPHONY_RESTART:
+            {
+                if(slot_id == 0)
+                {
+                    RLOGI("data has received telephony has restart");
+                    RLOGI("handle set to 10");
+                    lynq_telephony_restart_g = 1;
+                    pthread_mutex_lock(&s_lynq_urc_vector_mutex);
+                    s_data_urc_wait_list.push_back(TELEPHONY_RESTART);
+                    pthread_mutex_unlock(&s_lynq_urc_vector_mutex);
+                    radio_switch(0);
+                    sleep(1);
+                    radio_switch(1);
+                    sleep(1);
+                    sendSignalPdnChange();
+                }
+            }
         default:
             break;
     }
@@ -819,7 +841,7 @@
 }
 int get_imsi();
 int check_apn_status();
-int radio_switch(int status);
+
 int lynq_init_data(int uToken)
 {
     if (g_lynq_data_init_flag == 1)
diff --git a/lib/liblynq-data/lynq_data_urc.h b/lib/liblynq-data/lynq_data_urc.h
index 7ac4f75..59f9f9d 100755
--- a/lib/liblynq-data/lynq_data_urc.h
+++ b/lib/liblynq-data/lynq_data_urc.h
@@ -16,6 +16,7 @@
 #define LYNQ_REQUEST_SET_DTMF_VOLUME (LYNQ_REQUEST_VENDOR_BASE +3)
 #define LYNQ_URC_MODIFY_APNDB (LYNQ_URC_VENDOR_BASE+4)
 #define LYNQ_URC_RESET_APNDB (LYNQ_URC_VENDOR_BASE+5)
+#define LYNQ_TELEPHONY_RESTART 3113
 
 typedef struct{
     int resp_type;
diff --git a/lib/liblynq-gnss/src/lynq_gnss.c b/lib/liblynq-gnss/src/lynq_gnss.c
index 4d79d0f..a812738 100755
--- a/lib/liblynq-gnss/src/lynq_gnss.c
+++ b/lib/liblynq-gnss/src/lynq_gnss.c
@@ -72,6 +72,7 @@
 

 int lynq_gnss_callback_reg(lynq_gnss_cb* callbacks)

 {   

+    int i=0;

     if (NULL == callbacks)

     {

         RLOGD("illegal callbacks!!!");

@@ -85,9 +86,23 @@
         RLOGD("callbacks error");

         return -1;

     }

-    if(gpshal_gpscbs_save(turn_cbs) != 0)

+    for(i=0;i<5;i++)

     {

-        RLOGD("For cbs save error\r\n");

+        RLOGD("The callback_gps_state:%s",gpshal_state_to_string(g_gpshal_ctx.gps_state));

+        if(gpshal_gpscbs_save(turn_cbs) != 0)

+        {

+            RLOGD("For cbs save error\r\n");

+        }

+        RLOGD("The callback_gps_state:%s",gpshal_state_to_string(g_gpshal_ctx.gps_state));

+        if(g_gpshal_ctx.gps_state != GPSHAL_STATE_UNKNOWN)

+        {

+            break;

+        }

+        sleep(1);

+    }

+    if(i>=5)

+    {

+        RLOGD("For cbs save error2\r\n");

         return -1;

     }

     g_lynq_gnss_calback_flag = 1;

@@ -122,6 +137,11 @@
 

 int lynq_gnss_start(void)

 {

+    if (g_lynq_gnss_init_flag == 0)

+    {

+        RLOGD("start is not allowed");

+        return -1;

+    }

     //memset(&lynq_debug_data, 0, sizeof(DebugData));

     gpshal_set_gps_state_intent(GPSHAL_STATE_START);

     gpshal2mnl_gps_start();

@@ -130,6 +150,11 @@
 

 int lynq_gnss_stop(void)

 {

+    if (g_lynq_gnss_init_flag == 0)

+    {

+        RLOGD("stop is not allowed");

+        return -1;

+    }

     gpshal_set_gps_state_intent(GPSHAL_STATE_STOP);

     gpshal2mnl_gps_stop();

     return 0;

diff --git a/lib/liblynq-wifi6/libwifi6.c b/lib/liblynq-wifi6/libwifi6.c
index 6802432..70d66cb 100755
--- a/lib/liblynq-wifi6/libwifi6.c
+++ b/lib/liblynq-wifi6/libwifi6.c
@@ -96,7 +96,7 @@
     pthread_mutex_t mutex;
 };
 
-int g_history_disconnect_valid_num = 0;
+volatile int g_history_disconnect_valid_num = 0;
 int g_history_disconnect_net[128];
 
 static pthread_mutex_t s_check_wpa_ctrl_mutex = PTHREAD_MUTEX_INITIALIZER;
@@ -134,7 +134,7 @@
 
 static pthread_cond_t s_global_check_cond = PTHREAD_COND_INITIALIZER;
 static pthread_mutex_t s_global_check_mutex = PTHREAD_MUTEX_INITIALIZER;
-static inner_sta_status_s s_sta_status = INNER_STA_STATUS_INIT;
+volatile inner_sta_status_s s_sta_status = INNER_STA_STATUS_INIT;
 static error_number_s s_sta_error_number = -1;
 static char s_sta_current_connecting_ssid[64] = {0};
 static struct timespec s_sta_connect_timeout;
@@ -143,6 +143,73 @@
 static int s_service_invoke_timeout_cnt=0;
 const int FAKE_MAX_INT_VALUE = 99999;
 
+static void print_disconnect_list()
+{
+    int i;
+    for( i = 0; i < g_history_disconnect_valid_num; i++ )
+    {
+        RLOGD(" list of g_history_disconnect_valid_num is  %d histroy_list[%d]:%d --------- %d",g_history_disconnect_valid_num,i,g_history_disconnect_net[i],__LINE__);
+    }
+
+    return;
+}
+
+// idex  ----> history_disconnect_list[x]  index
+static int removeElement(int idex)
+{
+    RLOGD("into removeElement");
+    if( index < 0 )
+    {
+        RLOGD("WIFI [removeElement] input idex < 0,idex is %d: ",idex);
+        return -1;
+    }
+    RLOGD("%s line: %d  g_history_disconnect_net[%d]: %d  end g_history_disconnect_net[%d]:%d",__func__,__LINE__,idex,g_history_disconnect_net[idex],g_history_disconnect_valid_num-1, g_history_disconnect_net[g_history_disconnect_valid_num-1]);
+    g_history_disconnect_net[idex] = g_history_disconnect_net[g_history_disconnect_valid_num-1];    //g_history_disconnect_vaild_num  -1 for get last index
+    g_history_disconnect_valid_num --;
+    RLOGD("end removeElement");
+    return 0;
+}
+static int check_history_disconenct_ap_list(int val)
+{
+    print_disconnect_list();
+    RLOGD("WIFI[check_history_disconenct_ap_list]into check_history_disconenct_ap_list && input val is %d g_history_disconnect_valid_num is %d line",val,g_history_disconnect_valid_num,__LINE__);
+    int i;
+    for( i = 0; i < g_history_disconnect_valid_num; i++)
+    {
+        if( val == g_history_disconnect_net[i] )
+        {
+             RLOGD("[wifi]-----input val is %d,g_history_disconnect_net[%d]:%d",val,i,g_history_disconnect_net[i]);
+             RLOGD("end check_history_disconenct_ap_list && return network index");
+             return i;
+        }
+    }
+    RLOGD("end check_history_disconenct_ap_list && return fail,didn't need remove networkid %d from list  g_history_disconnect_valid_num is %d line %d",val,g_history_disconnect_valid_num,__LINE__);
+    return -1;
+}
+
+
+static void lynq_sta_removeElement(int net_no)
+{
+    int ret;
+
+    ret = check_history_disconenct_ap_list(net_no);
+    if( ret == -1 )
+    {
+        RLOGD("curr_net_no not in history_disconenct_lsit,return 0 %s %d",__func__,__LINE__);
+        return;
+    }else
+    {
+        ret = removeElement(ret);
+        if( ret == 0 )
+        {
+            RLOGD("removeElement pass %s %d",__func__,__LINE__);
+            return;
+        }
+    }
+
+    return;
+}
+
 static void notify_service_invoke_fail(int error)
 {
     struct local_wpa_ctrl *lynq_wpa_ctrl = NULL;
@@ -510,6 +577,18 @@
         return;
     }
 
+    // youchen@2023-10-17 add for "not notify connect fail directly" begin
+    if (state == LYNQ_WIFI_STA_STATUS_CONNECT_FAIL)
+    {
+        s_sta_error_number = error_num;
+        s_sta_status = INNER_STA_STATUS_DISCONNECTED;
+        RLOGD("inner_check_connect_error line: %d, curr state %d, %d %d ------",__LINE__, state, s_sta_status, s_sta_error_number);
+        pthread_cond_signal(&s_global_check_cond);
+        pthread_mutex_unlock(&s_global_check_mutex);
+        return;
+    }
+    // youchen@2023-10-17 add for "not notify connect fail directly" end
+
     if (state == LYNQ_WIFI_STATUS_EGNORE)
     {
         if (strstr(event_msg, try_associat_flag) != NULL && strstr(event_msg, s_sta_current_connecting_ssid) != NULL) //associating request ssid
@@ -527,12 +606,14 @@
         if (s_sta_status >= INNER_STA_STATUS_ASSOCIATING && strstr(event_msg, "CTRL-EVENT-SSID-TEMP-DISABLED") != NULL && error_num != LYNQ_WAIT_CONNECT_ACTIVE)
         {
             s_sta_status = INNER_STA_STATUS_DISCONNECTED;
+            RLOGD("inner_check_connect_error line: %d, curr state %d, %d %d ------",__LINE__, state, s_sta_status, s_sta_error_number);
             pthread_cond_signal(&s_global_check_cond);
         }
     }
     else if (state == LYNQ_WIFI_STA_STATUS_CONNECT)
     {
         s_sta_status = INNER_STA_STATUS_CONNECTED;
+        RLOGD("inner_check_connect_error line: %d, curr state %d, %d %d ------",__LINE__, state, s_sta_status, s_sta_error_number);
         pthread_cond_signal(&s_global_check_cond);
     }
     pthread_mutex_unlock(&s_global_check_mutex);
@@ -823,19 +904,27 @@
 */
 static void lynq_two_arr_merge(int dis_net_list[],int valid_num,int out[],int * outlen)
 {
+    RLOGD("enter %s %d",__func__,__LINE__);
+    print_disconnect_list();
     int count,ncount,index;
     int flag = 0;
     int merge_index = 0;
     int net_no_list[128];
 
+    for(ncount = 0;ncount < valid_num; ncount++ )
+    {
+        RLOGD("input history disconenct_list[%d] %d %d",ncount,dis_net_list[ncount],__LINE__);
+    }
+
     index =lynq_get_network_number_list(0, 0, net_no_list,NULL);
     for( count = 0; count < index; count++)
     {
         for(ncount = 0; ncount < valid_num; ncount++)
         {
+            RLOGD(" %s dis_net_list[%d]->%d %d",__func__,ncount,dis_net_list[ncount],__LINE__);
             if(net_no_list[count] == dis_net_list[ncount])
             {
-                RLOGD("[wifi]this is history disconnect idx ----> ",net_no_list[count]);
+                RLOGD("[wifi]this is history disconnect idx ----> %d %d",net_no_list[count],__LINE__);
                 flag = 1;
                 break;
             }
@@ -843,6 +932,7 @@
         if( flag != 1 )
         {
             out[merge_index] = net_no_list[count];
+            RLOGD("out[%d]: %d    net_no_list[%d]: %d %d",merge_index,out[merge_index],count,net_no_list[count],__LINE__);
             merge_index ++;
         }
         flag = 0;
@@ -877,7 +967,7 @@
     if (strstr(modify, "CTRL-EVENT-CONNECTED") != NULL)
     {
         *state = LYNQ_WIFI_STA_STATUS_CONNECT;
-        RLOGD("CTRL-EVENT-CONNECTED state:%d,error:%d\n",*state,*error);
+        RLOGD("CTRL-EVENT-CONNECTED state:%d,error:%d",*state,*error);
         g_sta_conncet_status_flag = 0;
         return;
     }
@@ -914,7 +1004,8 @@
                 *error = LYNQ_PSW_ERROR;
                 *state = LYNQ_WIFI_STA_STATUS_CONNECT_FAIL;
                 // tmp fix sta autoconnect connect and disconnect
-                if(tmpdisid != -1 && lynq_wifi_sta_stop_network(0,tmpdisid) != 0)
+                // you.chen@2023-10-17 only disable network during autoconnect
+                if(tmpdisid != -1 && s_sta_status == INNER_STA_STATUS_INIT && lynq_wifi_sta_stop_network(0,tmpdisid) != 0)
                 {
                     RLOGE("stop wlan0 network %d fail",tmpdisid);
                 }
@@ -997,6 +1088,20 @@
         return;
     }
 
+    // add by qs.xiong 20231026   tmp fix sta association request to the driver failed
+    if (strstr(modify, "Association request to the driver failed") != NULL)
+    {
+        RLOGD("Association request to the driver failed --- recover");
+        system("wl down");
+        system("wl up");
+        *error = LYNQ_UNSPECIFIED_REASON;
+        *state = LYNQ_WIFI_STA_STATUS_DISCONNECT;
+        RLOGD("CTRL-EVENT-DISCONNECTED state:%d,error:%d\n",*state,*error);
+        return;
+    }
+    // add by qs.xiong 20231026   tmp fix sta association request to the driver failed end
+
+
     RLOGD("EVENT : %s\n", modify);
     *error = LYNQ_UNSPECIFIED_REASON;
     *state = LYNQ_WIFI_STATUS_EGNORE;
@@ -1198,7 +1303,16 @@
                 continue;
             }
             get_state_error(msg_notify,&state,&error);
-            notify_connect_status(state, error);
+            // youchen@2023-10-17 add for "not notify connect fail directly" begin
+            if (state == LYNQ_WIFI_STA_STATUS_CONNECT_FAIL)
+            {
+                notify_connect_status(LYNQ_WIFI_STA_STATUS_DISCONNECT, error);
+            }
+            else
+            {
+                notify_connect_status(state, error);
+            }
+            // youchen@2023-10-17 add for "not notify connect fail directly" end
 
             if (state != LYNQ_WIFI_STA_STATUS_SCAN_RESULT)
             {
@@ -1229,7 +1343,7 @@
     size_t len = MAX_RET;
     char msg_notify[MAX_RET];
     error_number_s error;
-    lynq_wifi_sta_status_s state, last_state = -1;
+    lynq_wifi_sta_status_s state;
     int idle_count = 0;
     int networkid;
     struct wpa_ctrl *lynq_wpa_ctrl = NULL;
@@ -1257,22 +1371,6 @@
             }
             get_state_error_networkid(msg_notify,&state,&error,&networkid); // add net state error network function
             notify_auto_connect_status(state, error,networkid);
-            if (state != LYNQ_WIFI_STA_STATUS_SCAN_RESULT)
-            {
-                inner_check_connect_error(msg_notify, state, error);
-                if (last_state != state)
-                {
-                    if (state == LYNQ_WIFI_STA_STATUS_CONNECT)
-                    {
-                        system_call_v("%s %s", sta_status_change_script, "connect");
-                    }
-                    else if (state == LYNQ_WIFI_STA_STATUS_DISCONNECT)
-                    {
-                        system_call_v("%s %s", sta_status_change_script, "disconnect");
-                    }
-                }
-                last_state = state;
-            }
         }
     }
     if (lynq_wpa_ctrl != NULL)
@@ -3545,6 +3643,7 @@
 
                 pthread_mutex_lock(&s_global_check_mutex);
                 s_sta_status = INNER_STA_STATUS_CONNECTED;
+                lynq_sta_removeElement(net_no);
                 pthread_cond_signal(&s_global_check_cond);
                 pthread_mutex_unlock(&s_global_check_mutex);
                 return 0;
@@ -3599,6 +3698,10 @@
     system("echo \"\" > /tmp/wlan0_dhcpcd_router");
     usleep(200*1000);
 
+    pthread_mutex_lock(&s_global_check_mutex);
+    lynq_sta_removeElement(net_no);
+    pthread_mutex_unlock(&s_global_check_mutex);
+
     ret = inner_sta_start_stop(net_no, 1, 1);
 
     pthread_mutex_lock(&s_global_check_mutex);
@@ -3653,9 +3756,11 @@
 
 int lynq_wifi_sta_disconnect_ap(lynq_wifi_index_e idx, char *ssid)
 {
+    int i,check_history_idx_flag;
     ap_info_s ap;
     curr_status_info curr_state;
     ap.ap_ssid[0] = '\0';
+    check_history_idx_flag = 0;
 
     if (ssid == NULL || *ssid == '\0')
     {
@@ -3681,8 +3786,25 @@
 
     pthread_mutex_lock(&s_global_check_mutex);
     s_sta_status = INNER_STA_STATUS_DISCONNECTING;
-    g_history_disconnect_net[g_history_disconnect_valid_num] = curr_state.net_no;
-    g_history_disconnect_valid_num++;
+    RLOGD("WIFI[lynq_wifi_sta_disconnect_ap]g_history_disconnect_valid_num is %d",g_history_disconnect_valid_num);
+    for( i = 0; i< g_history_disconnect_valid_num ; i++)
+    {
+        RLOGD("WIFI[lynq_wifi_sta_disconnect_ap]g_history_disconnect_net[%d] is %d,current disconnet network is %d",i,g_history_disconnect_net[i],curr_state.net_no);
+        if( g_history_disconnect_net[i] == curr_state.net_no)
+        {
+            RLOGD("current disconenct ap idx is %d && last aready into g_history_disconenct_net",curr_state.net_no);
+            check_history_idx_flag = 1;
+            break;
+        }
+    }
+    if ( check_history_idx_flag == 0)
+    {
+        RLOGD("current need add ap idx is %d ,g_history_disconnect_valid_num is %d line %d",curr_state.net_no,g_history_disconnect_valid_num,__LINE__);
+        g_history_disconnect_net[g_history_disconnect_valid_num] = curr_state.net_no;
+        g_history_disconnect_valid_num++;
+    }
+    RLOGD("%s %d",__func__,__LINE__);
+    print_disconnect_list();
     pthread_mutex_unlock(&s_global_check_mutex);
     return lynq_wifi_sta_stop_network(idx, curr_state.net_no);
 
@@ -3709,6 +3831,7 @@
     system(lynq_reconnect_cmd);
     pthread_mutex_lock(&s_global_check_mutex);
     g_history_disconnect_valid_num = 0;   //clean history_disconenct_list info
+    s_sta_status = INNER_STA_STATUS_INIT;
     pthread_mutex_unlock(&s_global_check_mutex);
     return 0;
 }
@@ -3728,6 +3851,7 @@
     int len;
 
     pthread_mutex_lock(&s_global_check_mutex);
+    s_sta_status = INNER_STA_STATUS_INIT;
     lynq_two_arr_merge(g_history_disconnect_net,g_history_disconnect_valid_num,tmp_open_idx,&len);
     pthread_mutex_unlock(&s_global_check_mutex);
     if(lynq_tmp_enable_network(idx,tmp_open_idx,len) != 0 )
@@ -3976,6 +4100,7 @@
     int count, net_no, index;
     int net_no_list[128];
     lynq_wifi_auth_s net_auth;
+
     char lynq_remove_cmd[MAX_CMD];
 
     if (ssid == NULL || *ssid == '\0')
@@ -4009,6 +4134,15 @@
     sprintf(lynq_remove_cmd, "REMOVE_NETWORK %d", net_no);
 
     DO_OK_FAIL_REQUEST(lynq_remove_cmd);
+
+    RLOGD("WIFI[lynq_sta_forget_ap][check_history_disconenct_ap_list] input net_no is %d",net_no);
+
+    pthread_mutex_lock(&s_global_check_mutex);
+    lynq_sta_removeElement(net_no);
+    pthread_mutex_unlock(&s_global_check_mutex);
+
+    RLOGD("%s %d",__func__,__LINE__);
+    print_disconnect_list();
     DO_OK_FAIL_REQUEST(cmd_save_config);
 
     return 0;
diff --git a/lib/liblynq-wifi6/scripts/start_stop_ap.sh b/lib/liblynq-wifi6/scripts/start_stop_ap.sh
index ff0c59c..441a0ee 100755
--- a/lib/liblynq-wifi6/scripts/start_stop_ap.sh
+++ b/lib/liblynq-wifi6/scripts/start_stop_ap.sh
@@ -17,12 +17,12 @@
         echo "dhcp-authoritative" >> $conf_file
 	echo "dhcp-range=192.168.15.2,192.168.15.14,255.255.255.240,1h"  >> $conf_file
 	echo "dhcp-option=3,192.168.15.1"  >> $conf_file
-	echo "dhcp-option=6,192.168.15.1"  >> $conf_file
+	echo "dhcp-option=6,192.168.15.1,114.114.114.114"  >> $conf_file
 	echo "dhcp-range=192.168.15.2,192.168.15.14,255.255.255.240,1h"  >> $conf_file
 	echo "dhcp-leasefile=/run/wg870/ap0.lease" >> $conf_file
 	ps -eo "%p %a" | grep "/usr/bin/dnsmasq -x /run/wg870/dnsmasq.pid" | grep -v grep 
 	if [ $? != 0 ]; then
-		/usr/bin/dnsmasq -x /run/wg870/dnsmasq.pid -7 /run/wg870/dnsmasq.d --local-service -C $conf_file -r /run/wg870
+		/usr/bin/dnsmasq -x /run/wg870/dnsmasq.pid -7 /run/wg870/dnsmasq.d --local-service -C $conf_file -r /run/wg870 --dhcp-broadcast
 	fi
 
 elif [ "$1" == "stop" ]; then