[T106][ZXW-22]7520V3SCV2.01.01.02P42U09_VEC_V0.8_AP_VEC origin source commit
Change-Id: Ic6e05d89ecd62fc34f82b23dcf306c93764aec4b
diff --git a/ap/lib/libwlan_interface/broadcom_interface.c b/ap/lib/libwlan_interface/broadcom_interface.c
new file mode 100755
index 0000000..76492f3
--- /dev/null
+++ b/ap/lib/libwlan_interface/broadcom_interface.c
@@ -0,0 +1,767 @@
+#include <softap_api.h>
+#include <errno.h>
+#include "wlan_interface.h"
+
+#define WIFI_SSID_LEN 33
+
+#define WLAN_SECURITY_LEN 20
+#define WLAN_ENCRYTYPE_LEN 10
+#define WLAN_DEFAULTID_LEN 2
+#define WLAN_WEPKEY_LEN 32
+#define WLAN_PSK_LEN 65
+#define WLAN_ENCODE_PSK_LEN 100
+
+#define WF_AU_OPEN "OPEN" //wifi auth mode?
+#define WF_AU_SHARE "SHARED"
+#define WF_AU_WEPAUTO "WEPAUTO"
+#define WF_AU_WPA "WPAPSK"
+#define WF_AU_WPA2 "WPA2PSK"
+#define WF_AU_WPA_WPA2 "WPAPSKWPA2PSK"
+#define WF_AU_WAPIPSK "WAPIPSK"
+#define WF_ENCRY_NONE "NONE" //encrypt
+#define WF_ENCRY_WEP "WEP"
+#define WF_ENCRY_TKIP "TKIP"
+#define WF_ENCRY_CCMP "CCMP"
+#define WF_ENCRY_AES "AES"
+#define WF_ENCRY_TKIP_CCMP "TKIPCCMP"
+#define WF_ENCRY_TKIP_AES "TKIPAES"
+
+static void zte_wlan_get_wifi_station_list(RT_802_11_MAC_TABLE *staionlist);
+
+
+void zte_wlan_get_wifi_mac_list(RT_802_11_MAC_TABLE *maclist)
+{
+ int s = 0;
+ int k = 0;
+
+ FILE *pp = NULL;
+ //FILE *pp2 = NULL;
+ char buf[128]={0};
+ char mac_tmp[18] = {0};
+ char num_tmp[3] = {0};
+ char *p = NULL;
+ char *p_tmp = NULL;
+
+ char authmode[20]={0};
+ char encryptype[20]={0};
+
+ char wifi_sta_connection[8]={0};
+
+ char cmd[128]={0};
+ char iifname[20]={0};
+ RT_802_11_MAC_TABLE *mac_list=NULL ;
+ memset(buf, 0, sizeof(buf));
+ mac_list =(RT_802_11_MAC_TABLE*)malloc(sizeof(RT_802_11_MAC_TABLE));
+ if(mac_list == NULL)
+ {
+ assert(mac_list);
+ }
+ else
+ {
+ memset(mac_list, 0, sizeof(RT_802_11_MAC_TABLE));
+ }
+
+
+ sc_cfg_get("wifi_sta_connection", wifi_sta_connection, sizeof(wifi_sta_connection));
+
+ if(strncmp(wifi_sta_connection, "1",1) == 0){
+ strcpy(iifname,"-i wl0.1");
+ }
+
+ //memset(&table,0,sizeof(table));
+
+ sc_cfg_get("AuthMode",authmode,sizeof(authmode));
+ sc_cfg_get("EncrypType",encryptype,sizeof(encryptype));
+ if((!strcmp(authmode,"WPAPSK"))||(!strcmp(authmode,"WPA2PSK"))||(!strcmp(authmode,"WPAPSKWPA2PSK")))
+ {
+ sprintf(cmd,"wl %s autho_sta_list",iifname);
+ }
+ else
+ {
+ sprintf(cmd,"wl %s assoclist",iifname);
+ }
+ printf("[%s:%s]iifname:%s\n",__FILE__, __FUNCTION__, cmd);
+ pp = popen(cmd, "r"); //½¨Á¢¹ÜµÀ
+ if (!pp)
+ {
+ return ;
+
+ }
+
+ strcpy(buf,"ABNORMAL");
+again:
+ while(fgets(buf, 128, pp) != NULL)
+ {
+
+ if(strcmp(buf,"ABNORMAL")==0) /*ps command error*/
+ {
+ printf("[%s] detect_process strerror: %s\n",__FUNCTION__,strerror(errno));
+ if(errno == EINTR) //Interrupted system call,´Ëʱ¿ÉÖØÊÔ
+ {
+ goto again;
+ }
+
+ pclose(pp);//¹Ø±Õ¹ÜµÀ
+ return ;
+ }
+ memset(mac_tmp, 0, 18);
+ if((p = strstr(buf, ":")) != NULL)
+ {
+ p_tmp = p-2;
+ strncpy(mac_tmp, p_tmp, 17);
+
+ for(s=0,k=0; s<6; s++,k+=3)
+ {
+ strncpy(num_tmp, mac_tmp + k, 2);
+ //printf("zhouti num_tmp is %s\n", num_tmp);
+ //table.Entry[sta_num].Addr[s]=atoi(num_tmp);
+ mac_list->Entry[mac_list->Num].Addr[s] = s2x(num_tmp);
+ //mac_list->Entry[mac_list->Num].Addr[s] = 0;
+ }
+ mac_list->Num += 1;
+
+ }
+ memset(buf, 0, sizeof(buf));
+ }
+ (*maclist)= (*mac_list);
+ if(mac_list)
+ {
+ free(mac_list);
+ mac_list=NULL;
+ }
+ pclose(pp); //¹Ø±Õ¹ÜµÀ;
+
+}
+
+static void zte_wlan_get_wifi_station_list(RT_802_11_MAC_TABLE *staionlist)
+{
+
+ int i = 0;
+ char buf[128]={0};
+ FILE *pp2 = NULL;
+ char mac_tmp[18] = {0};
+ char *p_tmp = NULL;
+ char station_mac[18*32]={0}; // 00:00:00:00:00:00;
+ char stationinfo[100] = {0};
+ char mac_time[33] = {0};
+
+ RT_802_11_MAC_TABLE *sta_list = NULL;
+ sta_list = (RT_802_11_MAC_TABLE*)malloc(sizeof(RT_802_11_MAC_TABLE));
+ if(sta_list == NULL)
+ {
+ assert(sta_list);
+ }
+ else
+ {
+ memset(sta_list, 0, sizeof(RT_802_11_MAC_TABLE)+1);
+ }
+ zte_wlan_get_wifi_mac_list(sta_list);
+
+ for (i = 0; i <sta_list->Num; i++)
+ {
+ sprintf(station_mac + i * 18, "%2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X;",\
+ sta_list->Entry[i].Addr[0], sta_list->Entry[i].Addr[1],
+ sta_list->Entry[i].Addr[2], sta_list->Entry[i].Addr[3],
+ sta_list->Entry[i].Addr[4], sta_list->Entry[i].Addr[5]);
+ sprintf(stationinfo,"wl sta_info %2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X \
+ | grep \"in network\" | cut -d\" \" -f4",
+ sta_list->Entry[i].Addr[0], sta_list->Entry[i].Addr[1],
+ sta_list->Entry[i].Addr[2], sta_list->Entry[i].Addr[3],
+ sta_list->Entry[i].Addr[4], sta_list->Entry[i].Addr[5]);
+
+ printf("[%s:%s]stationinfo:%s\n",__FILE__, __FUNCTION__, stationinfo);
+ pp2 = popen(stationinfo, "r"); //½¨Á¢¹ÜµÀ
+
+ if(NULL == pp2)
+ {
+ continue;
+ }
+ memset(buf, 0, sizeof(buf));
+ strcpy(buf,"ABNORMAL");
+ while(fgets(buf, sizeof(buf), pp2))
+ {
+
+ if(strcmp(buf,"ABNORMAL")==0) /*ps command error*/
+ {
+ printf("[%s] detect_process strerror: %s\n",__FUNCTION__,strerror(errno));
+
+ pclose(pp2);//¹Ø±Õ¹ÜµÀ
+ return ;
+ }
+ memset(mac_time,0,33);
+ strncpy(mac_time,buf,32);
+
+ printf("[%s:%s]buf0:%s\n",__FILE__, __FUNCTION__, buf);
+
+ if(NULL != mac_time)
+ {
+ sta_list->Entry[i].ConnectedTime = atol(mac_time);
+ printf("[%s:%s]ConnectedTime->Num3:%d\n",__FILE__, __FUNCTION__, sta_list->Entry[i].ConnectedTime);
+ }
+ else
+ {
+ sta_list->Entry[i].ConnectedTime = 0;
+ }
+ memset(buf, 0, sizeof(buf));
+ printf("[%s:%s]mac_time:%d\n",__FILE__, __FUNCTION__, mac_time);
+
+ }
+
+ pclose(pp2); //¹Ø±Õ¹ÜµÀ
+ }
+
+ (*staionlist)= (*sta_list);
+ if(sta_list)
+ {
+ free(sta_list);
+ sta_list=NULL;
+ }
+
+}
+
+static void wlan_set_change_ssid_key_status()
+{
+ ipc_send_message(MODULE_ID_WLAN_SERVER, MODULE_ID_WIFI, MSG_CMD_MODIFY_SSID_KEY, 0, NULL, 0);
+}
+
+static int zte_wlan_ssid1_basic_set(char* ssid_in)
+{
+ char *ssid = NULL;
+ char nv_tmp[WIFI_SSID_LEN] = {0};
+
+ if(NULL == ssid_in)
+ {
+ printf("input ssid is null\n");
+ return -1;
+ }
+
+ if((!strcmp(ssid_in, " ")) || (strlen(ssid_in) <= 0) || (strlen(ssid_in) > WIFI_SSID_LEN ))
+ {
+ printf("input ssid is error\n");
+ return -1;
+ }
+ //ssid
+ memset(nv_tmp,0,sizeof(nv_tmp));
+ if(ssid_in != NULL)
+ {
+
+ sc_cfg_get("SSID1",nv_tmp,sizeof(nv_tmp));
+ if (0 != strcmp(ssid_in, nv_tmp))
+ {
+ sc_cfg_set("SSID1", ssid_in);
+ //sc_cfg_save();
+ wlan_set_change_ssid_key_status();
+ }
+ else
+ {
+ printf("input ssid is same \n");
+ return 1;
+ }
+ }
+ return 0;
+}
+
+static int zte_wlan_ssid1_security_set(char* password)
+{
+ char authMode[WLAN_SECURITY_LEN] = {0};
+ char encrypType[WLAN_ENCRYTYPE_LEN] = {0};
+ char DefaultKeyID[WLAN_DEFAULTID_LEN] = {0};
+
+ sc_cfg_get("AuthMode",authMode,sizeof(authMode));
+ sc_cfg_get("EncrypType",encrypType,sizeof(encrypType));
+
+
+ if(authMode != NULL && encrypType != NULL)
+ {
+ printf("zte_wlan_ssid1_security_set authMode = [%s]\n", authMode);
+ printf("zte_wlan_ssid1_security_set encrypType = [%s]\n", encrypType);
+ if(NULL == password && (!(!strcmp(authMode, WF_AU_OPEN) && !strcmp(encrypType, WF_ENCRY_NONE))))
+ {
+ printf("zte_wlan_ssid1_security_set password is null\n");
+ return -1;
+ }
+
+ if((!strcmp(authMode, WF_AU_OPEN)) || (!strcmp(authMode, WF_AU_SHARE)) || (!strcmp(authMode, WF_AU_WEPAUTO)))
+ {
+ if(((!strcmp(authMode, WF_AU_OPEN)) && (!strcmp(authMode, WF_ENCRY_WEP))) ||
+ (!strcmp(authMode, WF_AU_SHARE)) || (!strcmp(authMode, WF_AU_WEPAUTO)))
+ {
+ int len = 0;
+ len = strlen(password);
+ if(len != 5 || len != 10 || len != 13 || len != 26)
+ {
+ printf("zte_wlan_ssid1_security_set wep psk len = [%s]\n", len);
+ return -1;
+ }
+
+ sc_cfg_get("DefaultKeyID",DefaultKeyID,sizeof(DefaultKeyID));
+ if(DefaultKeyID != NULL)
+ {
+ char old_wep_key[WLAN_WEPKEY_LEN] = {0};
+
+ if(!strcmp(DefaultKeyID, "1"))
+ {
+ sc_cfg_get("Key2Str1",old_wep_key,sizeof(old_wep_key));
+ if(strcmp(old_wep_key, password))
+ {
+ sc_cfg_set("Key2Str1", password);
+ //sc_cfg_save();
+ wlan_set_change_ssid_key_status();
+ }
+ else
+ {
+ printf("zte_wlan_ssid1_security_set wep psk is same\n");
+ return 1;
+ }
+ }
+ else if(!strcmp(DefaultKeyID, "2"))
+ {
+ sc_cfg_get("Key3Str1",old_wep_key,sizeof(old_wep_key));
+ if(strcmp(old_wep_key, password))
+ {
+ sc_cfg_set("Key3Str1", password);
+ //sc_cfg_save();
+ wlan_set_change_ssid_key_status();
+ }
+ else
+ {
+ printf("zte_wlan_ssid1_security_set wep psk is same\n");
+ return 1;
+ }
+ }
+ else if(!strcmp(DefaultKeyID, "3"))
+ {
+ sc_cfg_get("Key4Str1",old_wep_key,sizeof(old_wep_key));
+ if(strcmp(old_wep_key, password))
+ {
+ sc_cfg_set("Key4Str1", password);
+ //sc_cfg_save();
+ wlan_set_change_ssid_key_status();
+ }
+ else
+ {
+ printf("zte_wlan_ssid1_security_set wep psk is same\n");
+ return 1;
+ }
+ }
+ else
+ {
+ sc_cfg_get("Key1Str1",old_wep_key,sizeof(old_wep_key));
+ if(strcmp(old_wep_key, password))
+ {
+ sc_cfg_set("Key1Str1", password);
+ //sc_cfg_save();
+ wlan_set_change_ssid_key_status();
+ }
+ else
+ {
+ printf("zte_wlan_ssid1_security_set wep psk is same\n");
+ return 1;
+ }
+ }
+ }
+ }
+ else if(!strcmp(authMode, WF_AU_OPEN) && !strcmp(encrypType, WF_ENCRY_NONE))
+ {
+ printf("authMode is open and not wep \n");
+ wlan_set_change_ssid_key_status();
+ return 1;
+
+ }
+ }
+ else if(!strcmp(authMode, WF_AU_WPA) || !strcmp(authMode, WF_AU_WPA2) || !strcmp(authMode, WF_AU_WPA_WPA2))
+ {
+ char psk[WLAN_PSK_LEN] = {0};
+ int len = 0;
+ char encode[WLAN_ENCODE_PSK_LEN] = {0};
+ len = strlen(password);
+
+ if(len < 8 || len > 64)
+ {
+ printf("%s password len is %d \n",authMode, len);
+ return -1;
+ }
+
+ sc_cfg_get("WPAPSK1",psk,sizeof(psk));
+ if(psk != NULL)
+ {
+ if(strcmp(psk, password))
+ {
+ sc_cfg_set("WPAPSK1", password);
+ base64_encode(password, len, encode, WLAN_ENCODE_PSK_LEN);
+ sc_cfg_set("WPAPSK1_encode", encode);
+ //sc_cfg_save();
+ wlan_set_change_ssid_key_status();
+ }
+ }
+ else
+ {
+ sc_cfg_set("WPAPSK1", password);
+ base64_encode(password, len, encode, WLAN_ENCODE_PSK_LEN);
+ sc_cfg_set("WPAPSK1_encode", encode);
+ //sc_cfg_save();
+ wlan_set_change_ssid_key_status();
+ }
+ }
+ else if(!strcmp(authMode, WF_AU_WAPIPSK))
+ {
+ char psk[WLAN_PSK_LEN] = {0};
+ int len = 0;
+ char encode[WLAN_PSK_LEN] = {0};
+ len = strlen(password);
+
+ if(len < 8 || len > 64)
+ {
+ printf("WF_AU_WAPIPSK password len is %d \n", len);
+ return -1;
+ }
+
+ sc_cfg_get("WPAPSK1",psk,sizeof(psk));
+ if(psk != NULL)
+ {
+ if(strcmp(psk, password))
+ {
+ sc_cfg_set("WPAPSK1", password);
+ base64_encode(password, len, encode, WLAN_ENCODE_PSK_LEN);
+ sc_cfg_set("WPAPSK1_encode", encode);
+ //sc_cfg_save();
+ wlan_set_change_ssid_key_status();
+ }
+ }
+ else
+ {
+ sc_cfg_set("WPAPSK1", password);
+ base64_encode(password, len, encode, WLAN_ENCODE_PSK_LEN);
+ sc_cfg_set("WPAPSK1_encode", encode);
+ //sc_cfg_save();
+ wlan_set_change_ssid_key_status();
+ }
+ }
+ else
+ {
+ // other security mode is invalid
+ printf("ERROR:security mode is invalid\n");
+ return -1;
+ }
+ }
+ else
+ {
+ //security_mode is NULL
+ printf("ERROR:security_mode is null\n");
+ return -1;
+ }
+
+ return 0;
+}
+
+int zte_wlan_get_ssid1_settings(char* ssid, char* password, int ssid_len, int password_len)
+{
+ char authMode[WLAN_SECURITY_LEN] = {0};
+ char encrypType[WLAN_ENCRYTYPE_LEN] = {0};
+ char DefaultKeyID[WLAN_DEFAULTID_LEN] = {0};
+
+ if(NULL == ssid || NULL == password)
+ {
+ printf("ERROR:input ssid && password is null\n");
+ return -1;
+ }
+
+ if(NULL != ssid)
+ {
+ char old_ssid[WIFI_SSID_LEN] = {0};
+ sc_cfg_get("SSID1",old_ssid,sizeof(old_ssid));
+ if(old_ssid != NULL)
+ {
+ strncpy(ssid, old_ssid, ssid_len - 1);
+ }
+ else
+ {
+ printf("ERROR:input old_ssid is null\n");
+ return -1;
+ }
+ }
+
+ if(NULL != password)
+ {
+ sc_cfg_get("AuthMode",authMode,sizeof(authMode));
+ sc_cfg_get("EncrypType",encrypType,sizeof(encrypType));
+
+
+ if(authMode != NULL && encrypType != NULL)
+ {
+ printf("zte_wlan_ssid1_security_get authMode = [%s]\n", authMode);
+ printf("zte_wlan_ssid1_security_get encrypType = [%s]\n", encrypType);
+
+ if((!strcmp(authMode, WF_AU_OPEN)) || (!strcmp(authMode, WF_AU_SHARE)) || (!strcmp(authMode, WF_AU_WEPAUTO)))
+ {
+ if(((!strcmp(authMode, WF_AU_OPEN)) && (!strcmp(authMode, WF_ENCRY_WEP))) ||
+ (!strcmp(authMode, WF_AU_SHARE)) || (!strcmp(authMode, WF_AU_WEPAUTO)))
+ {
+ sc_cfg_get("DefaultKeyID",DefaultKeyID,sizeof(DefaultKeyID));
+ if(DefaultKeyID != NULL)
+ {
+ char old_wep_key[WLAN_WEPKEY_LEN] = {0};
+ if(!strcmp(DefaultKeyID, "1"))
+ {
+ sc_cfg_get("Key2Str1",old_wep_key,sizeof(old_wep_key));
+ if(old_wep_key != NULL)
+ {
+ strncpy(password, old_wep_key, password_len-1);
+ }
+ else
+ {
+ printf("ERROR:input old_wep_key is null\n");
+ return -1;
+ }
+ }
+ else if(!strcmp(DefaultKeyID, "2"))
+ {
+ sc_cfg_get("Key3Str1",old_wep_key,sizeof(old_wep_key));
+ if(old_wep_key != NULL)
+ {
+ strncpy(password, old_wep_key, password_len-1);
+ }
+ else
+ {
+ printf("ERROR:input old_wep_key is null\n");
+ return -1;
+ }
+ }
+ else if(!strcmp(DefaultKeyID, "3"))
+ {
+ sc_cfg_get("Key4Str1",old_wep_key,sizeof(old_wep_key));
+ if(old_wep_key != NULL)
+ {
+ strncpy(password, old_wep_key, password_len-1);
+ }
+ else
+ {
+ printf("ERROR:input old_wep_key is null\n");
+ return -1;
+ }
+ }
+ else
+ {
+ sc_cfg_get("Key1Str1",old_wep_key,sizeof(old_wep_key));
+ if(old_wep_key != NULL)
+ {
+ strncpy(password, old_wep_key, password_len-1);
+ }
+ else
+ {
+ printf("ERROR:input old_wep_key is null\n");
+ return -1;
+ }
+ }
+ }
+ }
+ }
+ else if(!strcmp(authMode, WF_AU_WPA) || !strcmp(authMode, WF_AU_WPA2) || !strcmp(authMode, WF_AU_WPA_WPA2))
+ {
+ char psk[WLAN_PSK_LEN] = {0};
+ sc_cfg_get("WPAPSK1",psk,sizeof(psk));
+ if(psk != NULL)
+ {
+ strncpy(password, psk, password_len-1);
+ }
+ else
+ {
+ printf("ERROR:%s input psk is null\n", authMode);
+ return -1;
+ }
+ }
+ else if(!strcmp(authMode, WF_AU_WAPIPSK))
+ {
+ char psk[WLAN_PSK_LEN] = {0};
+ sc_cfg_get("WPAPSK1",psk,sizeof(psk));
+ if(psk != NULL)
+ {
+ strncpy(password, psk, password_len-1);
+ }
+ else
+ {
+ printf("ERROR:%s input psk is null\n", authMode);
+ return -1;
+ }
+ }
+ else
+ {
+ return -1;
+ }
+ }
+ else
+ {
+ return -1;
+ }
+ }
+ return 0;
+}
+
+int zte_wlan_ssid1_set(char* ssid, char* password)
+{
+ int ret_for_basic = 0;
+ int ret_for_security = 0;
+
+ ret_for_basic = zte_wlan_ssid1_basic_set(ssid);
+ if(-1 == ret_for_basic)
+ {
+ printf("zte_wlan_ssid1_basic_set is false\n");
+ return -1;
+ }
+ ret_for_security = zte_wlan_ssid1_security_set(password);
+ if(-1 == ret_for_security)
+ {
+ printf("call zte_lan_ssid1_security_set failure .\n");
+ return -1;
+ }
+
+ if(ret_for_basic == 0 || ret_for_security == 0)
+ {
+ if(0 == ipc_send_message(MODULE_ID_WLAN_SERVER, MODULE_ID_WIFI, MSG_CMD_WIFI_ADVANCED, 2, "1", 0))
+ {
+ sc_cfg_set("RadioOff", "0");
+ printf("wifi set cmd done!\n");
+ }
+ else
+ {
+ printf("wifi set cmd zte_wlan_ssid1_set error!\n");
+ return -1;
+ }
+ }
+ return 0;
+}
+
+
+int zte_wlan_capture_sta_num()
+{
+ int total_station_num = 0;
+ FILE *pp = NULL;
+ char *tmp = NULL;
+ char buf[128]={0};
+ char authmode[20]={0};
+ char radio_off[20] = {0};
+ char wifi_sta_connection[8]={0};
+ char cmd[128]={0};
+ char iifname[16]={0};
+
+ sc_cfg_get("RadioOff",radio_off,sizeof(radio_off));
+ sc_cfg_get("wifi_sta_connection", wifi_sta_connection, sizeof(wifi_sta_connection));
+ sc_cfg_get("AuthMode",authmode, 20);
+
+ if (!strncmp(radio_off, "0", 1))
+ {
+ printf("[wlan-interface]ap-service stopped! return!\n");
+ return 0;
+ }
+
+ if(strncmp(wifi_sta_connection, "1",1) == 0)
+ {
+ strcpy(iifname,"-i wl0.1");
+ }
+ else
+ {
+ strcpy(iifname,"-i wlan0");
+ }
+
+ if((!strcmp(authmode,"WPAPSK"))||(!strcmp(authmode,"WPA2PSK"))||(!strcmp(authmode,"WPAPSKWPA2PSK")))
+ {
+ sprintf(cmd, "wl %s autho_sta_list", iifname);
+ sprintf(cmd, "wl %s autho_sta_list", iifname);
+ }
+ else
+ {
+ sprintf(cmd, "wl %s assoclist", iifname);
+ }
+
+ if ( cmd == NULL )
+ {
+ printf("[wlan-interface]error!! cmd is NULL!!\n");
+ return 0;
+ }
+
+ pp = popen(cmd, "r"); //pipe starts
+ if (!pp)
+ {
+ printf("[wlan-interface]error!! create pipe failed!!\n");
+ return 0;
+ }
+
+ strcpy(buf,"ABNORMAL");
+
+Again:
+ while(fgets(buf, 128, pp) != NULL)
+ {
+ if(strcmp(buf,"ABNORMAL")==0) //fgets error
+ {
+ printf("[wlan-interface]error!! [%s] strerror: %s\n",__FUNCTION__,strerror(errno));
+ if(errno == EINTR) //Interrupted system call,try again
+ {
+ goto Again;
+ }
+
+ pclose(pp);//close pipe
+ return 0;
+ }
+
+ if(strlen(buf) > 0)
+ {
+ if((tmp = strstr(buf, ":")) != NULL)
+ {
+ total_station_num += 1;
+ }
+ }
+ memset(buf,0,128);
+ strcpy(buf,"ABNORMAL");
+
+ }
+
+ pclose(pp);//close pipe
+ printf("[wlan-interface] total_station_num=%d\n",total_station_num);
+ return total_station_num;
+}
+
+
+void zte_get_wifi_sta_list(RT_802_11_MAC_TABLE *staList)
+{
+
+ int i = 0;
+ char station_mac[18*32]={0}; // 00:00:00:00:00:00;
+ char station_mac_tmp[18*32]={0};
+ char tmp_str[10] = {0};
+
+ if(NULL == staList)
+ {
+ return;
+ }
+ zte_wlan_get_wifi_station_list(staList);
+
+ printf("[%s:%s]staList->Num1:%d\n",__FILE__, __FUNCTION__, staList->Num);
+ printf("[%s:%s]staList->ConnectedTime:%d\n",__FILE__, __FUNCTION__, staList->Entry[0].ConnectedTime);
+
+ sprintf(tmp_str, "%d", staList->Num);
+ sc_cfg_set("wificount", tmp_str);
+ sc_cfg_set("station_num", tmp_str);
+ for(i=0; i<staList->Num; i++)
+ {
+ sprintf(station_mac + i * 18, "%2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X;",\
+ staList->Entry[i].Addr[0], staList->Entry[i].Addr[1],
+ staList->Entry[i].Addr[2], staList->Entry[i].Addr[3],
+ staList->Entry[i].Addr[4], staList->Entry[i].Addr[5]);
+ }
+ if(staList->Num != 0)
+ {
+ strncpy(station_mac_tmp, station_mac, strlen(station_mac) - 1);
+ }
+
+ sc_cfg_set("station_mac", station_mac_tmp);
+
+}
+
+#if 0 //kw 3
+int get_channel()
+{
+ char channel[8]={0};
+ pipecmd("wl channel | grep mac |cut -f2", channel);
+ return atoi(channel);
+}
+#endif