Code uploaded as per p4 label WLAN_LIBRA_SOFTAP_LAFY_7630_REL10

Change-Id: Ib4973da98606f4cdbea5c6b9621999fbb06c2528
This commit is contained in:
Raj Kushwaha
2010-09-17 00:34:16 -07:00
parent aaaa518f19
commit ba862bdb95
5 changed files with 274 additions and 131 deletions

View File

@@ -143,7 +143,7 @@ static void softap_handle_iface_event(void)
(struct sockaddr *)&rtnl_local, &slen); (struct sockaddr *)&rtnl_local, &slen);
if (cnt <= 0) { if (cnt <= 0) {
buffer[0] = '\0'; buffer[0] = '\0';
LOGD("recvfrom failed"); LOGD("recvfrom failed");
return; return;
} }

View File

@@ -8,6 +8,18 @@ LOCAL_C_INCLUDES :=
LOCAL_MODULE:= libqsap_sdk LOCAL_MODULE:= libqsap_sdk
ifdef WIFI_DRIVER_MODULE_PATH
LOCAL_CFLAGS += -DWIFI_DRIVER_MODULE_PATH=\"$(WIFI_DRIVER_MODULE_PATH)\"
endif
ifdef WIFI_DRIVER_MODULE_ARG
LOCAL_CFLAGS += -DWIFI_DRIVER_MODULE_ARG=\"$(WIFI_DRIVER_MODULE_ARG)\"
endif
ifdef WIFI_DRIVER_MODULE_NAME
LOCAL_CFLAGS += -DWIFI_DRIVER_MODULE_NAME=\"$(WIFI_DRIVER_MODULE_NAME)\"
endif
LOCAL_SRC_FILES := qsap_api.c \ LOCAL_SRC_FILES := qsap_api.c \
qsap.c qsap.c

View File

