From 8e9475b3468a84b9a89e6cc3c7758f931410c2b1 Mon Sep 17 00:00:00 2001 From: Mahesh A Saptasagar Date: Tue, 18 Nov 2014 18:51:04 +0530 Subject: [PATCH 01/11] wlan: Fix for OSS build compilation issue Do not include "wpa_ctrl.h" in qsap.c file to avoid compilation errors on OSS builds. Change-Id: Ie3afa0bc564a5b2d9c2245b85f4681b83c1d1644 CRs-Fixed: 758764 --- softap/sdk/qsap.c | 1 - 1 file changed, 1 deletion(-) diff --git a/softap/sdk/qsap.c b/softap/sdk/qsap.c index 9606845..38a7c84 100644 --- a/softap/sdk/qsap.c +++ b/softap/sdk/qsap.c @@ -54,7 +54,6 @@ #include "qsap_api.h" #include "qsap.h" -#include "libwpa_client/wpa_ctrl.h" #include From 587b8b3d6722613c6ca0385d44eaf040662b8b41 Mon Sep 17 00:00:00 2001 From: Neelansh Mittal Date: Tue, 18 Nov 2014 19:31:25 +0530 Subject: [PATCH 02/11] wlan: Change location of hostapd files. Change location of hostapd accept and deny files from /data/hostapd to /data/misc/wifi because SElinux does not allow netd and hostapd to access /data/hostapd directory. Change-Id: I61e8521b3a4b6aab759d3b7cbc04acd3da3c8cf3 CRs-Fixed: 756614 --- softap/sdk/qsap_api.c | 1 - softap/sdk/qsap_api.h | 6 +++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/softap/sdk/qsap_api.c b/softap/sdk/qsap_api.c index b4ef4a2..b2ab6ab 100644 --- a/softap/sdk/qsap_api.c +++ b/softap/sdk/qsap_api.c @@ -3196,7 +3196,6 @@ void check_for_configuration_files(void) FILE * fp; /* Check if configuration files are present, if not create the default files */ - mkdir("/data/hostapd", 0771); /* If configuration file does not exist copy the default file */ if ( NULL == (fp = fopen(CONFIG_FILE, "r")) ) { diff --git a/softap/sdk/qsap_api.h b/softap/sdk/qsap_api.h index 41ac8a3..3e7035c 100644 --- a/softap/sdk/qsap_api.h +++ b/softap/sdk/qsap_api.h @@ -98,19 +98,19 @@ enum error_val { #define DEFAULT_ACCEPT_LIST_FILE_PATH "/system/etc/hostapd/hostapd.accept" /** Accept list file name */ -#define ACCEPT_LIST_FILE "/data/hostapd/hostapd.accept" +#define ACCEPT_LIST_FILE "/data/misc/wifi/hostapd.accept" /** Default Deny list file name */ #define DEFAULT_DENY_LIST_FILE_PATH "/system/etc/hostapd/hostapd.deny" /** Deny list file name */ -#define DENY_LIST_FILE "/data/hostapd/hostapd.deny" +#define DENY_LIST_FILE "/data/misc/wifi/hostapd.deny" /** Default Ini file */ #define DEFAULT_INI_FILE "/persist/qcom/softap/qcom_cfg_default.ini" /** SDK control interface path */ -#define SDK_CTRL_IF "/data/hostapd/softap_sdk_ctrl" +#define SDK_CTRL_IF "/data/misc/wifi/softap_sdk_ctrl" /** Maximum length of the line in the configuration file */ #define MAX_CONF_LINE_LEN (156) From 9b8ed111414ba39aa7ce207c9385545296b67d0b Mon Sep 17 00:00:00 2001 From: Ravi Joshi Date: Wed, 2 Apr 2014 14:52:40 -0700 Subject: [PATCH 03/11] framework: Fix for making SAP sdk code 64 bit compliant Fix for making SAP SDK code 64 bit compliant. The typedefs were incorrect on an LP64 architecture since a long int will be 64-bits. Change-Id: I4c9f5f2fb2b820193fbe03fdf8e2307c281ea014 CRs-Fixed: 640894 --- softap/sdk/qsap_api.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/softap/sdk/qsap_api.h b/softap/sdk/qsap_api.h index 3e7035c..b76919b 100644 --- a/softap/sdk/qsap_api.h +++ b/softap/sdk/qsap_api.h @@ -39,8 +39,8 @@ typedef unsigned char u8; typedef char s8; typedef unsigned short int u16; typedef signed short int s16; -typedef unsigned long int u32; -typedef signed long int s32; +typedef unsigned int u32; +typedef signed int s32; /** Success and error messages */ #define SUCCESS "success" From 5620bb1611be0a9c961aa450088209cfd8d18414 Mon Sep 17 00:00:00 2001 From: Ravi Joshi Date: Wed, 2 Apr 2014 14:52:40 -0700 Subject: [PATCH 04/11] framework: Fix for making SAP sdk code 64 bit compliant Fix for making SAP SDK code 64 bit compliant. The typedefs were incorrect on an LP64 architecture since a long int will be 64-bits. Change-Id: I4c9f5f2fb2b820193fbe03fdf8e2307c281ea014 CRs-Fixed: 640894 --- softap/sdk/qsap_api.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/softap/sdk/qsap_api.h b/softap/sdk/qsap_api.h index 3e7035c..b76919b 100644 --- a/softap/sdk/qsap_api.h +++ b/softap/sdk/qsap_api.h @@ -39,8 +39,8 @@ typedef unsigned char u8; typedef char s8; typedef unsigned short int u16; typedef signed short int s16; -typedef unsigned long int u32; -typedef signed long int s32; +typedef unsigned int u32; +typedef signed int s32; /** Success and error messages */ #define SUCCESS "success" From 71846207ccd8f6929d3e9d84a4476882ed2a3fd1 Mon Sep 17 00:00:00 2001 From: Naresh Jayaram Date: Tue, 3 Mar 2015 15:43:17 +0530 Subject: [PATCH 05/11] qcom-softap: Replace strcat & strcpy with strlcat & strlcpy strcpy and strcat are not safe, instead use strlcpy and strlcat which have control over the number of bytes to be written to the output str or buffer. CRs-Fixed: 802872 Change-Id: I7b6748946633dda551a1015678d41846c19adeb2 --- softap/jni/QWiFiSoftApCfg.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/softap/jni/QWiFiSoftApCfg.c b/softap/jni/QWiFiSoftApCfg.c index 3f991f3..9ad1e43 100755 --- a/softap/jni/QWiFiSoftApCfg.c +++ b/softap/jni/QWiFiSoftApCfg.c @@ -319,7 +319,7 @@ JNIEXPORT jstring JNICALL char code[32] = {0}; int connect_retry; - strncpy(cmd, "softap qccmd ", sizeof(cmd)); + strlcpy(cmd, "softap qccmd ", sizeof(cmd)); pcmd = (char *) ((*env)->GetStringUTFChars(env, jcmd, NULL)); @@ -330,12 +330,12 @@ JNIEXPORT jstring JNICALL ALOGD("Received Command: %s\n", pcmd); - if ((strlen(cmd) + strlen(pcmd)) > sizeof(cmd)) { + if ((strlen(cmd) + strlen(pcmd)) >= sizeof(cmd)) { UPDATE_ERROR_CODE("Command length is larger than MAX_CMD_SIZE", ""); goto end; } - strcat(cmd, pcmd); + strlcat(cmd, pcmd, sizeof(cmd)); connect_retry = 0; From fddc6bed07b543427eefc4de4e0044dd28710ba4 Mon Sep 17 00:00:00 2001 From: Changzhi Deng Date: Thu, 21 May 2015 15:47:07 +0800 Subject: [PATCH 06/11] Hotspot: Set maximun client connections number This function is for end user to set maximun client connections number and apply this to hostapd module Change-Id: I6150b376d22756e8c04ebabe666d81cf3af8fc87 --- softap/sdk/qsap_api.c | 14 ++++++++++++++ softap/sdk/qsap_api.h | 1 + 2 files changed, 15 insertions(+) diff --git a/softap/sdk/qsap_api.c b/softap/sdk/qsap_api.c index b2ab6ab..c551923 100644 --- a/softap/sdk/qsap_api.c +++ b/softap/sdk/qsap_api.c @@ -153,6 +153,7 @@ static struct Command cmd_list[eCMD_LAST] = { { "autochannel", NULL }, { "ieee80211w", NULL }, { "wpa_key_mgmt", NULL }, + { "max_num_sta", "8" }, }; struct Command qsap_str[eSTR_LAST] = { @@ -2605,6 +2606,9 @@ static void qsap_handle_set_request(s8 *pcmd, s8 *presp, u32 *plen) goto error; break; + case eCMD_SET_MAX_CLIENTS: + value = strlen(pVal); + break; case eCMD_BSSID: value = atoi(pVal); if(FALSE == IS_VALID_BSSID(value)) @@ -3163,6 +3167,16 @@ int qsapsetSoftap(int argc, char *argv[]) return -1; } + rlen = RECV_BUF_LEN; + if(argc > 8) { + qsap_scnprintf(cmdbuf, sizeof(cmdbuf), "set max_num_sta=%d",atoi(argv[8])); + } + (void) qsap_hostd_exec_cmd(cmdbuf, respbuf, &rlen); + + if(strncmp("success", respbuf, rlen) != 0) { + ALOGE("Failed to set maximun client connections number \n"); + return -1; + } rlen = RECV_BUF_LEN; qsap_scnprintf(cmdbuf, sizeof(cmdbuf), "set commit"); diff --git a/softap/sdk/qsap_api.h b/softap/sdk/qsap_api.h index b76919b..609112e 100644 --- a/softap/sdk/qsap_api.h +++ b/softap/sdk/qsap_api.h @@ -324,6 +324,7 @@ typedef enum esap_cmd { eCMD_GET_AUTO_CHANNEL = 63, eCMD_IEEE80211W = 64, eCMD_WPA_KEY_MGMT = 65, + eCMD_SET_MAX_CLIENTS = 66, eCMD_LAST /** New command numbers should be added above this */ } esap_cmd_t; From 650d036038bafdba3cde1472961edde6dcc16225 Mon Sep 17 00:00:00 2001 From: Bala Krishna Bhamidipati Date: Thu, 2 Jul 2015 15:27:18 +0530 Subject: [PATCH 07/11] Invoke qsap_set_ini_filename to set the fIni (if NULL) If WIFI_DRIVER_CONF_FILE is not defined fIni is set to null and hence all the set/get_cfg SAP commands fail. Thus, Invoke qsap_set_ini_filename explicitly if fINI is NULL. Change-Id: I9df1f95d7f4b884602cc501fe9e75ff4c26e400c CRs-Fixed: 865432 --- softap/sdk/qsap_api.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/softap/sdk/qsap_api.c b/softap/sdk/qsap_api.c index c551923..9298b2c 100644 --- a/softap/sdk/qsap_api.c +++ b/softap/sdk/qsap_api.c @@ -2937,7 +2937,6 @@ static void qsap_handle_set_request(s8 *pcmd, s8 *presp, u32 *plen) value = atoi(pVal); if(TRUE != IS_VALID_TX_POWER(value)) goto error; - qsap_set_ini_filename(); qsap_scnprintf(pVal, strlen(pVal)+1, "%ld", value); cNum = STR_TX_POWER_IN_INI; ini = INI_CONF_FILE; @@ -3032,6 +3031,8 @@ void qsap_hostd_exec_cmd(s8 *pcmd, s8 *presp, u32 *plen) SKIP_BLANK_SPACE(pcmd); check_for_configuration_files(); + if(fIni == NULL) + qsap_set_ini_filename(); if(!strncmp(pcmd, Cmd_req[eCMD_GET], strlen(Cmd_req[eCMD_GET])) && isblank(pcmd[strlen(Cmd_req[eCMD_GET])])) { qsap_handle_get_request(pcmd, presp, plen); From e629e82bc823601fabe7a69042f143d908f68d0c Mon Sep 17 00:00:00 2001 From: c_rrajiv Date: Mon, 20 Jul 2015 15:21:20 +0530 Subject: [PATCH 08/11] wlan: Add softap support through ndc commands. Changes required to support the softap commands through ndc cli. This new support as part of the 64bit enablement and ndc is used for cli automation in softap testcases. Change-Id: I460a3785c3b4a44656281c7243ebdf921fe20f91 CRs-Fixed: 710050 --- softap/sdk/qsap_api.c | 34 ++++++++++++++++++++++++++++++++++ softap/sdk/qsap_api.h | 1 + 2 files changed, 35 insertions(+) diff --git a/softap/sdk/qsap_api.c b/softap/sdk/qsap_api.c index c551923..59d2538 100644 --- a/softap/sdk/qsap_api.c +++ b/softap/sdk/qsap_api.c @@ -706,6 +706,40 @@ static s8 *qsap_get_allow_deny_file_name(s8 *pcfgfile, struct Command * pcmd, s8 return NULL; } +int qsap_hostd_exec(int argc, char ** argv) { + +#define MAX_CMD_SIZE 256 + char qcCmdBuf[MAX_CMD_SIZE], *pCmdBuf; + u32 len = MAX_CMD_SIZE; + int i = 2, ret; + + if ( argc < 4 ) { + ALOGD("failure: invalid arguments"); + return -1; + } + + argc -= 2; + pCmdBuf = qcCmdBuf; + + while (argc--) { + ret = snprintf(pCmdBuf, len, " %s", argv[i]); + if ((ret < 0) || (ret >= (int)len)) { + /* Error case */ + /* TODO: Command too long send the error message */ + *pCmdBuf = '\0'; + break; + } + ALOGD("argv[%d] (%s)",i, argv[i]); + pCmdBuf += ret; + len -= ret; + i++; + } + + ALOGD("QCCMD data (%s)", pCmdBuf); + len = MAX_CMD_SIZE; + qsap_hostd_exec_cmd(qcCmdBuf, qcCmdBuf, (u32*)&len); + return 0; +} /** Function to identify a valid MAC address */ static int isValid_MAC_address(char *pMac) { diff --git a/softap/sdk/qsap_api.h b/softap/sdk/qsap_api.h index 609112e..cdff946 100644 --- a/softap/sdk/qsap_api.h +++ b/softap/sdk/qsap_api.h @@ -577,6 +577,7 @@ typedef struct sap_auto_channel_info { #define IS_VALID_ENERGY_DETECT_TH(x) ((((x >= AP_ENERGY_DETECT_TH_MIN) && (x <= AP_ENERGY_DETECT_TH_MAX)) ||( x == 128)) ? TRUE : FALSE) /** Function declartion */ +int qsap_hostd_exec(int argc, char ** argv); void qsap_hostd_exec_cmd(s8 *pcmd, s8 *presp, u32 *plen); s8 *qsap_get_config_value(s8 *pfile, struct Command *pcmd, s8 *pbuf, u32 *plen); int qsapsetSoftap(int argc, char *argv[]); From e1bfb737ad164abc2854d7d5de4f0a7db87e2178 Mon Sep 17 00:00:00 2001 From: Manikandan Mohan Date: Tue, 18 Aug 2015 16:30:11 -0700 Subject: [PATCH 09/11] wlan: Add support for 11AC, ACS hostapd config Support for configuring 11ac and ACS channel list parameters in hostapd configuration file through soft AP SDK. Change-Id: I45c4f4285357701299c44f31243dea5107b0fabb CRs-Fixed: 892713 --- softap/sdk/qsap_api.c | 4 ++++ softap/sdk/qsap_api.h | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/softap/sdk/qsap_api.c b/softap/sdk/qsap_api.c index 6ea5d51..68dced2 100644 --- a/softap/sdk/qsap_api.c +++ b/softap/sdk/qsap_api.c @@ -154,6 +154,10 @@ static struct Command cmd_list[eCMD_LAST] = { { "ieee80211w", NULL }, { "wpa_key_mgmt", NULL }, { "max_num_sta", "8" }, + { "ieee80211ac", NULL }, + { "vht_oper_chwidth", NULL }, + { "chanlist", NULL }, + { "ht_capab", NULL }, }; struct Command qsap_str[eSTR_LAST] = { diff --git a/softap/sdk/qsap_api.h b/softap/sdk/qsap_api.h index cdff946..0d63b6d 100644 --- a/softap/sdk/qsap_api.h +++ b/softap/sdk/qsap_api.h @@ -325,6 +325,10 @@ typedef enum esap_cmd { eCMD_IEEE80211W = 64, eCMD_WPA_KEY_MGMT = 65, eCMD_SET_MAX_CLIENTS = 66, + eCMD_IEEE80211AC = 67, + eCMD_VHT_OPER_CH_WIDTH = 68, + eCMD_ACS_CHAN_LIST = 69, + eCMD_HT_CAPAB = 70, eCMD_LAST /** New command numbers should be added above this */ } esap_cmd_t; From cc163159979b2447dd845a27ded60ae0d7a062d7 Mon Sep 17 00:00:00 2001 From: Ashwini Sukhadev Patil Date: Wed, 9 Sep 2015 20:34:28 +0530 Subject: [PATCH 10/11] Modify NDC commands to write to hostapd.conf Provision to configure rts_threshold, fragm_threshold and wmm_enabled in hostapd.conf through NDC commands. CRs-Fixed: 889979 Change-Id: I94e4486573b562fbe48c641423bf1c1389d0c744 --- softap/sdk/qsap_api.c | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/softap/sdk/qsap_api.c b/softap/sdk/qsap_api.c index 6ea5d51..935bf08 100644 --- a/softap/sdk/qsap_api.c +++ b/softap/sdk/qsap_api.c @@ -1748,15 +1748,9 @@ static void qsap_get_from_config(esap_cmd_t cNum, s8 *presp, u32 *plen) break; case eCMD_FRAG_THRESHOLD: - qsap_read_cfg(fIni, &qsap_str[STR_FRAG_THRESHOLD_IN_INI], presp, plen, cmd_list[eCMD_FRAG_THRESHOLD].name, GET_ENABLED_ONLY); - break; - case eCMD_REGULATORY_DOMAIN: - qsap_read_cfg(pconffile, &cmd_list[cNum], presp, plen, NULL, GET_ENABLED_ONLY); - break; - case eCMD_RTS_THRESHOLD: - qsap_read_cfg(fIni, &qsap_str[STR_RTS_THRESHOLD_IN_INI], presp, plen, cmd_list[eCMD_RTS_THRESHOLD].name, GET_ENABLED_ONLY); + qsap_read_cfg(pconffile, &cmd_list[cNum], presp, plen, NULL, GET_ENABLED_ONLY); break; case eCMD_ALLOW_LIST: /* fall through */ @@ -1775,7 +1769,7 @@ static void qsap_get_from_config(esap_cmd_t cNum, s8 *presp, u32 *plen) break; case eCMD_WMM_STATE: - qsap_read_cfg(fIni, &qsap_str[STR_WMM_IN_INI], presp, plen, cmd_list[eCMD_WMM_STATE].name, GET_ENABLED_ONLY); + qsap_read_cfg(pconffile, &cmd_list[cNum], presp, plen, NULL, GET_ENABLED_ONLY); break; case eCMD_WPS_STATE: @@ -2905,8 +2899,6 @@ static void qsap_handle_set_request(s8 *pcmd, s8 *presp, u32 *plen) goto error; qsap_scnprintf(pVal, strlen(pVal)+1, "%ld", value); - cNum = STR_WMM_IN_INI; - ini = INI_CONF_FILE; break; case eCMD_WPS_STATE: value = atoi(pVal); @@ -2937,9 +2929,6 @@ static void qsap_handle_set_request(s8 *pcmd, s8 *presp, u32 *plen) if(TRUE != IS_VALID_FRAG_THRESHOLD(value)) goto error; qsap_scnprintf(pVal, strlen(pVal)+1, "%ld", value); - - cNum = STR_FRAG_THRESHOLD_IN_INI; - ini = INI_CONF_FILE; break; case eCMD_REGULATORY_DOMAIN: @@ -2956,8 +2945,6 @@ static void qsap_handle_set_request(s8 *pcmd, s8 *presp, u32 *plen) if(TRUE != IS_VALID_RTS_THRESHOLD(value)) goto error; qsap_scnprintf(pVal, strlen(pVal)+1, "%ld", value); - cNum = STR_RTS_THRESHOLD_IN_INI; - ini = INI_CONF_FILE; break; case eCMD_GTK_TIMEOUT: From a1c6f1dbe567fee024f0468952893cba0379bc95 Mon Sep 17 00:00:00 2001 From: Pradeep Reddy POTTETI Date: Fri, 18 Sep 2015 18:49:05 +0530 Subject: [PATCH 11/11] Provide read/write access on accept/deny files to hostapd This commit provides read/write access on accept/deny files to hostapd similar to hostapd.conf. Change-Id: I1c3cda056a4067d48484cb336e748f04804b68e3 CRs-fixed: 910398 --- softap/sdk/qsap_api.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/softap/sdk/qsap_api.c b/softap/sdk/qsap_api.c index 6ea5d51..7a33da2 100644 --- a/softap/sdk/qsap_api.c +++ b/softap/sdk/qsap_api.c @@ -3243,6 +3243,7 @@ static int check_for_config_file_size(FILE *fp) void check_for_configuration_files(void) { FILE * fp; + char *pfile; /* Check if configuration files are present, if not create the default files */ @@ -3272,6 +3273,18 @@ void check_for_configuration_files(void) fclose(fp); } + /* Provide read and write permissions to the owner */ + pfile = ACCEPT_LIST_FILE; + if (chmod(pfile, 0660) < 0) { + ALOGE("Error changing permissions of %s to 0660: %s", + pfile, strerror(errno)); + } + + if (chown(pfile, AID_SYSTEM, AID_WIFI) < 0) { + ALOGE("Error changing group ownership of %s to %d: %s", + pfile, AID_WIFI, strerror(errno)); + } + /* If deny MAC list file does not exist, copy the default file */ if ( NULL == (fp = fopen(DENY_LIST_FILE, "r")) ) { wifi_qsap_reset_to_default(DENY_LIST_FILE, DEFAULT_DENY_LIST_FILE_PATH); @@ -3285,6 +3298,18 @@ void check_for_configuration_files(void) fclose(fp); } + /* Provide read and write permissions to the owner */ + pfile = DENY_LIST_FILE; + if (chmod(pfile, 0660) < 0) { + ALOGE("Error changing permissions of %s to 0660: %s", + pfile, strerror(errno)); + } + + if (chown(pfile, AID_SYSTEM, AID_WIFI) < 0) { + ALOGE("Error changing group ownership of %s to %d: %s", + pfile, AID_WIFI, strerror(errno)); + } + return; }