qsap: Modify qsapsetSoftap API to set dual2g/5g configurations.

This enhances qsapsetSoftap to take arguments for dual2g and dual5g
configurations while maintaining backward compatibility to set
config file in case of standalone sap.

Additionally enhance 'set' command to configure ssid2 and bridge
parameters which are needed for dual2g/dual5g. Also when setting
ssid2, disable ssid in config files (or vice-versa).

CRs-Fixed: 2080924
Change-Id: I60bf62e6b2ad0cde3ebdfff4814f2ab98aa24b92
This commit is contained in:
Purushottam Kushwaha
2017-07-21 22:03:58 +05:30
committed by Gerrit - the friendly Code Review server
parent a21d26579d
commit a7c3aa8a21
2 changed files with 54 additions and 22 deletions

View File

@@ -176,6 +176,8 @@ static struct Command cmd_list[eCMD_LAST] = {
{ "ieee80211h", NULL },
{ "enable_wigig_softap", NULL },
{ "interface", NULL },
{ "ssid2", NULL },
{ "bridge", NULL },
};
struct Command qsap_str[eSTR_LAST] = {
@@ -2432,6 +2434,7 @@ static int qsap_set_operating_mode(s32 mode, s8 *pmode, int pmode_len, s8 *tbuf,
qsap_change_cfg(pcfg, &cmd_list[eCMD_REQUIRE_HT],ENABLE);
/* fall through */
case HW_MODE_N:
case HW_MODE_G:
case HW_MODE_A:
ulen = *tlen;
qsap_write_cfg(pcfg, &cmd_list[eCMD_IEEE80211N],ieee11n_enable, tbuf, &ulen, HOSTAPD_CONF_QCOM_FILE);
@@ -2662,6 +2665,8 @@ static void qsap_handle_set_request(s8 *pcmd, s8 *presp, u32 *plen)
value = strlen(pVal);
if(SSD_MAX_LEN < value)
goto error;
/* Disable ssid2 while setting ssid */
qsap_change_cfg(pcfg, &cmd_list[eCMD_SSID2], DISABLE);
break;
case eCMD_SET_MAX_CLIENTS:
@@ -3051,6 +3056,10 @@ static void qsap_handle_set_request(s8 *pcmd, s8 *presp, u32 *plen)
*plen = qsap_scnprintf(presp, *plen, "%s", (value == eSUCCESS) ? SUCCESS :
ERR_UNKNOWN);
return;
case eCMD_SSID2:
/* Disable ssid while setting ssid2 */
qsap_change_cfg(pcfg, &cmd_list[eCMD_SSID], DISABLE);
break;
default: ;
/** Do not goto error, in default case */
@@ -3129,6 +3138,7 @@ void qsap_hostd_exec_cmd(s8 *pcmd, s8 *presp, u32 *plen)
#define DEFAULT_AUTH_ALG 1
#define RECV_BUF_LEN 255
#define CMD_BUF_LEN 255
#define SET_BUF_LEN 15
/** Command input
argv[3] = SSID,
@@ -3145,6 +3155,8 @@ int qsapsetSoftap(int argc, char *argv[])
int i;
int hidden = 0;
int sec = SEC_MODE_NONE;
char setCmd[SET_BUF_LEN];
int offset = 0;
ALOGD("%s, %s, %s, %d\n", __FUNCTION__, argv[0], argv[1], argc);
@@ -3152,22 +3164,39 @@ int qsapsetSoftap(int argc, char *argv[])
ALOGD("ARG: %d - %s\n", i+1, argv[i]);
}
// check if 2nd arg is dual2g/dual5g
if (argc > 2) {
// just match 'dual'
if (strncmp(argv[2], Conf_req[CONF_2g], 4) == 0) {
snprintf(setCmd, SET_BUF_LEN, "set %s", argv[2]);
offset = 1;
argc--;
} else {
snprintf(setCmd, SET_BUF_LEN, "set");
offset = 0;
}
}
/* set interface */
if (argc > 2) {
snprintf(cmdbuf, CMD_BUF_LEN, "set interface=%s",argv[2]);
snprintf(cmdbuf, CMD_BUF_LEN, "%s interface=%s", setCmd, argv[2 + offset]);
}
else {
snprintf(cmdbuf, CMD_BUF_LEN, "set interface=%s", DEFAULT_INTFERACE);
snprintf(cmdbuf, CMD_BUF_LEN, "%s interface=%s", setCmd, DEFAULT_INTFERACE);
}
(void) qsap_hostd_exec_cmd(cmdbuf, respbuf, &rlen);
/** set SSID */
if(argc > 3) {
qsap_scnprintf(cmdbuf, sizeof(cmdbuf), "set ssid=%s",argv[3]);
// In case of dual2g/5g, Set ssid2 with hex values to accomodate sapce and special characters.
if (offset)
qsap_scnprintf(cmdbuf, sizeof(cmdbuf), "%s ssid2=%s", setCmd, argv[3 + offset]);
else
qsap_scnprintf(cmdbuf, sizeof(cmdbuf), "%s ssid=%s",setCmd, argv[3]);
}
else {
qsap_scnprintf(cmdbuf, sizeof(cmdbuf), "set ssid=%s_%d", DEFAULT_SSID, rand());
qsap_scnprintf(cmdbuf, sizeof(cmdbuf), "%s ssid=%s_%d", setCmd, DEFAULT_SSID, rand());
}
(void) qsap_hostd_exec_cmd(cmdbuf, respbuf, &rlen);
@@ -3178,10 +3207,10 @@ int qsapsetSoftap(int argc, char *argv[])
rlen = RECV_BUF_LEN;
if (argc > 4) {
if (strcmp(argv[4], "hidden") == 0) {
if (strcmp(argv[4 + offset], "hidden") == 0) {
hidden = 1;
}
snprintf(cmdbuf, CMD_BUF_LEN, "set ignore_broadcast_ssid=%d", hidden);
snprintf(cmdbuf, CMD_BUF_LEN, "%s ignore_broadcast_ssid=%d", setCmd, hidden);
(void) qsap_hostd_exec_cmd(cmdbuf, respbuf, &rlen);
if(strncmp("success", respbuf, rlen) != 0) {
ALOGE("Failed to set ignore_broadcast_ssid \n");
@@ -3191,7 +3220,7 @@ int qsapsetSoftap(int argc, char *argv[])
/** channel */
rlen = RECV_BUF_LEN;
if(argc > 5) {
snprintf(cmdbuf, CMD_BUF_LEN, "set channel=%d", atoi(argv[5]));
snprintf(cmdbuf, CMD_BUF_LEN, "%s channel=%d", setCmd, atoi(argv[5 + offset]));
(void) qsap_hostd_exec_cmd(cmdbuf, respbuf, &rlen);
if(strncmp("success", respbuf, rlen) != 0) {
@@ -3205,22 +3234,22 @@ int qsapsetSoftap(int argc, char *argv[])
if(argc > 6) {
/**TODO : need to identify the SEC strings for "wep", "wpa", "wpa2" */
if(!strcmp(argv[6], "open"))
if(!strcmp(argv[6 + offset], "open"))
sec = SEC_MODE_NONE;
else if(!strcmp(argv[6], "wep"))
else if(!strcmp(argv[6 + offset], "wep"))
sec = SEC_MODE_WEP;
else if(!strcmp(argv[6], "wpa-psk"))
else if(!strcmp(argv[6 + offset], "wpa-psk"))
sec = SEC_MODE_WPA_PSK;
else if(!strcmp(argv[6], "wpa2-psk"))
else if(!strcmp(argv[6 + offset], "wpa2-psk"))
sec = SEC_MODE_WPA2_PSK;
qsap_scnprintf(cmdbuf, sizeof(cmdbuf), "set security_mode=%d",sec);
qsap_scnprintf(cmdbuf, sizeof(cmdbuf), "%s security_mode=%d",setCmd, sec);
}
else {
qsap_scnprintf(cmdbuf, sizeof(cmdbuf) , "set security_mode=%d", DEFAULT_AUTH_ALG);
qsap_scnprintf(cmdbuf, sizeof(cmdbuf) , "%s security_mode=%d", setCmd, DEFAULT_AUTH_ALG);
}
(void) qsap_hostd_exec_cmd(cmdbuf, respbuf, &rlen);
@@ -3235,11 +3264,11 @@ int qsapsetSoftap(int argc, char *argv[])
if ( (sec == SEC_MODE_WPA_PSK) || (sec == SEC_MODE_WPA2_PSK) ) {
if(argc > 7) {
/* If the input passphrase is more than 63 characters, consider first 63 characters only*/
if ( strlen(argv[7]) > 63 ) argv[7][63] = '\0';
qsap_scnprintf(cmdbuf, CMD_BUF_LEN, "set wpa_passphrase=%s",argv[7]);
if ( strlen(argv[7 + offset]) > 63 ) argv[7 + offset][63] = '\0';
qsap_scnprintf(cmdbuf, CMD_BUF_LEN, "%s wpa_passphrase=%s",setCmd, argv[7 + offset]);
}
else {
qsap_scnprintf(cmdbuf, sizeof(cmdbuf), "set wpa_passphrase=%s", DEFAULT_PASSPHRASE);
qsap_scnprintf(cmdbuf, sizeof(cmdbuf), "%s wpa_passphrase=%s", setCmd, DEFAULT_PASSPHRASE);
}
}
@@ -3251,7 +3280,7 @@ int qsapsetSoftap(int argc, char *argv[])
rlen = RECV_BUF_LEN;
if(argc > 8) {
qsap_scnprintf(cmdbuf, sizeof(cmdbuf), "set max_num_sta=%d",atoi(argv[8]));
qsap_scnprintf(cmdbuf, sizeof(cmdbuf), "%s max_num_sta=%d",setCmd, atoi(argv[8 + offset]));
}
(void) qsap_hostd_exec_cmd(cmdbuf, respbuf, &rlen);
@@ -3261,7 +3290,7 @@ int qsapsetSoftap(int argc, char *argv[])
}
rlen = RECV_BUF_LEN;
qsap_scnprintf(cmdbuf, sizeof(cmdbuf), "set commit");
qsap_scnprintf(cmdbuf, sizeof(cmdbuf), "%s commit", setCmd);
(void) qsap_hostd_exec_cmd(cmdbuf, respbuf, &rlen);
@@ -3439,6 +3468,7 @@ int qsap_control_bridge(int argc, char ** argv)
return 0;
}
int qsap_add_or_remove_interface(const char *newIface , int createIface)
{
const char *wlanIface = "wlan0";

View File

@@ -345,6 +345,8 @@ typedef enum esap_cmd {
eCMD_ENABLE_WIGIG_SOFTAP = 72,
eCMD_INTERFACE = 73,
eCMD_SSID2 = 74,
eCMD_BRIDGE = 75,
eCMD_LAST /** New command numbers should be added above this */
} esap_cmd_t;