@@ -58,6 +58,32 @@
#include <sys/system_properties.h> #include <sys/system_properties.h>
#ifndef WIFI_DRIVER_MODULE_PATH
#define WIFI_DRIVER_MODULE_PATH "/system/lib/modules/wlan.ko"
#endif
#ifndef WIFI_DRIVER_MODULE_NAME
#define WIFI_DRIVER_MODULE_NAME "wlan"
#endif
#ifndef WIFI_SDIO_IF_DRIVER_MODULE_PATH
#define WIFI_SDIO_IF_DRIVER_MODULE_PATH "/system/lib/modules/librasdioif.ko"
#endif
#ifndef WIFI_SDIO_IF_DRIVER_MODULE_NAME
#define WIFI_SDIO_IF_DRIVER_MODULE_NAME "librasdioif"
#endif
#ifndef WIFI_SDIO_IF_DRIVER_MODULE_ARG
#define WIFI_SDIO_IF_DRIVER_MODULE_ARG ""
#endif
#ifdef WIFI_DRIVER_MODULE_ARG
#undef WIFI_DRIVER_MODULE_ARG
#endif
#define WIFI_DRIVER_MODULE_ARG "con_mode=1"
extern int init_module(const char *name, u32, const s8 *); extern int init_module(const char *name, u32, const s8 *);
extern int delete_module(const char *name, int); extern int delete_module(const char *name, int);
@@ -161,15 +187,7 @@ s32 wifi_qsap_load_driver(void)
LOGE("Could not turn on the polling..."); LOGE("Could not turn on the polling...");
} }
#define SDIO_IF_DRV "/system/lib/modules/librasdioif.ko" ret = insmod(WIFI_SDIO_IF_DRIVER_MODULE_PATH, WIFI_SDIO_IF_DRIVER_MODULE_ARG, WIFI_SDIO_IF_DRIVER_MODULE_NAME " ");
#define SDIO_IF_DRV_ARG ""
#define SDIO_IF_DRV_TAG "librasdioif"
#define SOFTAP_DRV "/system/lib/modules/libra.ko"
#define SOFTAP_DRV_ARG "con_mode=1"
#define SOFTAP_DRV_TAG "libra"
ret = insmod(SDIO_IF_DRV, SDIO_IF_DRV_ARG, SDIO_IF_DRV_TAG " ");
if ( ret != 0 ) { if ( ret != 0 ) {
LOGE("init_module failed sdioif\n"); LOGE("init_module failed sdioif\n");
@@ -178,7 +196,7 @@ s32 wifi_qsap_load_driver(void)
sched_yield(); sched_yield();
ret = insmod(SOFTAP_DRV, SOFTAP_DRV_ARG, SOFTAP_DRV_TAG " "); ret = insmod(WIFI_DRIVER_MODULE_PATH, WIFI_DRIVER_MODULE_ARG, WIFI_DRIVER_MODULE_NAME " ");
if ( ret != 0 ) { if ( ret != 0 ) {
LOGE("init_module failed libra_softap\n"); LOGE("init_module failed libra_softap\n");
@@ -202,8 +220,8 @@ s32 wifi_qsap_unload_wifi_sta_driver(void)
LOGE("Could not turn on the polling..."); LOGE("Could not turn on the polling...");
} }
if ( check_driver_loaded(SOFTAP_DRV_TAG " ") ) { if ( check_driver_loaded(WIFI_DRIVER_MODULE_NAME " ") ) {
if ( rmmod(SOFTAP_DRV_TAG) ) { if ( rmmod(WIFI_DRIVER_MODULE_NAME) ) {
LOGE("Unable to unload the station mode wifi driver...\n"); LOGE("Unable to unload the station mode wifi driver...\n");
ret = 1; ret = 1;
goto end; goto end;
@@ -212,8 +230,8 @@ s32 wifi_qsap_unload_wifi_sta_driver(void)
sched_yield(); sched_yield();
if ( check_driver_loaded(SDIO_IF_DRV_TAG " ") ) { if ( check_driver_loaded(WIFI_SDIO_IF_DRIVER_MODULE_NAME " ") ) {
if ( rmmod(SDIO_IF_DRV_TAG) ) { if ( rmmod(WIFI_SDIO_IF_DRIVER_MODULE_NAME) ) {
LOGE("Unable to unload the station mode librasdioif driver\n"); LOGE("Unable to unload the station mode librasdioif driver\n");
ret = 1; ret = 1;
goto end; goto end;
@@ -236,8 +254,8 @@ s32 wifi_qsap_unload_driver()
LOGE("Could not turn on the polling..."); LOGE("Could not turn on the polling...");
} }
if ( check_driver_loaded(SOFTAP_DRV_TAG " ") ) { if ( check_driver_loaded(WIFI_DRIVER_MODULE_NAME " ") ) {
if ( rmmod(SOFTAP_DRV_TAG) ) { if ( rmmod(WIFI_DRIVER_MODULE_NAME) ) {
LOGE("Unable to unload the libra_softap driver\n"); LOGE("Unable to unload the libra_softap driver\n");
ret = 1; ret = 1;
goto end; goto end;
@@ -246,8 +264,8 @@ s32 wifi_qsap_unload_driver()
sched_yield(); sched_yield();
if ( check_driver_loaded(SDIO_IF_DRV_TAG " ") ) { if ( check_driver_loaded(WIFI_SDIO_IF_DRIVER_MODULE_NAME " ") ) {
if ( rmmod(SDIO_IF_DRV_TAG) ) { if ( rmmod(WIFI_SDIO_IF_DRIVER_MODULE_NAME) ) {
LOGE("Unable to unload the librasdioif driver\n"); LOGE("Unable to unload the librasdioif driver\n");
ret = 1; ret = 1;
goto end; goto end;
@@ -334,11 +352,15 @@ s32 commit(void)
LOGE("%s: stop bss failed \n", __func__); LOGE("%s: stop bss failed \n", __func__);
return ret; return ret;
} }
sleep(1);
} }
sleep(1); ret = wifi_qsap_start_softap();
return wifi_qsap_start_softap(); if( eSUCCESS != ret )
wifi_qsap_unload_driver();
return ret;
#else #else
return eSUCCESS; return eSUCCESS;
#endif #endif
@@ -407,6 +429,7 @@ s32 wifi_qsap_reload_softap()
sleep(1); sleep(1);
if (eSUCCESS != wifi_qsap_start_softap()) { if (eSUCCESS != wifi_qsap_start_softap()) {
wifi_qsap_unload_driver();
return ret; return ret;
} }

View File

@@ -54,7 +54,6 @@
#include "cutils/properties.h" #include "cutils/properties.h"
#include "cutils/log.h" #include "cutils/log.h"
#define SKIP_BLANK_SPACE(x) {while(*x != '\0') { if((*x == ' ') || (*x == '\t')) x++; else break; }} #define SKIP_BLANK_SPACE(x) {while(*x != '\0') { if((*x == ' ') || (*x == '\t')) x++; else break; }}
/** If this variable is enabled, the soft AP is reloaded, after the commit /** If this variable is enabled, the soft AP is reloaded, after the commit
@@ -175,9 +174,10 @@ char *fIni = INI_FILE;
* @param plen [IN-OUT] The length of the buffer is provided as input. * @param plen [IN-OUT] The length of the buffer is provided as input.
* The length of the configuration parameter value, stored * The length of the configuration parameter value, stored
* in the 'presp', is provided as the output * in the 'presp', is provided as the output
* @param ignore_comment [IN] if set, read the commented value also
* @return void * @return void
*/ */
static s32 qsap_read_cfg(s8 *pfile, s8 *pcmd, s8 *presp, u32 *plen, s8 *var) static s32 qsap_read_cfg(s8 *pfile, s8 *pcmd, s8 *presp, u32 *plen, s8 *var, s32 ignore_comment)
{ {
FILE *fcfg; FILE *fcfg;
s8 buf[MAX_CONF_LINE_LEN]; s8 buf[MAX_CONF_LINE_LEN];
@@ -200,7 +200,10 @@ static s32 qsap_read_cfg(s8 *pfile, s8 *pcmd, s8 *presp, u32 *plen, s8 *var)
/** Skip the commented lines */ /** Skip the commented lines */
if(buf[0] == '#') { if(buf[0] == '#') {
continue; if (ignore_comment) {
pline++;
}
else continue;
} }
/** Identify the configuration parameter in the configuration file */ /** Identify the configuration parameter in the configuration file */
@@ -256,8 +259,12 @@ static s32 qsap_write_cfg(s8 *pfile, s8 * pcmd, s8 *pVal, s8 *presp, u32 *plen,
return eERR_FILE_OPEN; return eERR_FILE_OPEN;
} }
if(MAX_CONF_LINE_LEN == snprintf(buf, MAX_CONF_LINE_LEN, "%s~", pfile)) {
buf[MAX_CONF_LINE_LEN] = '\0';
}
/** Open a temporary file */ /** Open a temporary file */
ftmp = fopen(TMP_FILE, "w"); ftmp = fopen(buf, "w+");
if(NULL == ftmp) { if(NULL == ftmp) {
LOGE("%s : unable to open tmp file \n", __func__); LOGE("%s : unable to open tmp file \n", __func__);
*plen = snprintf(presp, *plen, "%s", ERR_RES_UNAVAILABLE); *plen = snprintf(presp, *plen, "%s", ERR_RES_UNAVAILABLE);
@@ -307,13 +314,17 @@ static s32 qsap_write_cfg(s8 *pfile, s8 * pcmd, s8 *pVal, s8 *presp, u32 *plen,
fclose(fcfg); fclose(fcfg);
fclose(ftmp); fclose(ftmp);
if(MAX_CONF_LINE_LEN == snprintf(buf, MAX_CONF_LINE_LEN, "%s~", pfile)) {
buf[MAX_CONF_LINE_LEN] = '\0';
}
/** Restore the updated configuration file */ /** Restore the updated configuration file */
result = rename(TMP_FILE, pfile); result = rename(buf, pfile);
*plen = snprintf(presp, *plen, "%s", (result == eERR_UNKNOWN) ? ERR_FEATURE_NOT_ENABLED : SUCCESS); *plen = snprintf(presp, *plen, "%s", (result == eERR_UNKNOWN) ? ERR_FEATURE_NOT_ENABLED : SUCCESS);
/** Remove the temporary file. Dont care the return value */ /** Remove the temporary file. Dont care the return value */
unlink(TMP_FILE); unlink(buf);
if(result == eERR_UNKNOWN) if(result == eERR_UNKNOWN)
return eERR_FEATURE_NOT_ENABLED; return eERR_FEATURE_NOT_ENABLED;
@@ -336,7 +347,7 @@ static sec_mode_t qsap_read_security_mode(s8 *pfile, s8 *presp, u32 *plen)
u32 temp = *plen; u32 temp = *plen;
/** Read the WEP default key */ /** Read the WEP default key */
qsap_read_cfg(pfile, cmd_list[eCMD_DEFAULT_KEY], presp, plen, NULL); qsap_read_cfg(pfile, cmd_list[eCMD_DEFAULT_KEY], presp, plen, NULL, GET_ENABLED_ONLY);
if ( !strcmp(presp, ERR_FEATURE_NOT_ENABLED) ) { if ( !strcmp(presp, ERR_FEATURE_NOT_ENABLED) ) {
*plen = temp; *plen = temp;
@@ -344,7 +355,7 @@ static sec_mode_t qsap_read_security_mode(s8 *pfile, s8 *presp, u32 *plen)
/* WEP, is not enabled */ /* WEP, is not enabled */
/** Read WPA security status */ /** Read WPA security status */
qsap_read_cfg(pfile, qsap_str[STR_WPA], presp, plen, NULL); qsap_read_cfg(pfile, qsap_str[STR_WPA], presp, plen, NULL, GET_ENABLED_ONLY);
if ( !strcmp(presp, ERR_FEATURE_NOT_ENABLED) ) { if ( !strcmp(presp, ERR_FEATURE_NOT_ENABLED) ) {
/** WPA is disabled, No security */ /** WPA is disabled, No security */
mode = SEC_MODE_NONE; mode = SEC_MODE_NONE;
@@ -362,7 +373,7 @@ static sec_mode_t qsap_read_security_mode(s8 *pfile, s8 *presp, u32 *plen)
else { else {
/** Verify if, WPA is disabled */ /** Verify if, WPA is disabled */
*plen = temp; *plen = temp;
qsap_read_cfg(pfile, qsap_str[STR_WPA], presp, plen, NULL); qsap_read_cfg(pfile, qsap_str[STR_WPA], presp, plen, NULL, GET_ENABLED_ONLY);
if ( !strcmp(presp, ERR_FEATURE_NOT_ENABLED) ) { if ( !strcmp(presp, ERR_FEATURE_NOT_ENABLED) ) {
/** WPA is disabled, hence WEP is enabled */ /** WPA is disabled, hence WEP is enabled */
mode = SEC_MODE_WEP; mode = SEC_MODE_WEP;
@@ -404,9 +415,13 @@ static s32 qsap_change_cfg(s8 *pfile, s8 *pcmd, u32 status)
LOGE("%s : unable to open file \n", __func__); LOGE("%s : unable to open file \n", __func__);
return eERR_UNKNOWN; return eERR_UNKNOWN;
} }
if(MAX_CONF_LINE_LEN == snprintf(buf, MAX_CONF_LINE_LEN, "%s~", pfile)) {
buf[MAX_CONF_LINE_LEN] = '\0';
}
/** Open a temporary file */ /** Open a temporary file */
ftmp = fopen(TMP_FILE, "w"); ftmp = fopen(buf, "w");
if(NULL == ftmp) { if(NULL == ftmp) {
LOGE("%s : unable to open tmp file \n", __func__); LOGE("%s : unable to open tmp file \n", __func__);
fclose(fcfg); fclose(fcfg);
@@ -440,14 +455,18 @@ static s32 qsap_change_cfg(s8 *pfile, s8 *pcmd, u32 status)
fclose(fcfg); fclose(fcfg);
fclose(ftmp); fclose(ftmp);
if(MAX_CONF_LINE_LEN == snprintf(buf, MAX_CONF_LINE_LEN, "%s~", pfile)) {
buf[MAX_CONF_LINE_LEN] = '\0';
}
/** Restore the new configuration file */ /** Restore the new configuration file */
if(eERR_UNKNOWN == rename(TMP_FILE, pfile)) { if(eERR_UNKNOWN == rename(buf, pfile)) {
LOGE("unable to rename the file \n"); LOGE("unable to rename the file \n");
return eERR_UNKNOWN; return eERR_UNKNOWN;
} }
/** Delete the temporary file */ /** Delete the temporary file */
unlink(TMP_FILE); unlink(buf);
return 0; return 0;
} }
@@ -600,7 +619,7 @@ end:
*/ */
static s8 *qsap_get_allow_deny_file_name(s8 *pcfgfile, s8 *pcmd, s8 *pfile, u32 *plen) static s8 *qsap_get_allow_deny_file_name(s8 *pcfgfile, s8 *pcmd, s8 *pfile, u32 *plen)
{ {
if(eSUCCESS == qsap_read_cfg(pcfgfile, pcmd, pfile, plen, NULL)) { if(eSUCCESS == qsap_read_cfg(pcfgfile, pcmd, pfile, plen, NULL, GET_ENABLED_ONLY)) {
pfile[*plen] = '\0'; pfile[*plen] = '\0';
return strchr(pfile, '=') + 1; return strchr(pfile, '=') + 1;
} }
@@ -665,18 +684,18 @@ static void qsap_add_mac_to_file(s8 *pfile, s8 *pVal, s8 *presp, u32 *plen)
fclose(fp); fclose(fp);
fp = fopen(pfile, "r+"); fp = fopen(pfile, "r+");
} }
if(NULL == fp) { if(NULL == fp) {
LOGE("%s : unable to open the file \n", __func__); LOGE("%s : unable to open the file \n", __func__);
*plen = snprintf(presp, *plen, "%s", ERR_RES_UNAVAILABLE); *plen = snprintf(presp, *plen, "%s", ERR_RES_UNAVAILABLE);
return; return;
} }
/** count the MAC address in the MAC list file */ /** count the MAC address in the MAC list file */
while(NULL != (fgets(buf, 32, fp))) { while(NULL != (fgets(buf, 32, fp))) {
num_macs++; num_macs++;
} }
/** Evaluate the allowed limit */ /** Evaluate the allowed limit */
if(num_macs >= MAX_ALLOWED_MAC) { if(num_macs >= MAX_ALLOWED_MAC) {
LOGE("%s : File is full\n", __func__); LOGE("%s : File is full\n", __func__);
@@ -695,7 +714,7 @@ static void qsap_add_mac_to_file(s8 *pfile, s8 *pVal, s8 *presp, u32 *plen)
macbuf[i] = *pVal; macbuf[i] = *pVal;
i++; i++;
pVal++; pVal++;
if(i == MAC_ADDR_LEN) if(i == MAC_ADDR_LEN)
break; break;
} }
@@ -724,7 +743,7 @@ static void qsap_add_mac_to_file(s8 *pfile, s8 *pVal, s8 *presp, u32 *plen)
fclose(fp); fclose(fp);
*plen = snprintf(presp, *plen, "%s", SUCCESS); *plen = snprintf(presp, *plen, "%s", SUCCESS);
return; return;
} }
@@ -755,8 +774,12 @@ static void qsap_remove_from_file(s8 *pfile, s8 *pVal, s8 *presp, u32 *plen)
return; return;
} }
if(MAX_CONF_LINE_LEN == snprintf(buf, MAX_CONF_LINE_LEN, "%s~", pfile)) {
buf[MAX_CONF_LINE_LEN] = '\0';
}
/** Open a temporary file */ /** Open a temporary file */
ftmp = fopen(TMP_FILE, "w"); ftmp = fopen(buf, "w");
if(ftmp == NULL) { if(ftmp == NULL) {
LOGE("%s : unable to open the file \n", __func__); LOGE("%s : unable to open the file \n", __func__);
@@ -803,12 +826,16 @@ static void qsap_remove_from_file(s8 *pfile, s8 *pVal, s8 *presp, u32 *plen)
fclose(fp); fclose(fp);
fclose(ftmp); fclose(ftmp);
if(MAX_CONF_LINE_LEN == snprintf(buf, MAX_CONF_LINE_LEN, "%s~", pfile)) {
buf[MAX_CONF_LINE_LEN] = '\0';
}
/** Restore the configuration file */ /** Restore the configuration file */
status = rename(TMP_FILE, pfile); status = rename(buf, pfile);
snprintf(presp, *plen, "%s", (status == eERR_UNKNOWN) ? ERR_FEATURE_NOT_ENABLED : SUCCESS); snprintf(presp, *plen, "%s", (status == eERR_UNKNOWN) ? ERR_FEATURE_NOT_ENABLED : SUCCESS);
unlink(TMP_FILE); unlink(buf);
return; return;
} }
@@ -881,7 +908,7 @@ static void qsap_get_mac_list(s8 *fconfile, esap_cmd_t cNum, s8 *presp, u32 *ple
/** Identify the allow or deny file */ /** Identify the allow or deny file */
if(eCMD_ALLOW_LIST == cNum) { if(eCMD_ALLOW_LIST == cNum) {
sNum = STR_ACCEPT_MAC_FILE; sNum = STR_ACCEPT_MAC_FILE;
} }
else if(eCMD_DENY_LIST == cNum) { else if(eCMD_DENY_LIST == cNum) {
sNum = STR_DENY_MAC_FILE; sNum = STR_DENY_MAC_FILE;
@@ -891,7 +918,7 @@ static void qsap_get_mac_list(s8 *fconfile, esap_cmd_t cNum, s8 *presp, u32 *ple
return; return;
} }
/** Get the MAC allow or MAC deny file path */ /** Get the MAC allow or MAC deny file path */
len_remain = MAX_CONF_LINE_LEN; len_remain = MAX_CONF_LINE_LEN;
if(NULL == (pfile = qsap_get_allow_deny_file_name(fconfile, qsap_str[sNum], buf, &len_remain))) { if(NULL == (pfile = qsap_get_allow_deny_file_name(fconfile, qsap_str[sNum], buf, &len_remain))) {
LOGE("%s:Unknown error\n", __func__); LOGE("%s:Unknown error\n", __func__);
@@ -899,7 +926,7 @@ static void qsap_get_mac_list(s8 *fconfile, esap_cmd_t cNum, s8 *presp, u32 *ple
return; return;
} }
/** Open allow / deny file, and read the MAC addresses */ /** Open allow / deny file, and read the MAC addresses */
fp = fopen(pfile, "r"); fp = fopen(pfile, "r");
if(NULL == fp) { if(NULL == fp) {
LOGE("%s: file open error\n",__func__); LOGE("%s: file open error\n",__func__);
@@ -920,7 +947,7 @@ static void qsap_get_mac_list(s8 *fconfile, esap_cmd_t cNum, s8 *presp, u32 *ple
while(NULL != (fgets(buf, MAX_CONF_LINE_LEN, fp))) { while(NULL != (fgets(buf, MAX_CONF_LINE_LEN, fp))) {
u32 len; u32 len;
/** Avoid the commented lines */ /** Avoid the commented lines */
if(buf[0] == '#') if(buf[0] == '#')
continue; continue;
@@ -933,7 +960,7 @@ static void qsap_get_mac_list(s8 *fconfile, esap_cmd_t cNum, s8 *presp, u32 *ple
*pOut = '\0'; *pOut = '\0';
break; break;
} }
len = snprintf(pOut, *plen, "%s ", buf); len = snprintf(pOut, *plen, "%s ", buf);
cnt++; cnt++;
@@ -961,7 +988,7 @@ static int qsap_read_mac_address(s8 *presp, u32 *plen)
len = *plen; len = *plen;
if(eSUCCESS != qsap_read_cfg(fIni, qsap_str[STR_MAC_IN_INI], presp, plen, cmd_list[eCMD_MAC_ADDR])) { if(eSUCCESS != qsap_read_cfg(fIni, qsap_str[STR_MAC_IN_INI], presp, plen, cmd_list[eCMD_MAC_ADDR], GET_ENABLED_ONLY)) {
LOGE("%s :MAC addr read failure \n",__func__); LOGE("%s :MAC addr read failure \n",__func__);
goto end; goto end;
} }
@@ -1007,7 +1034,7 @@ static void qsap_read_wmm(s8 *presp, u32 *plen)
u32 tlen = *plen; u32 tlen = *plen;
u32 status; u32 status;
if(eSUCCESS != qsap_read_cfg(fIni, qsap_str[STR_WMM_IN_INI], presp, &tlen, cmd_list[eCMD_WMM_STATE])) { if(eSUCCESS != qsap_read_cfg(fIni, qsap_str[STR_WMM_IN_INI], presp, &tlen, cmd_list[eCMD_WMM_STATE], GET_ENABLED_ONLY)) {
*plen = snprintf(presp, *plen, "%s", ERR_NOT_SUPPORTED); *plen = snprintf(presp, *plen, "%s", ERR_NOT_SUPPORTED);
return; return;
} }
@@ -1030,27 +1057,11 @@ static void qsap_read_wmm(s8 *presp, u32 *plen)
return; return;
} }
static void qsap_read_wps_state(s8 *presp, u32 *plen)
{
u32 tlen = *plen;
s32 status = ENABLE;
if(eSUCCESS != qsap_read_cfg(pconffile, cmd_list[eCMD_WPS_STATE], presp, &tlen, NULL)) {
/** unable to read the wps configuration, WPS is disabled !*/
LOGE("%s :Failed to read wps_state from cfg \n", __func__);
status = DISABLE;
}
*plen = snprintf(presp, *plen, "%s %s=%lu", SUCCESS, cmd_list[eCMD_WPS_STATE], status);
return;
}
s8 *qsap_get_config_value(s8 *pfile, s8 *pcmd, s8 *pbuf, u32 *plen) s8 *qsap_get_config_value(s8 *pfile, s8 *pcmd, s8 *pbuf, u32 *plen)
{ {
s8 *ptr = NULL; s8 *ptr = NULL;
if(eSUCCESS == qsap_read_cfg(pfile, pcmd, pbuf, (u32 *)plen, NULL)) { if(eSUCCESS == qsap_read_cfg(pfile, pcmd, pbuf, (u32 *)plen, NULL, GET_ENABLED_ONLY)) {
ptr = strchr(pbuf, '='); ptr = strchr(pbuf, '=');
if(NULL != ptr){ if(NULL != ptr){
ptr++; ptr++;
@@ -1063,6 +1074,26 @@ s8 *qsap_get_config_value(s8 *pfile, s8 *pcmd, s8 *pbuf, u32 *plen)
return ptr; return ptr;
} }
static void qsap_read_wps_state(s8 *presp, u32 *plen)
{
u32 tlen = *plen;
s32 status;
s8 *pstate;
if(NULL == (pstate = qsap_get_config_value(pconffile, cmd_list[eCMD_WPS_STATE], presp, &tlen))) {
/** unable to read the wps configuration, WPS is disabled !*/
LOGE("%s :Failed to read wps_state from cfg \n", __func__);
status = DISABLE;
}
else {
status = (atoi(pstate) == WPS_STATE_ENABLE) ? ENABLE : DISABLE;
}
*plen = snprintf(presp, *plen, "success %s=%ld", cmd_list[eCMD_WPS_STATE], status);
return;
}
/** /**
* Get the channel being used in the soft AP. * Get the channel being used in the soft AP.
*/ */
@@ -1118,9 +1149,9 @@ int qsap_read_channel(s8 *pfile, s8 *pcmd, s8 *presp, u32 *plen, s8 *pvar)
s32 chan; s32 chan;
u32 len = *plen; u32 len = *plen;
if(eSUCCESS == qsap_read_cfg(pfile, pcmd, presp, plen, pvar)) { if(eSUCCESS == qsap_read_cfg(pfile, pcmd, presp, plen, pvar, GET_ENABLED_ONLY)) {
pval = strchr(presp, '='); pval = strchr(presp, '=');
if(NULL == pval) { if(NULL == pval) {
LOGE("%s :CHAN absent \n", __func__); LOGE("%s :CHAN absent \n", __func__);
return eERR_CONFIG_PARAM_MISSING; return eERR_CONFIG_PARAM_MISSING;
@@ -1228,6 +1259,37 @@ error:
return; return;
} }
static void qsap_read_wep_key(s8 *pfile, s8 *pcmd, s8 *presp, u32 *plen, s8 *var)
{
s8 *pwep;
s8 *pkey;
if(eSUCCESS != qsap_read_cfg(pfile, pcmd, presp, plen, var, GET_COMMENTED_VALUE))
return;
pwep = strchr(presp, '=');
if(NULL == pwep)
return;
pwep++;
if(pwep[0] == '"') {
pkey = pwep;
pwep++;
while(*pwep != '\0') {
*pkey = *pwep;
pkey++;
pwep++;
}
*pkey--;
*pkey = '\0';
*plen -= 2;
}
return;
}
/** /**
* @brief * @brief
* Get the configuration information from the softAP configuration * Get the configuration information from the softAP configuration
@@ -1243,10 +1305,11 @@ error:
* [OUT] The length of the response in the buffer, presp * [OUT] The length of the response in the buffer, presp
* @return void * @return void
**/ **/
static void qsap_get_from_config(esap_cmd_t cNum, s8 *presp, u32 *plen) static void qsap_get_from_config(esap_cmd_t cNum, s8 *presp, u32 *plen)
{ {
u32 len; u32 len;
int status; int status;
s8 * pval;
switch(cNum) { switch(cNum) {
case eCMD_ENABLE_SOFTAP: case eCMD_ENABLE_SOFTAP:
@@ -1254,23 +1317,22 @@ static void qsap_get_from_config(esap_cmd_t cNum, s8 *presp, u32 *plen)
*plen = snprintf(presp, *plen, "%s %s=%d", SUCCESS, cmd_list[cNum], status); *plen = snprintf(presp, *plen, "%s %s=%d", SUCCESS, cmd_list[cNum], status);
break; break;
case eCMD_WPA_PAIRWISE:
case eCMD_RSN_PAIRWISE:
case eCMD_DEFAULT_KEY:
case eCMD_PASSPHRASE:
case eCMD_GTK_TIMEOUT:
qsap_read_cfg(pconffile, cmd_list[cNum], presp, plen, NULL, GET_COMMENTED_VALUE);
break;
case eCMD_SSID: case eCMD_SSID:
case eCMD_BSSID: case eCMD_BSSID:
case eCMD_BCN_INTERVAL: case eCMD_BCN_INTERVAL:
case eCMD_DTIM_PERIOD: case eCMD_DTIM_PERIOD:
case eCMD_HW_MODE: case eCMD_HW_MODE:
case eCMD_AUTH_ALGS: case eCMD_AUTH_ALGS:
case eCMD_WEP_KEY0:
case eCMD_WEP_KEY1:
case eCMD_WEP_KEY2:
case eCMD_WEP_KEY3:
case eCMD_DEFAULT_KEY:
case eCMD_PASSPHRASE:
case eCMD_WPA_PAIRWISE:
case eCMD_RSN_PAIRWISE:
case eCMD_MAC_ACL: case eCMD_MAC_ACL:
case eCMD_WPS_CONFIG_METHOD: case eCMD_WPS_CONFIG_METHOD:
case eCMD_GTK_TIMEOUT:
case eCMD_UUID: case eCMD_UUID:
case eCMD_DEVICE_NAME: case eCMD_DEVICE_NAME:
case eCMD_MANUFACTURER: case eCMD_MANUFACTURER:
@@ -1284,7 +1346,14 @@ static void qsap_get_from_config(esap_cmd_t cNum, s8 *presp, u32 *plen)
case eCMD_MODEL_DESC: case eCMD_MODEL_DESC:
case eCMD_MODEL_URL: case eCMD_MODEL_URL:
case eCMD_UPC: case eCMD_UPC:
qsap_read_cfg(pconffile, cmd_list[cNum], presp, plen, NULL); qsap_read_cfg(pconffile, cmd_list[cNum], presp, plen, NULL, GET_ENABLED_ONLY);
break;
case eCMD_WEP_KEY0:
case eCMD_WEP_KEY1:
case eCMD_WEP_KEY2:
case eCMD_WEP_KEY3:
qsap_read_wep_key(pconffile, cmd_list[cNum], presp, plen, NULL);
break; break;
case eCMD_CHAN: case eCMD_CHAN:
@@ -1292,15 +1361,15 @@ static void qsap_get_from_config(esap_cmd_t cNum, s8 *presp, u32 *plen)
break; break;
case eCMD_FRAG_THRESHOLD: case eCMD_FRAG_THRESHOLD:
qsap_read_cfg(fIni, qsap_str[STR_FRAG_THRESHOLD_IN_INI], presp, plen, cmd_list[eCMD_FRAG_THRESHOLD]); qsap_read_cfg(fIni, qsap_str[STR_FRAG_THRESHOLD_IN_INI], presp, plen, cmd_list[eCMD_FRAG_THRESHOLD], GET_ENABLED_ONLY);
break; break;
case eCMD_REGULATORY_DOMAIN: case eCMD_REGULATORY_DOMAIN:
qsap_read_cfg(fIni, qsap_str[STR_802DOT11D_IN_INI], presp, plen, cmd_list[eCMD_REGULATORY_DOMAIN]); qsap_read_cfg(fIni, qsap_str[STR_802DOT11D_IN_INI], presp, plen, cmd_list[eCMD_REGULATORY_DOMAIN], GET_ENABLED_ONLY);
break; break;
case eCMD_RTS_THRESHOLD: case eCMD_RTS_THRESHOLD:
qsap_read_cfg(fIni, qsap_str[STR_RTS_THRESHOLD_IN_INI], presp, plen, cmd_list[eCMD_RTS_THRESHOLD]); qsap_read_cfg(fIni, qsap_str[STR_RTS_THRESHOLD_IN_INI], presp, plen, cmd_list[eCMD_RTS_THRESHOLD], GET_ENABLED_ONLY);
break; break;
case eCMD_ALLOW_LIST: /* fall through */ case eCMD_ALLOW_LIST: /* fall through */
@@ -1327,11 +1396,11 @@ static void qsap_get_from_config(esap_cmd_t cNum, s8 *presp, u32 *plen)
break; break;
case eCMD_PROTECTION_FLAG: case eCMD_PROTECTION_FLAG:
qsap_read_cfg(fIni, qsap_str[STR_PROT_FLAG_IN_INI], presp, plen, cmd_list[eCMD_PROTECTION_FLAG]); qsap_read_cfg(fIni, qsap_str[STR_PROT_FLAG_IN_INI], presp, plen, cmd_list[eCMD_PROTECTION_FLAG], GET_ENABLED_ONLY);
break; break;
case eCMD_DATA_RATES: case eCMD_DATA_RATES:
qsap_read_cfg(fIni, qsap_str[STR_DATA_RATE_IN_INI], presp, plen, cmd_list[eCMD_DATA_RATES]); qsap_read_cfg(fIni, qsap_str[STR_DATA_RATE_IN_INI], presp, plen, cmd_list[eCMD_DATA_RATES], GET_ENABLED_ONLY);
break; break;
case eCMD_ASSOC_STA_MACS: case eCMD_ASSOC_STA_MACS:
@@ -1339,7 +1408,7 @@ static void qsap_get_from_config(esap_cmd_t cNum, s8 *presp, u32 *plen)
break; break;
case eCMD_TX_POWER: case eCMD_TX_POWER:
qsap_read_cfg(fIni, qsap_str[STR_TX_POWER_IN_INI], presp, plen, cmd_list[eCMD_TX_POWER]); qsap_read_cfg(fIni, qsap_str[STR_TX_POWER_IN_INI], presp, plen, cmd_list[eCMD_TX_POWER], GET_ENABLED_ONLY);
break; break;
case eCMD_SDK_VERSION: case eCMD_SDK_VERSION:
@@ -1347,11 +1416,17 @@ static void qsap_get_from_config(esap_cmd_t cNum, s8 *presp, u32 *plen)
break; break;
case eCMD_INTRA_BSS_FORWARD: case eCMD_INTRA_BSS_FORWARD:
qsap_read_cfg(fIni, qsap_str[STR_INTRA_BSS_FORWARD_IN_INI], presp, plen, cmd_list[eCMD_INTRA_BSS_FORWARD]); qsap_read_cfg(fIni, qsap_str[STR_INTRA_BSS_FORWARD_IN_INI], presp, plen, cmd_list[eCMD_INTRA_BSS_FORWARD], GET_ENABLED_ONLY);
pval = strchr(presp, '=');
if ( pval != NULL ) {
pval++;
*pval = *pval == '0' ? '1' : '0';
}
break; break;
case eCMD_COUNTRY_CODE: case eCMD_COUNTRY_CODE:
qsap_read_cfg(fIni, qsap_str[STR_COUNTRY_CODE_IN_INI], presp, plen, cmd_list[eCMD_COUNTRY_CODE]); qsap_read_cfg(fIni, qsap_str[STR_COUNTRY_CODE_IN_INI], presp, plen, cmd_list[eCMD_COUNTRY_CODE], GET_ENABLED_ONLY);
break; break;
default: default:
@@ -1435,25 +1510,38 @@ static void qsap_handle_get_request(s8 *pcmd, s8 *presp, u32 *plen)
qsap_get_from_config(cNum, presp, plen); qsap_get_from_config(cNum, presp, plen);
return; return;
} }
static s16 is_valid_wep_key(s8 *pwep) static s16 is_valid_wep_key(s8 *pwep, s8 *pkey, s16 len)
{ {
int weplen; int weplen;
s16 ret = TRUE; s16 ret = TRUE;
int ascii = FALSE;
weplen = strlen(pwep);
/** Remove the double quotes if any */
if((pwep[0] == '"') && (pwep[weplen-1] == '"')) {
pwep[weplen-1] = '\0';
pwep++;
weplen -= 2;
}
/** The WEP key should be of length 5, 13 or 16 characters /** The WEP key should be of length 5, 13 or 16 characters
* or 10, 26, or 32 digits */ * or 10, 26, or 32 digits */
weplen = strlen(pwep);
switch(weplen) { switch(weplen) {
case WEP_64_KEY_ASCII: case WEP_64_KEY_ASCII:
case WEP_128_KEY_ASCII: case WEP_128_KEY_ASCII:
case WEP_152_KEY_ASCII: case WEP_152_KEY_ASCII:
weplen--;
while(weplen--) { while(weplen--) {
if(0 == isascii(pwep[weplen])) if(0 == isascii(pwep[weplen])) {
LOGD("%c not ascii \n", pwep[weplen]);
return FALSE; return FALSE;
}
} }
ascii = TRUE;
break; break;
case WEP_64_KEY_HEX: case WEP_64_KEY_HEX:
@@ -1468,29 +1556,36 @@ static s16 is_valid_wep_key(s8 *pwep)
default: default:
ret = FALSE; ret = FALSE;
} }
snprintf(pkey, len, (ascii == TRUE) ? "\"%s\"" : "%s", pwep);
return ret; return ret;
} }
static s16 wifi_qsap_reset_to_default(void) static s16 wifi_qsap_reset_to_default(s8 *pcfgfile, s8 *pdefault)
{ {
FILE *fcfg, *ftmp; FILE *fcfg, *ftmp;
char buf[MAX_CONF_LINE_LEN]; char buf[MAX_CONF_LINE_LEN];
int status = eSUCCESS; int status = eSUCCESS;
fcfg = fopen(DEFAULT_CONFIG_FILE_PATH, "r"); fcfg = fopen(pdefault, "r");
if(NULL == fcfg) { if(NULL == fcfg) {
LOGE("%s : unable to open file \n", __func__); LOGE("%s : unable to open file \n", __func__);
return eERR_FILE_OPEN; return eERR_FILE_OPEN;
} }
ftmp = fopen(TMP_FILE, "w"); if(MAX_CONF_LINE_LEN == snprintf(buf, MAX_CONF_LINE_LEN, "%s~", pcfgfile)) {
buf[MAX_CONF_LINE_LEN] = '\0';
}
ftmp = fopen(buf, "w+");
if(NULL == ftmp) { if(NULL == ftmp) {
LOGE("%s : unable to open file \n", __func__); LOGE("%s : unable to open file \n", __func__);
fclose(fcfg); fclose(fcfg);
return eERR_FILE_OPEN; return eERR_FILE_OPEN;
} }
while(NULL != fgets(buf, MAX_CONF_LINE_LEN, fcfg)) { while(NULL != fgets(buf, MAX_CONF_LINE_LEN, fcfg)) {
fprintf(ftmp, "%s", buf); fprintf(ftmp, "%s", buf);
} }
@@ -1498,11 +1593,15 @@ static s16 wifi_qsap_reset_to_default(void)
fclose(fcfg); fclose(fcfg);
fclose(ftmp); fclose(ftmp);
if(eERR_UNKNOWN == rename(TMP_FILE, pconffile)) if(MAX_CONF_LINE_LEN == snprintf(buf, MAX_CONF_LINE_LEN, "%s~", pcfgfile)) {
buf[MAX_CONF_LINE_LEN] = '\0';
}
if(eERR_UNKNOWN == rename(buf, pcfgfile))
status = eERR_CONF_FILE; status = eERR_CONF_FILE;
/** Remove the temporary file. Dont care the return value */ /** Remove the temporary file. Dont care the return value */
unlink(TMP_FILE); unlink(buf);
return status; return status;
} }
@@ -1583,7 +1682,7 @@ static int qsap_send_cmd_to_hostapd(s8 *pcmd)
} }
len = RESP_BUF_SIZE; len = RESP_BUF_SIZE;
#define HOSTAPD_RECV_TIMEOUT (2) #define HOSTAPD_RECV_TIMEOUT (2)
while(1) { while(1) {
timeout.tv_sec = HOSTAPD_RECV_TIMEOUT; timeout.tv_sec = HOSTAPD_RECV_TIMEOUT;
@@ -1639,28 +1738,25 @@ static void qsap_update_wps_config(s8 *pVal, s8 *presp, u32 *plen)
{ {
u32 tlen = *plen; u32 tlen = *plen;
s32 status; s32 status;
s8 pwps_state[8]; s8 pwps_state[MAX_INT_STR+1];
s32 cmd, i; s32 i;
/* Enable/disable the following in hostapd.conf /* Enable/disable the following in hostapd.conf
* 1. Change the security mode to WPA-WPA2 Mixed * 1. Update the wps_state
* 2. Update wps_state * 2. Set eap_server=1
* 3. Update config_methods * 3. Update UPnP related variables
* 4. Update UPnP related variables
*/ */
status = atoi(pVal); status = atoi(pVal);
if(status == ENABLE) { snprintf(pwps_state, MAX_INT_STR, "%d", (status == ENABLE) ? WPS_STATE_ENABLE : WPS_STATE_DISABLE);
snprintf(pwps_state, 8, "%d", WPS_STATE_ENABLE);
cmd = SEC_MODE_WPA_WPA2_PSK;
}
else {
snprintf(pwps_state, 8, "%d", WPS_STATE_DISABLE);
cmd = SEC_MODE_NONE;
}
qsap_write_cfg(pconffile, cmd_list[eCMD_WPS_STATE], pwps_state, presp, &tlen, HOSTAPD_CONF_FILE); qsap_write_cfg(pconffile, cmd_list[eCMD_WPS_STATE], pwps_state, presp, &tlen, HOSTAPD_CONF_FILE);
if(eERR_UNKNOWN == qsap_change_cfg(pconffile, cmd_list[eCMD_WPS_STATE], status)) {
LOGE("%s: Failed to enable %s\n", __func__, cmd_list[eCMD_WPS_STATE]);
goto error;
}
snprintf(pwps_state, 8, "%d", ENABLE); snprintf(pwps_state, 8, "%d", ENABLE);
/** update the eap_server=1 */ /** update the eap_server=1 */
@@ -2068,7 +2164,7 @@ static void qsap_handle_set_request(s8 *pcmd, s8 *presp, u32 *plen)
qsap_write_cfg(pconffile, cmd_list[cNum], pVal, presp, plen, HOSTAPD_CONF_FILE); qsap_write_cfg(pconffile, cmd_list[cNum], pVal, presp, plen, HOSTAPD_CONF_FILE);
} }
else { else {
goto error; goto error;
} }
} }
else { else {
@@ -2102,6 +2198,8 @@ static void qsap_handle_set_request(s8 *pcmd, s8 *presp, u32 *plen)
status = wifi_qsap_load_driver(); status = wifi_qsap_load_driver();
if(status == eSUCCESS) if(status == eSUCCESS)
status = wifi_qsap_start_softap(); status = wifi_qsap_start_softap();
if (status != eSUCCESS)
wifi_qsap_unload_driver();
} }
*plen = snprintf(presp, *plen, "%s", (status==eSUCCESS) ? SUCCESS : "failure Could not enable softap"); *plen = snprintf(presp, *plen, "%s", (status==eSUCCESS) ? SUCCESS : "failure Could not enable softap");
return; return;
@@ -2167,7 +2265,6 @@ static void qsap_handle_set_request(s8 *pcmd, s8 *presp, u32 *plen)
} }
} }
/** TODO: Modify the channel number based on the mode */
if(status == FALSE) if(status == FALSE)
goto error; goto error;
@@ -2201,7 +2298,7 @@ static void qsap_handle_set_request(s8 *pcmd, s8 *presp, u32 *plen)
ulen = MAX_FILE_PATH_LEN; ulen = MAX_FILE_PATH_LEN;
if(SEC_MODE_WEP != qsap_read_security_mode(pcfg, filename, &ulen)) { if(SEC_MODE_WEP != qsap_read_security_mode(pcfg, filename, &ulen)) {
if(eERR_UNKNOWN == qsap_change_cfg(pcfg, cmd_list[cNum], 0)) { if(eERR_UNKNOWN == qsap_change_cfg(pcfg, cmd_list[cNum], 0)) {
LOGE("%s: CMD_WEP_KEY0 \n", __func__); LOGE("%s: eCMD_DEFAULT_KEY \n", __func__);
goto error; goto error;
} }
} }
@@ -2230,10 +2327,10 @@ static void qsap_handle_set_request(s8 *pcmd, s8 *presp, u32 *plen)
case eCMD_WEP_KEY1: case eCMD_WEP_KEY1:
case eCMD_WEP_KEY2: case eCMD_WEP_KEY2:
case eCMD_WEP_KEY3: case eCMD_WEP_KEY3:
if(FALSE == is_valid_wep_key(pVal)) if(FALSE == is_valid_wep_key(pVal, filename, MAX_FILE_PATH_LEN))
goto error; goto error;
qsap_write_cfg(pcfg, cmd_list[cNum], pVal, presp, plen, ini); qsap_write_cfg(pcfg, cmd_list[cNum], filename, presp, plen, ini);
/** if the security mode is not WEP, update the WEP features, and /** if the security mode is not WEP, update the WEP features, and
do NOT set the WEP security */ do NOT set the WEP security */
@@ -2252,8 +2349,11 @@ static void qsap_handle_set_request(s8 *pcmd, s8 *presp, u32 *plen)
LOGE("Reset :%ld \n", value); LOGE("Reset :%ld \n", value);
if(SAP_RESET_BSS == value) { if(SAP_RESET_BSS == value) {
status = wifi_qsap_stop_softap(); status = wifi_qsap_stop_softap();
if(status == eSUCCESS) if(status == eSUCCESS) {
wifi_qsap_start_softap(); status = wifi_qsap_start_softap();
if (eSUCCESS != status)
wifi_qsap_unload_driver();
}
} }
else if(SAP_RESET_DRIVER_BSS == value){ else if(SAP_RESET_DRIVER_BSS == value){
status = wifi_qsap_reload_softap(); status = wifi_qsap_reload_softap();
@@ -2277,8 +2377,12 @@ static void qsap_handle_set_request(s8 *pcmd, s8 *presp, u32 *plen)
return; return;
case eCMD_RESET_TO_DEFAULT: case eCMD_RESET_TO_DEFAULT:
if(eSUCCESS == (status = wifi_qsap_reset_to_default())) if(eSUCCESS == (status = wifi_qsap_reset_to_default(pconffile, DEFAULT_CONFIG_FILE_PATH))) {
status = commit(); if(eSUCCESS == (status = wifi_qsap_reset_to_default(fIni, DEFAULT_INI_FILE))) {
gIniUpdated = 1;
status = commit();
}
}
*plen = snprintf(presp, *plen, "%s", (status == eSUCCESS) ? SUCCESS : ERR_UNKNOWN); *plen = snprintf(presp, *plen, "%s", (status == eSUCCESS) ? SUCCESS : ERR_UNKNOWN);
return; return;
@@ -2447,11 +2551,11 @@ static void qsap_handle_set_request(s8 *pcmd, s8 *presp, u32 *plen)
if(TRUE != IS_VALID_INTRA_BSS_STATUS(value)) if(TRUE != IS_VALID_INTRA_BSS_STATUS(value))
goto error; goto error;
snprintf(pVal, MAX_INT_STR, "%ld", value); snprintf(pVal, MAX_INT_STR, "%d", value ? 0 : 1);
cNum = STR_INTRA_BSS_FORWARD_IN_INI; cNum = STR_INTRA_BSS_FORWARD_IN_INI;
ini = INI_CONF_FILE; ini = INI_CONF_FILE;
break; break;
case eCMD_COUNTRY_CODE: case eCMD_COUNTRY_CODE:
cNum = STR_COUNTRY_CODE_IN_INI; cNum = STR_COUNTRY_CODE_IN_INI;
ini = INI_CONF_FILE; ini = INI_CONF_FILE;

View File

@@ -76,19 +76,19 @@ enum error_val {
#define QSAP_SDK_VERSION "1.0" #define QSAP_SDK_VERSION "1.0"
/** Configuration file name */ /** Configuration file name */
#define CONFIG_FILE "/system/lib/modules/hostapd.conf" #define CONFIG_FILE "/data/hostapd/hostapd.conf"
/** Default configuration file path */ /** Default configuration file path */
#define DEFAULT_CONFIG_FILE_PATH "/system/lib/modules/hostapd_default.conf" #define DEFAULT_CONFIG_FILE_PATH "/persist/qcom/softap/hostapd_default.conf"
/** Ini file */ /** Ini file */
#define INI_FILE "/system/etc/firmware/wlan/qcom_cfg.ini" #define INI_FILE "/system/etc/firmware/wlan/qcom_cfg.ini"
/** Temporary file name */ /** Default Ini file */
#define TMP_FILE "/system/lib/modules/tmp.qcsoftap.conf" #define DEFAULT_INI_FILE "/persist/qcom/softap/qcom_cfg_default.ini"
/** SDK control interface path */ /** SDK control interface path */
#define SDK_CTRL_IF "/system/lib/modules/softap_sdk_ctrl" #define SDK_CTRL_IF "/data/hostapd/softap_sdk_ctrl"
/** Maximum length of the line in the configuration file */ /** Maximum length of the line in the configuration file */
#define MAX_CONF_LINE_LEN (156) #define MAX_CONF_LINE_LEN (156)
@@ -203,6 +203,10 @@ enum error_val {
#define B_MODE_MAX_DATA_RATE_IDX (4) #define B_MODE_MAX_DATA_RATE_IDX (4)
#define G_ONLY_MODE_MAX_DATA_RATE_IDX (12) #define G_ONLY_MODE_MAX_DATA_RATE_IDX (12)
/** parameters for read config */
#define GET_COMMENTED_VALUE 1
#define GET_ENABLED_ONLY 0
/** command request index - in the array Cmd_req[] */ /** command request index - in the array Cmd_req[] */
enum eCmd_req { enum eCmd_req {
eCMD_GET = 0, eCMD_GET = 0,