blob: e5315a9b34efb308956a3e77b1133f21ae8a566b [file] [log] [blame]
/****************************************************************************
* (c) Copyright 2007 Wi-Fi Alliance. All Rights Reserved
*
*
* LICENSE
*
* License is granted only to Wi-Fi Alliance members and designated
* contractors ($B!H(BAuthorized Licensees$B!I(B)..AN Authorized Licensees are granted
* the non-exclusive, worldwide, limited right to use, copy, import, export
* and distribute this software:
* (i) solely for noncommercial applications and solely for testing Wi-Fi
* equipment; and
* (ii) solely for the purpose of embedding the software into Authorized
* Licensee$B!G(Bs proprietary equipment and software products for distribution to
* its customers under a license with at least the same restrictions as
* contained in this License, including, without limitation, the disclaimer of
* warranty and limitation of liability, below..AN The distribution rights
* granted in clause
* (ii), above, include distribution to third party companies who will
* redistribute the Authorized Licensee$B!G(Bs product to their customers with or
* without such third party$B!G(Bs private label. Other than expressly granted
* herein, this License is not transferable or sublicensable, and it does not
* extend to and may not be used with non-Wi-Fi applications..AN Wi-Fi Alliance
* reserves all rights not expressly granted herein..AN
*.AN
* Except as specifically set forth above, commercial derivative works of
* this software or applications that use the Wi-Fi scripts generated by this
* software are NOT AUTHORIZED without specific prior written permission from
* Wi-Fi Alliance.
*.AN
* Non-Commercial derivative works of this software for internal use are
* authorized and are limited by the same restrictions; provided, however,
* that the Authorized Licensee shall provide Wi-Fi Alliance with a copy of
* such derivative works under a perpetual, payment-free license to use,
* modify, and distribute such derivative works for purposes of testing Wi-Fi
* equipment.
*.AN
* Neither the name of the author nor "Wi-Fi Alliance" may be used to endorse
* or promote products that are derived from or that use this software without
* specific prior written permission from Wi-Fi Alliance.
*
* THIS SOFTWARE IS PROVIDED BY WI-FI ALLIANCE "AS IS" AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY, NON-INFRINGEMENT AND FITNESS FOR A.AN PARTICULAR PURPOSE,
* ARE DISCLAIMED. IN NO EVENT SHALL WI-FI ALLIANCE BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, THE COST OF PROCUREMENT OF SUBSTITUTE
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE) ARISING IN ANY WAY OUT OF
* THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ******************************************************************************
*/
/*
* File: wfa_cmdproc.c
* Library functions to handle all string command parsing and convert it
* to an internal format for DUT. They should be called by Control Agent
* and Test console while receiving commands from CLI or TM
*
* Revision History:
* 2006/03/10 -- initially created by qhu
* 2006/06/01 -- BETA release by qhu
* 2006/06/13 -- 00.02 release by qhu
* 2006/06/30 -- 00.10 Release by qhu
* 2006/07/10 -- 01.00 Release by qhu
* 2006/08/30 -- add some print statements by Isaac in Epson.
* 2006/09/01 -- 01.05 release by qhu
* 2006/10/26 -- 01.06 release by qhu
* 2006/12/02 -- bug fix reported by p.schwan
* 2007/01/11 -- 01.10 release by qhu
* 2007/02/15 -- WMM Extension Beta released by qhu, mkaroshi
* 2007/03/30 -- 01.40 WPA2 and Official WMM Beta Release by qhu
* 2007/04/20 -- 02.00 WPA2 and Official WMM Release by qhu
* 2007/08/15 -- 02.10 WMM-Power Save release by qhu
* 2007/10/10 -- 02.20 Voice SOHO beta -- qhu
* 2007/11/07 -- 02.30 Voice HSO -- qhu
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifndef WIN32
#include <sys/socket.h>
#endif
#include "wfa_debug.h"
#include "wfa_types.h"
#include "wfa_tlv.h"
#include "wfa_tg.h"
#include "wfa_ca.h"
#include "wfa_cmds.h"
#include "wfa_miscs.h"
#include "wfa_agtctrl.h"
extern int gSock;
extern void printProfile(tgProfile_t *);
extern unsigned short wfa_defined_debug;
/* command KEY WORD String table */
typeNameStr_t keywordStr[] =
{
{ KW_PROFILE, "profile", NULL},
{ KW_DIRECTION, "direction", NULL},
{ KW_DIPADDR, "destination", NULL},
{ KW_DPORT, "destinationport", NULL},
{ KW_SIPADDR, "source", NULL},
{ KW_SPORT, "sourceport", NULL},
{ KW_FRATE, "framerate", NULL},
{ KW_DURATION, "duration", NULL},
{ KW_PLOAD, "payloadsize", NULL},
{ KW_TCLASS, "trafficClass", NULL}, /* It is to indicate WMM traffic pattern */
{ KW_STREAMID, "streamid", NULL},
{ KW_STARTDELAY, "startdelay", NULL}, /* It is used to schedule multi-stream test such as WMM */
{ KW_NUMFRAME, "numframes", NULL},
{ KW_USESYNCCLOCK, "useSyncClock", NULL},
{ KW_USERPRIORITY, "userpriority", NULL}
};
/* profile type string table */
typeNameStr_t profileStr[] =
{
{ PROF_FILE_TX, "file_transfer", NULL},
{ PROF_MCAST, "multicast", NULL},
{ PROF_IPTV, "iptv", NULL}, /* This is used for WMM, confused? */
{ PROF_TRANSC, "transaction", NULL},
{ PROF_START_SYNC, "start_sync", NULL},
{ PROF_CALI_RTD, "cali_rtd", NULL},
{ PROF_UAPSD, "uapsd", NULL},
{ PROF_FILE_TX_TCP, "file_transfer_tcp", NULL},
{ PROF_TRANSC_TCP, "transaction_tcp", NULL}
};
/* direction string table */
typeNameStr_t direcStr[] =
{
{ DIRECT_SEND, "send", NULL},
{ DIRECT_RECV, "receive", NULL}
};
/*
* cmdProcNotDefinedYet(): a dummy function
*/
int cmdProcNotDefinedYet(char *pcmdStr, char *buf, int len)
{
DPRINT_INFO(WFA_OUT,"The command processing function not defined.\n");
/* need to send back a response */
return (TRUE);
}
extern unsigned short wfa_defined_debug;
/*
* xcCmdProcGetVersion(): process the command get_version string from TM
* to convert it into a internal format
* input: pcmdStr -- a string pointer to the command string
*/
int xcCmdProcGetVersion(char *pcmdStr, BYTE *aBuf, int *aLen)
{
DPRINT_INFO(WFA_OUT, "start xcCmdProcGetVersion ...\n");
if(aBuf == NULL)
return FALSE;
/* encode the tag without values */
wfaEncodeTLV(WFA_GET_VERSION_TLV, 0, NULL, aBuf);
*aLen = 4;
return TRUE;
}
/*
* xcCmdProcAgentConfig(): process the command traffic_agent_config string
* from TM to convert it into a internal format
* input: pcmdStr -- a string pointer to the command string
*/
int xcCmdProcAgentConfig(char *pcmdStr, BYTE *aBuf, int *aLen)
{
char *str;
int i = 0, j=0, kwcnt = 0;
wfaTLV *hdr = (wfaTLV *)aBuf;
tgProfile_t tgpf;
tgProfile_t *pf = &tgpf;
int userPrio = 0;
DPRINT_INFO(WFA_OUT, "start xcCmdProcAgentConfig ...\n");
DPRINT_INFO(WFA_OUT, "params: %s\n", pcmdStr);
if(aBuf == NULL)
return FALSE;
while((str = strtok_r(NULL, ",", (char **)&pcmdStr)) != NULL)
{
DPRINT_INFO(WFA_OUT,"key word %s\n", str);
for(i = 0; i<sizeof(keywordStr); i++)
{
if(strcasecmp(str, keywordStr[i].name) == 0)
{
switch(keywordStr[i].type)
{
case KW_PROFILE:
str = strtok_r(NULL, ",", (char **)&pcmdStr);
if(isString(str) == FALSE)
{
DPRINT_ERR(WFA_ERR, "Incorrect profile keyword format\n");
return FALSE;
}
for(j = 0; j < PROF_LAST; j++)
if(strcasecmp(str, profileStr[j].name) == 0)
{
pf->profile = profileStr[j].type;
}
DPRINT_INFO(WFA_OUT, "profile type %i\n", pf->profile);
kwcnt++;
str = NULL;
break;
case KW_DIRECTION:
str = strtok_r(NULL, ",", &pcmdStr);
if(isString(str) == FALSE)
{
DPRINT_ERR(WFA_ERR, "Incorrect direction keyword format\n");
return FALSE;
}
if(strcasecmp(str, "send") == 0)
{
pf->direction = DIRECT_SEND;
}
else if(strcasecmp(str, "receive") == 0)
{
pf->direction = DIRECT_RECV;
}
else
DPRINT_INFO(WFA_OUT,"Don't know direction\n");
DPRINT_INFO(WFA_OUT, "direction %i\n", pf->direction);
kwcnt++;
str = NULL;
break;
case KW_DIPADDR: /* dest ip address */
memcpy(pf->dipaddr, strtok_r(NULL, ",", &pcmdStr), IPV4_ADDRESS_STRING_LEN);
if(isIpV4Addr(pf->dipaddr) == FALSE)
{
DPRINT_ERR(WFA_ERR, "Incorrect ipaddr format\n");
return FALSE;
}
DPRINT_INFO(WFA_OUT, "dipaddr %s\n", pf->dipaddr);
kwcnt++;
str = NULL;
break;
case KW_DPORT:
str = strtok_r(NULL, ",", &pcmdStr);
if(isNumber(str) == FALSE)
{
DPRINT_ERR(WFA_ERR, "Incorrect port number format\n");
return FALSE;
}
DPRINT_INFO(WFA_OUT, "dport %s\n", str);
pf->dport = atoi(str);
kwcnt++;
str = NULL;
break;
case KW_SIPADDR:
memcpy(pf->sipaddr, strtok_r(NULL, ",", &pcmdStr), IPV4_ADDRESS_STRING_LEN);
if(isIpV4Addr(pf->sipaddr) == FALSE)
{
DPRINT_ERR(WFA_ERR, "Incorrect ipaddr format\n");
return FALSE;
}
DPRINT_INFO(WFA_OUT, "sipaddr %s\n", pf->sipaddr);
kwcnt++;
str = NULL;
break;
case KW_SPORT:
str = strtok_r(NULL, ",", &pcmdStr);
if(isNumber(str) == FALSE)
{
DPRINT_ERR(WFA_ERR, "Incorrect port number format\n");
return FALSE;
}
DPRINT_INFO(WFA_OUT, "sport %s\n", str);
pf->sport = atoi(str);
kwcnt++;
str = NULL;
break;
case KW_FRATE:
str = strtok_r(NULL, ",", &pcmdStr);
if(isNumber(str) == FALSE)
{
DPRINT_ERR(WFA_ERR, "Incorrect frame rate format\n");
return FALSE;
}
DPRINT_INFO(WFA_OUT, "framerate %s\n", str);
pf->rate = atoi(str);
kwcnt++;
str = NULL;
break;
case KW_DURATION:
str = strtok_r(NULL, ",", &pcmdStr);
if (strlen(str)) {
if(isNumber(str) == FALSE)
{
DPRINT_ERR(WFA_ERR, "Incorrect duration format\n");
return FALSE;
}
}
else
{
DPRINT_ERR(WFA_ERR, "No duration specified\n");
return FALSE;
}
DPRINT_INFO(WFA_OUT, "duration %s\n", str);
pf->duration = atoi(str);
kwcnt++;
str = NULL;
break;
case KW_PLOAD:
str = strtok_r(NULL, ",", &pcmdStr);
if(isNumber(str) == FALSE)
{
DPRINT_ERR(WFA_ERR, "Incorrect payload format\n");
return FALSE;
}
DPRINT_INFO(WFA_OUT, "payload %s\n", str);
pf->pksize = atoi(str);
kwcnt++;
str = NULL;
break;
case KW_STARTDELAY:
str = strtok_r(NULL, ",", &pcmdStr);
if(isNumber(str) == FALSE)
{
DPRINT_ERR(WFA_ERR, "Incorrect startDelay format\n");
return FALSE;
}
DPRINT_INFO(WFA_OUT, "startDelay %s\n", str);
pf->startdelay = atoi(str);
kwcnt++;
str = NULL;
break;
case KW_TCLASS:
str = strtok_r(NULL, ",", &pcmdStr);
/* if user priority is used, tclass is ignored. */
if(userPrio == 1)
break;
if(strcasecmp(str, "voice") == 0)
{
pf->trafficClass = TG_WMM_AC_VO;
}
else if(strcasecmp(str, "Video") == 0)
{
pf->trafficClass = TG_WMM_AC_VI;
}
else if(strcasecmp(str, "Background") == 0)
{
pf->trafficClass = TG_WMM_AC_BK;
}
else if(strcasecmp(str, "BestEffort") == 0)
{
pf->trafficClass = TG_WMM_AC_BE;
}
else
{
pf->trafficClass = TG_WMM_AC_BE;
}
kwcnt++;
str = NULL;
break;
case KW_USERPRIORITY:
str = strtok_r(NULL, ",", &pcmdStr);
if( strcasecmp(str, "6") == 0 )
{
pf->trafficClass = TG_WMM_AC_UP6;
}
else if( strcasecmp(str, "7") == 0 )
{
pf->trafficClass = TG_WMM_AC_UP7;
}
else if( strcasecmp(str, "5") == 0 )
{
pf->trafficClass = TG_WMM_AC_UP5;
}
else if( strcasecmp(str, "4") == 0 )
{
pf->trafficClass = TG_WMM_AC_UP4;
}
else if( strcasecmp(str, "1") == 0 )
{
pf->trafficClass = TG_WMM_AC_UP1;
}
else if( strcasecmp(str, "2") == 0 )
{
pf->trafficClass = TG_WMM_AC_UP2;
}
else if( strcasecmp(str, "0") == 0 )
{
pf->trafficClass = TG_WMM_AC_UP0;
}
else if( strcasecmp(str, "3") == 0)
{
pf->trafficClass = TG_WMM_AC_UP3;
}
/* if User Priority is used */
userPrio = 1;
kwcnt++;
str = NULL;
break;
case KW_STREAMID:
kwcnt++;
break;
case KW_NUMFRAME:
DPRINT_INFO(WFA_OUT,"Number of Frame\n");
str = strtok_r(NULL, ",", &pcmdStr);
if(isNumber(str) == FALSE)
{
DPRINT_ERR(WFA_ERR, "Incorrect numframe format\n");
return FALSE;
}
DPRINT_INFO(WFA_OUT, "num frame %s\n", str);
DPRINT_INFO(WFA_OUT,"num frame %s\n", str);
kwcnt++;
str = NULL;
break;
case KW_USESYNCCLOCK:
str = strtok_r(NULL, ",", &pcmdStr);
if(isNumber(str) == FALSE)
{
DPRINT_ERR(WFA_ERR, "Incorrect sync clock format\n");
return FALSE;
}
DPRINT_INFO(WFA_OUT, "sync clock %s\n", str);
DPRINT_INFO(WFA_OUT,"sync clock %s\n", str);
kwcnt++;
str = NULL;
break;
default:
;
} /* switch */
if(str==NULL)
break;
}
} /* for */
} /* while */
printProfile(pf);
hdr->tag = WFA_TRAFFIC_AGENT_CONFIG_TLV;
hdr->len = sizeof(tgProfile_t);
memcpy(aBuf+4, pf, sizeof(tgpf));
*aLen = 4+sizeof(tgProfile_t);
return TRUE;
}
/*
* xcCmdProcAgentSend(): Process and send the Control command
* "traffic_agent_send"
* input - pcmdStr parameter string pointer
* return - TRUE or FALSE;
*/
int xcCmdProcAgentSend(char *pcmdStr, BYTE *aBuf, int *aLen)
{
wfaTLV *hdr = (wfaTLV *)aBuf;
char *str, *sid;
int strid;
int id_cnt = 0;
if(aBuf == NULL)
return FALSE;
memset(aBuf, 0, 512);
DPRINT_INFO(WFA_OUT, "Entering xcCmdProcAgentSend ...\n");
/* there is only one stream for baseline. Will support
* multiple streams later.
*/
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
return FALSE;
/* take the stream ids */
if(strcasecmp(str, "streamid") != 0)
{
DPRINT_ERR(WFA_ERR, "invalid type name\n");
return FALSE;
}
/*
* To handle there are multiple stream ids such as WMM
*/
while(1)
{
sid = strtok_r (NULL, " ", &pcmdStr);
if(sid == NULL)
break;
if(isNumber(sid) == FALSE)
continue;
strid = atoi(sid);
DPRINT_INFO(WFA_OUT,"id %i\n", strid);
id_cnt++;
memcpy(aBuf+4*id_cnt, (char *)&strid, 4);
}
hdr->tag = WFA_TRAFFIC_AGENT_SEND_TLV;
hdr->len = 4*id_cnt; /* multiple 4s if more streams */
*aLen = 4 + 4*id_cnt;
#ifdef DEBUG
{
int i;
for(i = 0; i< *aLen; i++)
DPRINT_INFO(WFA_OUT,"%x ", aBuf[i]);
DPRINT_INFO(WFA_OUT,"\n");
}
#endif
return TRUE;
}
/*
* xcCmdProcAgentReset(): Process and send the Control command
* "traffic_agent_reset"
* input - pcmdStr parameter string pointer
* return - TRUE or FALSE;
*/
int xcCmdProcAgentReset(char *pcmdStr, BYTE *aBuf, int *aLen)
{
wfaTLV *hdr = (wfaTLV *)aBuf;
DPRINT_INFO(WFA_OUT, "Entering xcCmdProcAgentReset ...\n");
if(aBuf == NULL)
return FALSE;
memset(aBuf, 0, *aLen);
hdr->tag = WFA_TRAFFIC_AGENT_RESET_TLV;
hdr->len = 0; /* multiple 4s if more streams */
*aLen = 4;
return TRUE;
}
/*
* xcCmdProcAgentRecvStart(): Process and send the Control command
* "traffic_agent_receive_start"
* input - pcmdStr parameter string pointer
* return - TRUE or FALSE;
*/
int xcCmdProcAgentRecvStart(char *pcmdStr, BYTE *aBuf, int *aLen)
{
wfaTLV *hdr = (wfaTLV *)aBuf;
char *str, *sid;
int strid;
int id_cnt = 0;
DPRINT_INFO(WFA_OUT, "Entering xcCmdProcAgentRecvStart ...%s\n", pcmdStr);
if(aBuf == NULL)
return FALSE;
memset(aBuf, 0, *aLen);
/* there is only one stream for baseline. Will support
* multiple streams later.
*/
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
{
DPRINT_ERR(WFA_ERR, "Null string\n");
return FALSE;
}
if(strcasecmp(str, "streamid") != 0)
{
DPRINT_ERR(WFA_ERR, "invalid type name\n");
return FALSE;
}
while(1)
{
sid = strtok_r (NULL, " ", &pcmdStr);
if(sid == NULL)
break;
if(isNumber(sid) == FALSE)
continue;
strid = atoi(sid);
id_cnt++;
memcpy(aBuf+4*id_cnt, (char *)&strid, 4);
}
hdr->tag = WFA_TRAFFIC_AGENT_RECV_START_TLV;
hdr->len = 4*id_cnt; /* multiple 4s if more streams */
*aLen = 4 + 4*id_cnt;
#ifdef DEBUG
{
int i;
for(i = 0; i< *aLen; i++)
DPRINT_INFO(WFA_OUT,"%x ", aBuf[i]);
DPRINT_INFO(WFA_OUT,"\n");
}
#endif
return TRUE;
}
/*
* xcCmdProcAgentRecvStop(): Process and send the Control command
* "traffic_agent_receive_stop"
* input - pcmdStr parameter string pointer
* return - TRUE or FALSE;
*/
int xcCmdProcAgentRecvStop(char *pcmdStr, BYTE *aBuf, int *aLen)
{
wfaTLV *hdr = (wfaTLV *)aBuf;
char *str, *sid;
int strid;
int id_cnt = 0;
DPRINT_INFO(WFA_OUT, "Entering xcCmdProcAgentRecvStop ...\n");
if(aBuf == NULL)
return FALSE;
memset(aBuf, 0, *aLen);
/* there is only one stream for baseline. Will support
* multiple streams later.
*/
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
return FALSE;
if(strcasecmp(str, "streamid") != 0)
{
DPRINT_ERR(WFA_ERR, "invalid type name\n");
return FALSE;
}
while(1)
{
sid = strtok_r (NULL, " ", &pcmdStr);
if(sid == NULL)
break;
if(isNumber(sid) == FALSE)
continue;
strid = atoi(sid);
id_cnt++;
memcpy(aBuf+4*id_cnt, (char *)&strid, 4);
}
hdr->tag = WFA_TRAFFIC_AGENT_RECV_STOP_TLV;
hdr->len = 4*id_cnt; /* multiple 4s if more streams */
*aLen = 4 + 4*id_cnt;
return TRUE;
}
int xcCmdProcAgentSendPing(char *pcmdStr, BYTE *aBuf, int *aLen)
{
wfaTLV *hdr = (wfaTLV *)aBuf;
tgPingStart_t *staping = (tgPingStart_t *) (aBuf+sizeof(wfaTLV));
char *str;
staping->type = 0;
if(aBuf == NULL)
return FALSE;
memset(aBuf, 0, *aLen);
for(;;)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
break;
if(strcasecmp(str, "destination") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(staping->dipaddr, str, 15);
DPRINT_INFO(WFA_OUT, "destination %s\n", staping->dipaddr);
}
if(strcasecmp(str, "frameSize") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
staping->frameSize=atoi(str);
DPRINT_INFO(WFA_OUT, "framesize %i\n", staping->frameSize);
}
if(strcasecmp(str, "frameRate") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
staping->frameRate=atoi(str);
DPRINT_INFO(WFA_OUT, "framerate %i\n", staping->frameRate);
}
if(strcasecmp(str, "duration") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
staping->duration=atoi(str);
DPRINT_INFO(WFA_OUT, "duration %i\n", staping->duration);
}
if(strcasecmp(str, "type") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(strcasecmp(str, "udp") == 0)
staping->type = 1;
else
staping->type = 0;
}
}
hdr->tag = WFA_TRAFFIC_SEND_PING_TLV;
hdr->len = sizeof(tgPingStart_t);
*aLen = hdr->len + 4;
return TRUE;
}
int xcCmdProcAgentStopPing(char *pcmdStr, BYTE *aBuf, int *aLen)
{
wfaTLV *hdr = (wfaTLV *)aBuf;
char *str;
int strid;
str = strtok_r(NULL, ",", &pcmdStr);
if(aBuf == NULL)
return FALSE;
memset(aBuf, 0, *aLen);
if(str == NULL || str[0] == '\0')
return FALSE;
if(strcasecmp(str, "streamid") == 0)
str = strtok_r(NULL, ",", &pcmdStr);
else
{
DPRINT_ERR(WFA_ERR, "invalid type name\n");
return FALSE;
}
if(isNumber(str) == FALSE)
return FALSE;
strid = atoi(str);
memcpy(aBuf+4, (char *)&strid, 4);
hdr->tag = WFA_TRAFFIC_STOP_PING_TLV;
hdr->len = 4; /* multiple 4s if more streams */
*aLen = 8;
return TRUE;
}
int xcCmdProcStaGetIpConfig(char *pcmdStr, BYTE *aBuf, int *aLen)
{
int slen;
char *str = NULL;
dutCommand_t getipconf;
memset(&getipconf, 0, sizeof(dutCommand_t));
DPRINT_INFO(WFA_OUT, "Entering xcCmdProcStaGetIpConfig ...\n");
if(aBuf == NULL)
return FALSE;
memset(aBuf, 0, *aLen);
str = strtok_r(NULL, ",", &pcmdStr);
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL)
return FALSE;
slen = strlen(str);
memcpy(getipconf.intf, str, slen);
wfaEncodeTLV(WFA_STA_GET_IP_CONFIG_TLV, sizeof(dutCommand_t), (BYTE *)&getipconf, aBuf);
*aLen = 4+sizeof(getipconf);
return TRUE;
}
int xcCmdProcStaSetIpConfig(char *pcmdStr, BYTE *aBuf, int *aLen)
{
dutCommand_t staSetIpConfig;
char *str;
caStaSetIpConfig_t *setip;
memset(&staSetIpConfig, 0, sizeof(staSetIpConfig));
setip = (caStaSetIpConfig_t *)&staSetIpConfig.cmdsu.ipconfig;
if(aBuf == NULL)
return FALSE;
memset(aBuf, 0, *aLen);
for(;;)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
break;
if(strcasecmp(str, "interface") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(setip->intf, str, 15);
DPRINT_INFO(WFA_OUT, "interface %s\n", setip->intf);
}
else if(strcasecmp(str, "dhcp") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
setip->isDhcp = atoi(str);
DPRINT_INFO(WFA_OUT, "dhcp %i\n", setip->isDhcp);
}
else if(strcasecmp(str, "ip") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(setip->ipaddr, str, 15);
DPRINT_INFO(WFA_OUT, "ip %s\n", setip->ipaddr);
}
else if(strcasecmp(str, "mask") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(setip->mask, str, 15);
DPRINT_INFO(WFA_OUT, "mask %s\n", setip->mask);
}
else if(strcasecmp(str, "defaultGateway") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(setip->defGateway, str, 15);
DPRINT_INFO(WFA_OUT, "gw %s\n", setip->defGateway);
}
else if(strcasecmp(str, "primary-dns") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(setip->pri_dns, str, 15);
DPRINT_INFO(WFA_OUT, "dns p %s\n", setip->pri_dns);
}
else if(strcasecmp(str, "secondary-dns") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(setip->sec_dns, str, 15);
DPRINT_INFO(WFA_OUT, "dns s %s\n", setip->sec_dns);
}
else
{
DPRINT_ERR(WFA_ERR, "invalid command\n");
return FALSE;
}
}
wfaEncodeTLV(WFA_STA_SET_IP_CONFIG_TLV, sizeof(staSetIpConfig), (BYTE *)&staSetIpConfig, aBuf);
*aLen = 4+sizeof(staSetIpConfig);
return TRUE;
}
int xcCmdProcStaGetMacAddress(char *pcmdStr, BYTE *aBuf, int *aLen)
{
int slen;
char *str = NULL;
dutCommand_t getmac;
DPRINT_INFO(WFA_OUT, "Entering xcCmdProcStaGetMacAddress ...\n");
if(aBuf == NULL)
return FALSE;
memset(aBuf, 0, *aLen);
memset(&getmac, 0, sizeof(getmac));
str = strtok_r(NULL, ",", &pcmdStr);
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL)
return FALSE;
slen = strlen(str);
memcpy(getmac.intf, str, slen);
wfaEncodeTLV(WFA_STA_GET_MAC_ADDRESS_TLV, sizeof(getmac), (BYTE *)&getmac, aBuf);
*aLen = 4+sizeof(getmac);
return TRUE;
}
int xcCmdProcStaIsConnected(char *pcmdStr, BYTE *aBuf, int *aLen)
{
int slen;
char *str = NULL;
dutCommand_t isconnected;
DPRINT_INFO(WFA_OUT, "Entering xcCmdProcStaIsConnected\n");
memset(&isconnected, 0, sizeof(isconnected));
if(aBuf == NULL)
return FALSE;
memset(aBuf, 0, *aLen);
str = strtok_r(NULL, ",", &pcmdStr);
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL)
return FALSE;
slen = strlen(str);
memcpy(isconnected.intf, str, slen);
wfaEncodeTLV(WFA_STA_IS_CONNECTED_TLV, sizeof(isconnected), (BYTE *)&isconnected, aBuf);
*aLen = 4+sizeof(isconnected);
return TRUE;
}
int xcCmdProcStaVerifyIpConnection(char *pcmdStr, BYTE *aBuf, int *aLen)
{
wfaTLV *hdr = (wfaTLV *)aBuf;
dutCommand_t *verifyip = (dutCommand_t *) (aBuf+sizeof(wfaTLV));
char *str;
DPRINT_INFO(WFA_OUT, "Entering xcCmdProcStaVerifyIpConnection ...\n");
if(aBuf == NULL)
return FALSE;
memset(aBuf, 0, *aLen);
for(;;)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
break;
if(strcasecmp(str, "interface") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strcpy(verifyip->intf, str);
verifyip->intf[15]='\0';
DPRINT_INFO(WFA_OUT, "interface %s %i\n", verifyip->intf, strlen(verifyip->intf));
}
else if(strcasecmp(str, "destination") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(verifyip->cmdsu.verifyIp.dipaddr, str, 15);
DPRINT_INFO(WFA_OUT, "ip %s\n", verifyip->cmdsu.verifyIp.dipaddr);
}
else if(strcasecmp(str, "timeout") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
verifyip->cmdsu.verifyIp.timeout = atoi(str);
DPRINT_INFO(WFA_OUT, "timeout %i\n", verifyip->cmdsu.verifyIp.timeout);
}
}
wfaEncodeTLV(WFA_STA_VERIFY_IP_CONNECTION_TLV, sizeof(verifyip), (BYTE *)&verifyip, aBuf);
hdr->tag = WFA_STA_VERIFY_IP_CONNECTION_TLV;
hdr->len = sizeof(dutCommand_t);
*aLen = 4+sizeof(dutCommand_t);
return TRUE;
}
int xcCmdProcStaGetBSSID(char *pcmdStr, BYTE *aBuf, int *aLen)
{
int slen;
char *str = NULL;
dutCommand_t getbssid;
DPRINT_INFO(WFA_OUT, "Entering xcCmdProcStaGetBSSID ...\n");
if(aBuf == NULL)
return FALSE;
memset(aBuf, 0, *aLen);
memset(&getbssid, 0, sizeof(getbssid));
str = strtok_r(NULL, ",", &pcmdStr);
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL)
return FALSE;
slen = strlen(str);
memcpy(getbssid.intf, str, slen-1);
getbssid.intf[slen-1] = '\0';
wfaEncodeTLV(WFA_STA_GET_BSSID_TLV, sizeof(getbssid), (BYTE *)&getbssid, aBuf);
*aLen = 4+sizeof(getbssid);
return TRUE;
}
int xcCmdProcStaGetStats(char *pcmdStr, BYTE *aBuf, int *aLen)
{
int slen;
char *str = NULL;
dutCommand_t getstats;
DPRINT_INFO(WFA_OUT, "Entering xcCmdProcStaGetStats ...\n");
if(aBuf == NULL)
return FALSE;
memset(aBuf, 0, *aLen);
memset(&getstats, 0, sizeof(getstats));
str = strtok_r(NULL, ",", &pcmdStr);
/* need to check if the parameter name is called interface */
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL)
return FALSE;
slen = strlen(str);
memcpy(getstats.intf, str, slen-1);
getstats.intf[slen-1] = '\0';
wfaEncodeTLV(WFA_STA_GET_STATS_TLV, sizeof(getstats), (BYTE *)&getstats, aBuf);
*aLen = 4+sizeof(getstats);
return TRUE;
}
int xcCmdProcStaSetEncryption(char *pcmdStr, BYTE *aBuf, int *aLen)
{
caStaSetEncryption_t *setencryp = (caStaSetEncryption_t *) (aBuf+sizeof(wfaTLV));
char *str;
if(aBuf == NULL)
return FALSE;
memset(aBuf, 0, *aLen);
for(;;)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
break;
if(strcasecmp(str, "interface") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(setencryp->intf, str, 15);
}
else if(strcasecmp(str, "ssid") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(setencryp->ssid, str, 64);
}
else if(strcasecmp(str, "encpType") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(strcasecmp(str, "wep") == 0)
setencryp->encpType = ENCRYPT_WEP;
else
setencryp->encpType = 0;
}
else if(strcasecmp(str, "key1") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy((char *)setencryp->keys[0], str, 26);
DPRINT_INFO(WFA_OUT, "%s\n", setencryp->keys[0]);
setencryp->activeKeyIdx = 0;
}
else if(strcasecmp(str, "key2") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy((char *)setencryp->keys[1], str, 26);
DPRINT_INFO(WFA_OUT, "%s\n", setencryp->keys[1]);
}
else if(strcasecmp(str, "key3") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy((char *)setencryp->keys[2], str, 26);
DPRINT_INFO(WFA_OUT, "%s\n", setencryp->keys[2]);
}
else if(strcasecmp(str, "key4") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy((char *)setencryp->keys[3], str, 26);
DPRINT_INFO(WFA_OUT, "%s\n", setencryp->keys[3]);
}
else if(strcasecmp(str, "activeKey") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
setencryp->activeKeyIdx = atoi(str);
}
else
{
DPRINT_INFO(WFA_WNG, "Incorrect Command, check syntax\n");
}
}
wfaEncodeTLV(WFA_STA_SET_ENCRYPTION_TLV, sizeof(caStaSetEncryption_t), (BYTE *)setencryp, aBuf);
*aLen = 4+sizeof(caStaSetEncryption_t);
return TRUE;
}
int xcCmdProcStaSetPSK(char *pcmdStr, BYTE *aBuf, int *aLen)
{
caStaSetPSK_t *setencryp = (caStaSetPSK_t *) (aBuf+sizeof(wfaTLV));
char *str;
if(aBuf == NULL)
return FALSE;
memset(aBuf, 0, *aLen);
for(;;)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
break;
if(strcasecmp(str, "interface") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(setencryp->intf, str, 15);
}
else if(strcasecmp(str, "ssid") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(setencryp->ssid, str, 64);
DPRINT_INFO(WFA_OUT, "ssid %s\n", setencryp->ssid);
}
else if(strcasecmp(str, "passPhrase") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy((char *)setencryp->passphrase, str, 64);
}
else if(strcasecmp(str, "keyMgmtType") == 0)
{
str=strtok_r(NULL, ",", &pcmdStr);
strncpy(setencryp->keyMgmtType, str, 7);
}
else if(strcasecmp(str, "encpType") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(strcasecmp(str, "tkip") == 0)
setencryp->encpType = ENCRYPT_TKIP;
else if(strcasecmp(str, "aes-ccmp") == 0)
setencryp->encpType = ENCRYPT_AESCCMP;
}
}
wfaEncodeTLV(WFA_STA_SET_PSK_TLV, sizeof(caStaSetPSK_t), (BYTE *)setencryp, aBuf);
*aLen = 4+sizeof(caStaSetPSK_t);
return TRUE;
}
int xcCmdProcStaSetEapTLS(char *pcmdStr, BYTE *aBuf, int *aLen)
{
caStaSetEapTLS_t *setsec = (caStaSetEapTLS_t *) (aBuf+sizeof(wfaTLV));
char *str;
if(aBuf == NULL)
return FALSE;
memset(aBuf, 0, *aLen);
for(;;)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
break;
if(strcasecmp(str, "interface") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(setsec->intf, str, 15);
}
else if(strcasecmp(str, "ssid") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(setsec->ssid, str, 64);
}
else if(strcasecmp(str, "keyMgmtType") == 0)
{
str=strtok_r(NULL, ",", &pcmdStr);
strncpy(setsec->keyMgmtType, str, 7);
}
else if(strcasecmp(str, "encpType") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(setsec->encrptype, str, 8);
}
else if(strcasecmp(str, "trustedRootCA") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strcpy(setsec->trustedRootCA, str);
}
else if(strcasecmp(str, "clientCertificate") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strcpy(setsec->clientCertificate, str);
}
}
wfaEncodeTLV(WFA_STA_SET_EAPTLS_TLV, sizeof(caStaSetEapTLS_t), (BYTE *)setsec, aBuf);
*aLen = 4+sizeof(caStaSetEapTLS_t);
return TRUE;
}
int xcCmdProcStaSetEapTTLS(char *pcmdStr, BYTE *aBuf, int *aLen)
{
caStaSetEapTTLS_t *setsec = (caStaSetEapTTLS_t *) (aBuf+sizeof(wfaTLV));
char *str;
if(aBuf == NULL)
return FALSE;
memset(aBuf, 0, *aLen);
for(;;)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
break;
if(strcasecmp(str, "interface") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(setsec->intf, str, 15);
}
else if(strcasecmp(str, "ssid") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(setsec->ssid, str, 64);
}
else if(strcasecmp(str, "username") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strcpy(setsec->username, str);
}
else if(strcasecmp(str, "password") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strcpy(setsec->passwd, str);
}
else if(strcasecmp(str, "keyMgmtType") == 0)
{
str=strtok_r(NULL, ",", &pcmdStr);
strncpy(setsec->keyMgmtType, str, 7);
}
else if(strcasecmp(str, "encpType") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(setsec->encrptype, str, 8);
}
else if(strcasecmp(str, "trustedRootCA") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strcpy(setsec->trustedRootCA, str);
}
else if(strcasecmp(str, "clientCertificate") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strcpy(setsec->clientCertificate, str);
}
}
wfaEncodeTLV(WFA_STA_SET_EAPTTLS_TLV, sizeof(caStaSetEapTTLS_t), (BYTE *)setsec, aBuf);
*aLen = 4+sizeof(caStaSetEapTTLS_t);
return TRUE;
}
int xcCmdProcStaSetEapSIM(char *pcmdStr, BYTE *aBuf, int *aLen)
{
caStaSetEapSIM_t *setsec = (caStaSetEapSIM_t *) (aBuf+sizeof(wfaTLV));
char *str;
if(aBuf == NULL)
return FALSE;
memset(aBuf, 0, *aLen);
for(;;)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
break;
if(strcasecmp(str, "interface") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(setsec->intf, str, 15);
}
else if(strcasecmp(str, "ssid") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(setsec->ssid, str, 64);
}
else if(strcasecmp(str, "username") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strcpy(setsec->username, str);
}
else if(strcasecmp(str, "password") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strcpy(setsec->passwd, str);
}
else if(strcasecmp(str, "keyMgmtType") == 0)
{
str=strtok_r(NULL, ",", &pcmdStr);
strncpy(setsec->keyMgmtType, str, 7);
}
else if(strcasecmp(str, "encpType") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(setsec->encrptype, str, 8);
}
}
wfaEncodeTLV(WFA_STA_SET_EAPSIM_TLV, sizeof(caStaSetEapSIM_t), (BYTE *)setsec, aBuf);
*aLen = 4+sizeof(caStaSetEapSIM_t);
return TRUE;
}
int xcCmdProcStaSetPEAP(char *pcmdStr, BYTE *aBuf, int *aLen)
{
caStaSetEapPEAP_t *setsec = (caStaSetEapPEAP_t *) (aBuf+sizeof(wfaTLV));
char *str;
if(aBuf == NULL)
return FALSE;
memset(aBuf, 0, *aLen);
for(;;)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
break;
if(strcasecmp(str, "interface") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(setsec->intf, str, 15);
}
else if(strcasecmp(str, "ssid") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(setsec->ssid, str, 64);
}
else if(strcasecmp(str, "username") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strcpy(setsec->username, str);
}
else if(strcasecmp(str, "password") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strcpy(setsec->passwd, str);
}
else if(strcasecmp(str, "keyMgmtType") == 0)
{
str=strtok_r(NULL, ",", &pcmdStr);
strncpy(setsec->keyMgmtType, str, 7);
}
else if(strcasecmp(str, "encpType") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(setsec->encrptype, str, 8);
}
else if(strcasecmp(str, "innerEAP") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strcpy(setsec->innerEAP, str);
}
else if(strcasecmp(str, "peapVersion") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
setsec->peapVersion = atoi(str);
}
}
wfaEncodeTLV(WFA_STA_SET_PEAP_TLV, sizeof(caStaSetEapPEAP_t), (BYTE *)setsec, aBuf);
*aLen = 4+sizeof(caStaSetEapPEAP_t);
return TRUE;
}
int xcCmdProcStaSetIBSS(char *pcmdStr, BYTE *aBuf, int *aLen)
{
caStaSetIBSS_t *setibss = (caStaSetIBSS_t *) (aBuf+sizeof(wfaTLV));
char *str;
if(aBuf == NULL)
return FALSE;
memset(aBuf, 0, *aLen);
for(;;)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
break;
if(strcasecmp(str, "interface") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(setibss->intf, str, 15);
DPRINT_INFO(WFA_OUT, "interface %s\n", setibss->intf);
}
else if(strcasecmp(str, "ssid") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(setibss->ssid, str, 64);
DPRINT_INFO(WFA_OUT, "ssid %s\n", setibss->ssid);
}
else if(strcasecmp(str, "channel") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
setibss->channel = atoi(str);
}
else if(strcasecmp(str, "encpType") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(strcasecmp(str, "wep") == 0)
setibss->encpType = ENCRYPT_WEP;
else
setibss->encpType = 0;
}
else if(strcasecmp(str, "key1") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(setibss->keys[0], str, 26);
setibss->activeKeyIdx = 0;
}
else if(strcasecmp(str, "key2") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(setibss->keys[1], str, 26);
setibss->activeKeyIdx = 1;
}
else if(strcasecmp(str, "key3") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(setibss->keys[2], str, 26);
setibss->activeKeyIdx = 2;
}
else if(strcasecmp(str, "key4") == 0)
{
DPRINT_INFO(WFA_OUT,"in key 4\n");
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(setibss->keys[3], str, 26);
setibss->activeKeyIdx = 3;
}
else if(strcasecmp(str, "activeKey") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
setibss->activeKeyIdx = atoi(str);
}
}
wfaEncodeTLV(WFA_STA_SET_IBSS_TLV, sizeof(caStaSetIBSS_t), (BYTE *)setibss, aBuf);
*aLen = 4+sizeof(caStaSetIBSS_t);
return TRUE;
}
int xcCmdProcDeviceGetInfo(char *pcmdStr, BYTE *aBuf, int *aLen)
{
dutCommand_t *dutCmd = (dutCommand_t *) (aBuf+sizeof(wfaTLV));
caDevInfo_t *dinfo = &dutCmd->cmdsu.dev;
char *str;
if(aBuf == NULL)
return FALSE;
memset(aBuf, 0, *aLen);
dinfo->fw = 0;
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL && str[0] == '\0')
{
if(strcasecmp(str, "firmware") == 0)
{
dinfo->fw = 1;
}
}
wfaEncodeTLV(WFA_DEVICE_GET_INFO_TLV, 0, NULL, aBuf);
*aLen = 4;
return TRUE;
}
int xcCmdProcStaGetInfo(char *pcmdStr, BYTE *aBuf, int *aLen)
{
char *str;
dutCommand_t *getInfo = (dutCommand_t *) (aBuf+sizeof(wfaTLV));
if(aBuf == NULL)
return FALSE;
memset(aBuf, 0, *aLen);
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
return FALSE;
if(strcasecmp(str, "interface") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(getInfo->intf, str, 15);
DPRINT_INFO(WFA_OUT, "interface %s\n", getInfo->intf);
}
wfaEncodeTLV(WFA_STA_GET_INFO_TLV, sizeof(dutCommand_t), (BYTE *)getInfo, aBuf);
*aLen = 4 + sizeof(dutCommand_t);
return TRUE;
}
int xcCmdProcStaGetTestData(char *pcmdStr, BYTE *aBuf, int *aLen)
{
char *str;
dutCommand_t *dutCmd = (dutCommand_t *) (aBuf+sizeof(wfaTLV));
caStaGetTestData_t *tdp = &dutCmd->cmdsu.tdata;
if(aBuf == NULL)
return FALSE;
memset(aBuf, 0, *aLen);
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
return FALSE;
if(strcasecmp(str, "testdata") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(strcasecmp(str, "voice") == 0)
{
tdp->type = 1;
DPRINT_INFO(WFA_OUT, "testdata voice %i\n", tdp->type);
}
}
wfaEncodeTLV(WFA_STA_GET_INFO_TLV, sizeof(dutCommand_t), (BYTE *)dutCmd, aBuf);
*aLen = 4 + sizeof(dutCommand_t);
return TRUE;
}
int xcCmdProcStaAssociate(char *pcmdStr, BYTE *aBuf, int *aLen)
{
dutCommand_t *setassoc = (dutCommand_t *) (aBuf+sizeof(wfaTLV));
char *str;
if(aBuf == NULL)
return FALSE;
memset(aBuf, 0, *aLen);
for(;;)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
break;
if(strcasecmp(str, "interface") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(setassoc->intf, str, 15);
DPRINT_INFO(WFA_OUT, "interface %s\n", setassoc->intf);
}
else if(strcasecmp(str, "ssid") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str != NULL){
strncpy(setassoc->cmdsu.ssid, str, 64);
DPRINT_INFO(WFA_OUT, "ssid %s\n", setassoc->cmdsu.ssid);
}
}
}
wfaEncodeTLV(WFA_STA_ASSOCIATE_TLV, sizeof(dutCommand_t), (BYTE *)setassoc, aBuf);
*aLen = 4+sizeof(dutCommand_t);
return TRUE;
}
int xcCmdProcStaReAssociate(char *pcmdStr, BYTE *aBuf, int *aLen)
{
dutCommand_t *setassoc = (dutCommand_t *) (aBuf+sizeof(wfaTLV));
char *str;
if(aBuf == NULL)
return FALSE;
memset(aBuf, 0, *aLen);
for(;;)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
break;
if(strcasecmp(str, "interface") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(setassoc->intf, str, 15);
DPRINT_INFO(WFA_OUT, "interface %s\n", setassoc->intf);
}
else if(strcasecmp(str, "bssid") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(setassoc->cmdsu.bssid, str, 64);
DPRINT_INFO(WFA_OUT, "bssid %s\n", setassoc->cmdsu.bssid);
}
}
wfaEncodeTLV(WFA_STA_REASSOCIATE_TLV, sizeof(dutCommand_t), (BYTE *)setassoc, aBuf);
*aLen = 4+sizeof(dutCommand_t);
return TRUE;
}
int xcCmdProcDeviceListIF(char *pcmdStr, BYTE *aBuf, int *aLen)
{
dutCommand_t *getdevlist = (dutCommand_t *) (aBuf+sizeof(wfaTLV));
char *str;
#ifdef DEBUG
int i;
#endif
if(aBuf == NULL)
return FALSE;
memset(aBuf, 0, *aLen);
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
return FALSE;
if(strcasecmp(str, "interfaceType") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(strcmp(str, "802.11") == 0)
getdevlist->cmdsu.iftype = IF_80211;
DPRINT_INFO(WFA_OUT, "interface type %i\n", getdevlist->cmdsu.iftype);
}
wfaEncodeTLV(WFA_DEVICE_LIST_IF_TLV, sizeof(dutCommand_t), (BYTE *)getdevlist, aBuf);
*aLen = 4 + sizeof(dutCommand_t);
#if DEBUG
for(i = 0; i< *aLen; i++)
DPRINT_INFO(WFA_OUT,"%x ", aBuf[i]);
DPRINT_INFO(WFA_OUT,"\n");
#endif
return TRUE;
}
int xcCmdProcStaSetUAPSD(char *pcmdStr, BYTE *aBuf, int *aLen)
{
caStaSetUAPSD_t *setuapsd = (caStaSetUAPSD_t *) (aBuf+sizeof(wfaTLV));
char *str;
if(aBuf == NULL)
return FALSE;
memset(aBuf, 0, *aLen);
memset(setuapsd, 0, sizeof(caStaSetUAPSD_t)); /* Added as per BRCM 1.3 ASD */
for(;;)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
break;
if(strcasecmp(str, "interface") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(setuapsd->intf, str, 15);
}
else if(strcasecmp(str, "ssid") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(setuapsd->ssid, str, 64);
}
else if(strcasecmp(str, "maxSPlength") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
setuapsd->maxSPLength = atoi(str);
}
else if(strcasecmp(str, "acBE") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
setuapsd->acBE = atoi(str);
}
else if(strcasecmp(str, "acBK") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
setuapsd->acBK = atoi(str);
}
else if(strcasecmp(str, "acVI") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
setuapsd->acVI = atoi(str);
}
else if(strcasecmp(str, "acVO") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
setuapsd->acVO = atoi(str);
}
}
/* Start: Added as per BRCM 1.3 ASD */
wfaEncodeTLV(WFA_STA_SET_UAPSD_TLV, sizeof(caStaSetUAPSD_t), (BYTE *)setuapsd, aBuf);
*aLen = 4+sizeof(caStaSetUAPSD_t);
/* End: Added as per BRCM 1.3 ASD */
return TRUE;
}
int xcCmdProcStaDebugSet(char *pcmdStr, BYTE *aBuf, int *aLen)
{
dutCommand_t *debugSet = (dutCommand_t *) (aBuf+sizeof(wfaTLV));
char *str;
if(aBuf == NULL)
return FALSE;
memset(aBuf, 0, *aLen);
for(;;)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
break;
if(strcasecmp(str, "level") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(atoi(str) == WFA_DEBUG_INFO || WFA_DEBUG_WARNING)
{
debugSet->cmdsu.dbg.level = atoi(str);
DPRINT_INFO(WFA_OUT, "dbg level %i\n", debugSet->cmdsu.dbg.level);
}
else
return FALSE; /* not support */
}
else if(strcasecmp(str, "enable") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
DPRINT_INFO(WFA_OUT,"enable %i\n", atoi(str));
switch(atoi(str)) /* enable */
{
case 1:
debugSet->cmdsu.dbg.state = 1;
DPRINT_INFO(WFA_OUT,"enable\n");
break;
case 0:
debugSet->cmdsu.dbg.state = 0;
DPRINT_INFO(WFA_OUT,"disable\n");
break;
default:
DPRINT_INFO(WFA_OUT,"wrong\n");
return FALSE; /* command invalid */
}
}
}
wfaEncodeTLV(WFA_STA_DEBUG_SET_TLV, sizeof(dutCommand_t), (BYTE *)debugSet, aBuf);
*aLen = 4 + sizeof(dutCommand_t);
return TRUE;
}
int xcCmdProcStaSetMode(char *pcmdStr, BYTE *aBuf, int *aLen)
{
caStaSetMode_t *setmode = (caStaSetMode_t *) (aBuf+sizeof(wfaTLV));
char *str;
if(aBuf == NULL)
return FALSE;
memset(aBuf, 0, *aLen);
for(;;)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
break;
if(strcasecmp(str, "interface") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(setmode->intf, str, 15);
}
else if(strcasecmp(str, "ssid") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(setmode->ssid, str, 64);
}
else if(strcasecmp(str, "encpType") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(strcasecmp(str, "wep") == 0)
setmode->encpType = ENCRYPT_WEP;
else
setmode->encpType = 0;
}
else if(strcasecmp(str, "key1") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy((char *)setmode->keys[0], str, 26);
DPRINT_INFO(WFA_OUT, "%s\n", setmode->keys[0]);
setmode->activeKeyIdx = 0;
}
else if(strcasecmp(str, "key2") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy((char *)setmode->keys[1], str, 26);
DPRINT_INFO(WFA_OUT, "%s\n", setmode->keys[1]);
}
else if(strcasecmp(str, "key3") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy((char *)setmode->keys[2], str, 26);
DPRINT_INFO(WFA_OUT, "%s\n", setmode->keys[2]);
}
else if(strcasecmp(str, "key4") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy((char *)setmode->keys[3], str, 26);
DPRINT_INFO(WFA_OUT, "%s\n", setmode->keys[3]);
}
else if(strcasecmp(str, "activeKey") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
setmode->activeKeyIdx = atoi(str);
}
else if(strcasecmp(str, "mode") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
DPRINT_INFO(WFA_OUT,"\r\n mode is %s\n",str);
if(strcasecmp(str, "adhoc") == 0)
setmode->mode = 1;
else
setmode->mode = 0;
}
else if(strcasecmp(str, "channel") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
setmode->channel = atoi(str);
}
else
{
DPRINT_INFO(WFA_WNG, "Incorrect Command, check syntax\n");
DPRINT_INFO(WFA_OUT,"\r\n mode is %s\n",str);
}
}
wfaEncodeTLV(WFA_STA_SET_MODE_TLV, sizeof(caStaSetMode_t), (BYTE *)setmode, aBuf);
*aLen = 4+sizeof(caStaSetMode_t);
return TRUE;
}
int xcCmdProcStaSetPwrSave(char *pcmdStr, BYTE *aBuf, int *aLen)
{
caStaSetPwrSave_t *setps = (caStaSetPwrSave_t *) (aBuf+sizeof(wfaTLV));
char *str;
if(aBuf == NULL)
return FALSE;
memset(aBuf, 0, *aLen);
for(;;)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
break;
if(strcasecmp(str, "interface") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(setps->intf, str, 15);
}
else if(strcasecmp(str, "mode") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(strcasecmp(str,"on") == 0)
setps->mode = 2;
else if(strcasecmp(str,"off") == 0)
setps->mode = 0;
else
return FALSE;
}
}
wfaEncodeTLV(WFA_STA_SET_PWRSAVE_TLV, sizeof(caStaSetPwrSave_t), (BYTE *)setps, aBuf);
*aLen = 4+sizeof(caStaSetPwrSave_t);
return TRUE;
}
int xcCmdProcStaSetWMM(char *pcmdStr, BYTE *aBuf, int *aLen)
{
caStaSetWMM_t *setwmm = (caStaSetWMM_t *) (aBuf+sizeof(wfaTLV));
char *str;
wfaTLV *hdr = (wfaTLV *)aBuf;
DPRINT_INFO(WFA_OUT, "start xcCmdProcStaSetWMM ...\n");
DPRINT_INFO(WFA_OUT, "params: %s\n", pcmdStr);
if(aBuf == NULL)
return FALSE;
memset(aBuf, 0, *aLen);
/* Some default values, in case they are not specified*/
for(;;)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
break;
if(strcasecmp(str, "interface") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(setwmm->intf, str, 15);
}
else if(strcasecmp(str, "GROUP") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(strcasecmp(str,"WMMAC") == 0)
setwmm->group = GROUP_WMMAC;
else if(strcasecmp(str,"WMM-CONFIG") == 0)
{
setwmm->group = GROUP_WMMCONF;
setwmm->actions.config.frag_thr = 2346;
setwmm->actions.config.rts_thr = 2346;
setwmm->actions.config.wmm = 1;
}
}
else if(strcasecmp(str, "ACTION") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(strcasecmp(str,"addts") == 0)
{
/* Put default values for the tspec element */
setwmm->action = WMMAC_ADDTS;
setwmm->actions.addts.accesscat = WMMAC_AC_BE;
setwmm->actions.addts.tspec.tsinfo.dummy1 = 1;
setwmm->actions.addts.tspec.tsinfo.dummy2 = 0;
}
else if(strcasecmp(str,"delts") == 0)
setwmm->action = WMMAC_DELTS;
DPRINT_INFO(WFA_OUT,"action is %d\n",setwmm->action);
}
else if(strcasecmp(str, "RTS_thr") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
setwmm->actions.config.rts_thr = atoi(str);
}
else if(strcasecmp(str, "wmm") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(atoi(str) != 0)
setwmm->actions.config.wmm = 1;
else
setwmm->actions.config.wmm = 0;
}
else if(strcasecmp(str, "Frag_thr") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
setwmm->actions.config.frag_thr = atoi(str);
}
else if(strcasecmp(str, "DIALOG_TOKEN") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
setwmm->actions.addts.dialog_token = atoi(str);
}
else if(strcasecmp(str, "TID") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(setwmm->action == WMMAC_ADDTS)
setwmm->actions.addts.tspec.tsinfo.TID = atoi(str);
else
setwmm->actions.delts = atoi(str);
}
else if(strcasecmp(str, "SENDTRIG") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(strcasecmp(str,"true") == 0)
setwmm->send_trig=1;
else
setwmm->send_trig=0;
}
else if(strcasecmp(str, "DEST") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(setwmm->dipaddr, str, 15);
}
else if(strcasecmp(str, "trigac") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(strcasecmp(str,"VO") == 0)
setwmm->trig_ac= TG_WMM_AC_VO;
else if(strcasecmp(str,"VI") == 0)
setwmm->trig_ac= TG_WMM_AC_VI;
else if(strcasecmp(str,"BE") == 0)
setwmm->trig_ac= TG_WMM_AC_BE;
else if(strcasecmp(str,"BK") == 0)
setwmm->trig_ac= TG_WMM_AC_BK;
}
else if(strcasecmp(str, "DIRECTION") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(strcasecmp(str,"UP") == 0)
setwmm->actions.addts.tspec.tsinfo.direction = WMMAC_UPLINK;
else if(strcasecmp(str,"DOWN") == 0)
setwmm->actions.addts.tspec.tsinfo.direction = WMMAC_DOWNLINK;
else if(strcasecmp(str,"BIDI") == 0)
setwmm->actions.addts.tspec.tsinfo.direction = WMMAC_BIDIR;
}
else if(strcasecmp(str, "PSB") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(strcasecmp(str,"UAPSD") == 0)
setwmm->actions.addts.tspec.tsinfo.PSB = 1;
else
setwmm->actions.addts.tspec.tsinfo.PSB = 0;
}
else if(strcasecmp(str, "UP") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
setwmm->actions.addts.tspec.tsinfo.UP = atoi(str);
}
else if(strcasecmp(str, "Fixed") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(strcasecmp(str, "true") == 0)
setwmm->actions.addts.tspec.Fixed = 1;
else
setwmm->actions.addts.tspec.Fixed = 0;
}
else if(strcasecmp(str, "SIZE") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
setwmm->actions.addts.tspec.size = atoi(str);
}
else if(strcasecmp(str, "MAXSIZE") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
setwmm->actions.addts.tspec.maxsize = atoi(str);
}
else if(strcasecmp(str, "MIN_SRVC_INTRVL") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
setwmm->actions.addts.tspec.min_srvc = atoi(str);
}
else if(strcasecmp(str, "MAX_SRVC_INTRVL") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
setwmm->actions.addts.tspec.max_srvc = atoi(str);
}
else if(strcasecmp(str, "INACTIVITY") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
setwmm->actions.addts.tspec.inactivity = atoi(str);
}
else if(strcasecmp(str, "SUSPENSION") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
setwmm->actions.addts.tspec.suspension = atoi(str);
}
else if(strcasecmp(str, "SRVCSTARTTIME") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
setwmm->actions.addts.tspec.srvc_strt_tim = atoi(str);
}
else if(strcasecmp(str, "MINDATARATE") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
setwmm->actions.addts.tspec.mindatarate = atoi(str);
}
else if(strcasecmp(str, "MEANDATARATE") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
setwmm->actions.addts.tspec.meandatarate = atoi(str);
}
else if(strcasecmp(str, "PEAKDATARATE") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
setwmm->actions.addts.tspec.peakdatarate = atoi(str);
}
else if(strcasecmp(str, "BURSTSIZE") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
setwmm->actions.addts.tspec.burstsize = atoi(str);
}
else if(strcasecmp(str, "DELAYBOUND") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
setwmm->actions.addts.tspec.delaybound = atoi(str);
}
else if(strcasecmp(str, "PHYRATE") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
setwmm->actions.addts.tspec.PHYrate = atoi(str);
}
else if(strcasecmp(str, "SBA") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
setwmm->actions.addts.tspec.sba = (float)atof(str);
}
else if(strcasecmp(str, "MEDIUM_TIME") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
setwmm->actions.addts.tspec.medium_time = atoi(str);
}
else if(strcasecmp(str, "ACCESSCAT") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(strcasecmp(str,"VO") == 0)
setwmm->actions.addts.accesscat = WMMAC_AC_VO;
else if(strcasecmp(str,"VI") == 0)
setwmm->actions.addts.accesscat = WMMAC_AC_VI;
else if(strcasecmp(str,"BE") == 0)
setwmm->actions.addts.accesscat = WMMAC_AC_BE;
else if(strcasecmp(str,"BK") == 0)
setwmm->actions.addts.accesscat = WMMAC_AC_BK;
}
}
if (setwmm->action == WMMAC_ADDTS) {
DPRINT_INFO(WFA_OUT, "ADDTS AC PARAMS: dialog id: %d, TID: %d, DIRECTION: %d, PSB: %d, UP: %d,\
Fixed %d, MSDU Size: %d, Max MSDU Size %d, MIN SERVICE INTERVAL: %d, MAX SERVICE INTERVAL: %d\
,INACTIVITY: %d,SUSPENSION %d,SERVICE START TIME: %d,MIN DATARATE: %d,MEAN DATA RATE: %d\
, PEAK DATA RATE: %d,BURSTSIZE: %d,DELAY BOUND: %d,PHYRATE: %d, SPLUSBW: %f,MEDIUM TIME: %d, ACCESSCAT: %d\n"\
,setwmm->actions.addts.dialog_token,setwmm->actions.addts.tspec.tsinfo.TID\
,setwmm->actions.addts.tspec.tsinfo.direction,setwmm->actions.addts.tspec.tsinfo.PSB,setwmm->actions.addts.tspec.tsinfo.UP\
,setwmm->actions.addts.tspec.Fixed,setwmm->actions.addts.tspec.size, setwmm->actions.addts.tspec.maxsize,\
setwmm->actions.addts.tspec.min_srvc,\
setwmm->actions.addts.tspec.max_srvc,setwmm->actions.addts.tspec.inactivity,setwmm->actions.addts.tspec.suspension,\
setwmm->actions.addts.tspec.srvc_strt_tim,setwmm->actions.addts.tspec.mindatarate,setwmm->actions.addts.tspec.meandatarate\
,setwmm->actions.addts.tspec.peakdatarate,setwmm->actions.addts.tspec.burstsize,\
setwmm->actions.addts.tspec.delaybound,setwmm->actions.addts.tspec.PHYrate,setwmm->actions.addts.tspec.sba,\
setwmm->actions.addts.tspec.medium_time,setwmm->actions.addts.accesscat);
}
else
DPRINT_INFO(WFA_OUT, "DELTS AC PARAMS: TID: %d\n", setwmm->actions.delts);
hdr->tag = WFA_STA_SET_WMM_TLV;
hdr->len = sizeof(caStaSetWMM_t);
memcpy(aBuf+4, setwmm, sizeof(caStaSetWMM_t));
*aLen = 4+sizeof(caStaSetWMM_t);
return TRUE;
}
int xcCmdProcStaNeigreq(char *pcmdStr, BYTE *aBuf, int *aLen)
{
dutCommand_t *neigreq = (dutCommand_t *) (aBuf+sizeof(wfaTLV));
char *str;
if(aBuf == NULL)
return FALSE;
memset(aBuf, 0, *aLen);
for(;;)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
break;
if(strcasecmp(str, "mac") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(neigreq->mac, str, WFA_MAC_ADDR_STR_LEN);
DPRINT_INFO(WFA_OUT, "mac %s\n", neigreq->mac);
}
else if(strcasecmp(str, "ssid") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str != NULL)
{
strncpy(neigreq->cmdsu.ssid, str, WFA_SSID_NAME_LEN);
DPRINT_INFO(WFA_OUT, "ssid %s\n", neigreq->cmdsu.ssid);
}
}
}
wfaEncodeTLV(WFA_STA_SEND_NEIGREQ_TLV, sizeof(dutCommand_t), (BYTE *)neigreq, aBuf);
*aLen = 4+sizeof(dutCommand_t);
return TRUE;
}
int xcCmdProcStaSetSystime(char *pcmdStr, BYTE *aBuf, int *aLen)
{
dutCommand_t *systime = (dutCommand_t *) (aBuf+sizeof(wfaTLV));
char *str;
int temp;
if(aBuf == NULL)
return FALSE;
memset(aBuf, 0, *aLen);
for(;;)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
break;
if(strcasecmp(str, "month") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
return FALSE;
temp = atoi(str);
/*
* If month is more than 2 character then error
* If it is 2 character and less than 10 and first char is not 0 like '1b'
* 'b7' etc. All possible errors input taken care
*/
if ((temp > 12 || temp < 1) || (strlen(str) > 2) ||
(strlen(str) == 2 && temp < 10 && str[0] != '0'))
{
DPRINT_ERR(WFA_OUT, "Wrong month input \n");
return FALSE;
}
systime->cmdsu.stime.month = temp;
DPRINT_INFO(WFA_OUT, "month %d\n", systime->cmdsu.stime.month);
}
else if(strcasecmp(str, "date") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
return FALSE;
temp = atoi(str);
if ((temp > 31 || temp < 1) || (strlen(str) > 2) ||
(strlen(str) == 2 && temp < 10 && str[0] != '0'))
{
DPRINT_ERR(WFA_OUT, "Wrong date input \n");
return FALSE;
}
/* In case of Linux there is no invalid date, all dates will be accepted and it will
* set to next corresponding valid date
* In case of win32 system will return error while setting bad date
*/
systime->cmdsu.stime.date = temp;
DPRINT_INFO(WFA_OUT, "date %d\n", systime->cmdsu.stime.date);
}
else if(strcasecmp(str, "year") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
return FALSE;
temp = atoi(str);
/*
* Unix date start from 1970, so lower limit kept
*/
if (temp < 1970 || strlen(str) > 4)
{
DPRINT_ERR(WFA_OUT, "Wrong year input\n");
return FALSE;
}
systime->cmdsu.stime.year = temp;
DPRINT_INFO(WFA_OUT, "year %d\n", systime->cmdsu.stime.year);
}
else if(strcasecmp(str, "hours") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
return FALSE;
temp = atoi(str);
if ((temp > 23 || temp < 0) || (strlen(str) > 2) ||
(strlen(str) == 2 && temp < 10 && str[0] != '0'))
{
DPRINT_ERR(WFA_OUT, "Wrong hours input \n");
return FALSE;
}
systime->cmdsu.stime.hours = temp;
DPRINT_INFO(WFA_OUT, "hours %d\n", systime->cmdsu.stime.hours);
}
else if(strcasecmp(str, "minutes") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
return FALSE;
temp = atoi(str);
if ((temp > 59 || temp < 0) || (strlen(str) > 2) ||
(strlen(str) == 2 && temp < 10 && str[0] != '0'))
{
DPRINT_ERR(WFA_OUT, "Wrong minutes input \n");
return FALSE;
}
systime->cmdsu.stime.minutes = temp;
DPRINT_INFO(WFA_OUT, "minutes %d\n", systime->cmdsu.stime.minutes);
}
else if(strcasecmp(str, "seconds") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
return FALSE;
temp = atoi(str);
if ((temp > 59 || temp < 0) || (strlen(str) > 2) ||
(strlen(str) == 2 && temp < 10 && str[0] != '0'))
{
DPRINT_ERR(WFA_OUT, "Wrong seconds input \n");
return FALSE;
}
systime->cmdsu.stime.seconds = temp;
DPRINT_INFO(WFA_OUT, "seconds %d\n", systime->cmdsu.stime.seconds);
}
}
wfaEncodeTLV(WFA_STA_SET_SYSTIME_TLV, sizeof(dutCommand_t), (BYTE *)systime, aBuf);
*aLen = 4+sizeof(dutCommand_t);
return TRUE;
}
#ifdef WFA_STA_TB
int xcCmdProcStaSet11n(char *pcmdStr, BYTE *aBuf, int *aLen)
{
dutCommand_t *Set11n = (dutCommand_t *) (aBuf+sizeof(wfaTLV));
char *str;
int smps;
if(aBuf == NULL)
return FALSE;
memset(aBuf, 0, *aLen);
for(;;)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
break;
/* 1 is for disable and 2 is for enable, as all values set to 0 initially */
if(strcasecmp(str, "40_intolerant") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
return FALSE;
if(strcasecmp(str, "enable") == 0)
Set11n->cmdsu.set11n.intolerant_40 = 2;
else if(strcasecmp(str, "disable") == 0)
Set11n->cmdsu.set11n.intolerant_40 = 1;
else
{
DPRINT_ERR(WFA_OUT, "not a proper action id\n");
return FALSE;
}
DPRINT_INFO(WFA_OUT, "40_intolerant %d\n", Set11n->cmdsu.set11n.intolerant_40);
}
else if(strcasecmp(str, "addba_reject") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
return FALSE;
if(strcasecmp(str, "enable") == 0)
Set11n->cmdsu.set11n.addba_reject = 2;
else if(strcasecmp(str, "disable") == 0)
Set11n->cmdsu.set11n.addba_reject = 1;
else
{
DPRINT_ERR(WFA_OUT, "not a proper action id\n");
return FALSE;
}
DPRINT_INFO(WFA_OUT, "addba_reject %d\n", Set11n->cmdsu.set11n.addba_reject);
}
else if(strcasecmp(str, "ampdu") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
return FALSE;
if(strcasecmp(str, "enable") == 0)
Set11n->cmdsu.set11n.ampdu = 2;
else if(strcasecmp(str, "disable") == 0)
Set11n->cmdsu.set11n.ampdu = 1;
else
{
DPRINT_ERR(WFA_OUT, "not a proper action id\n");
return FALSE;
}
DPRINT_INFO(WFA_OUT, "ampdu %d\n", Set11n->cmdsu.set11n.ampdu);
}
else if(strcasecmp(str, "amsdu") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
return FALSE;
if(strcasecmp(str, "enable") == 0)
Set11n->cmdsu.set11n.amsdu = 2;
else if(strcasecmp(str, "disable") == 0)
Set11n->cmdsu.set11n.amsdu = 1;
else
{
DPRINT_ERR(WFA_OUT, "not a proper action id\n");
return FALSE;
}
DPRINT_INFO(WFA_OUT, "amsdu %d\n", Set11n->cmdsu.set11n.amsdu);
}
else if(strcasecmp(str, "greenfield") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
return FALSE;
if(strcasecmp(str, "enable") == 0)
Set11n->cmdsu.set11n.greenfield = 2;
else if(strcasecmp(str, "disable") == 0)
Set11n->cmdsu.set11n.greenfield = 1;
else
{
DPRINT_ERR(WFA_OUT, "not a proper action id\n");
return FALSE;
}
DPRINT_INFO(WFA_OUT, "greenfield %d\n", Set11n->cmdsu.set11n.greenfield);
}
else if(strcasecmp(str, "sgi20") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
return FALSE;
if(strcasecmp(str, "enable") == 0)
Set11n->cmdsu.set11n.sgi20 = 2;
else if(strcasecmp(str, "disable") == 0)
Set11n->cmdsu.set11n.sgi20 = 1;
else
{
DPRINT_ERR(WFA_OUT, "not a proper action id\n");
return FALSE;
}
DPRINT_INFO(WFA_OUT, "sgi20 %d\n", Set11n->cmdsu.set11n.sgi20);
}
else if(strcasecmp(str, "stbc_rx") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
return FALSE;
Set11n->cmdsu.set11n.stbc_rx = atoi(str);
DPRINT_INFO(WFA_OUT, "stbc_rx %d\n", Set11n->cmdsu.set11n.stbc_rx);
}
else if(Set11n->cmdsu.set11n.stbc_rx == 0)
{
Set11n->cmdsu.set11n.stbc_rx = -1;
}
else if(strcasecmp(str, "width") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
return FALSE;
if(strcasecmp(str, "auto") == 0)
Set11n->cmdsu.set11n.width = -1;
else
Set11n->cmdsu.set11n.width = atoi(str);
DPRINT_INFO(WFA_OUT, "width %d\n", Set11n->cmdsu.set11n.width);
}
else if(strcasecmp(str, "mcs32") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
return FALSE;
if(strcasecmp(str, "enable") == 0)
Set11n->cmdsu.set11n.mcs32 = 2;
else if(strcasecmp(str, "disable") == 0)
Set11n->cmdsu.set11n.mcs32 = 1;
else
{
DPRINT_ERR(WFA_OUT, "not a proper action id\n");
return FALSE;
}
DPRINT_INFO(WFA_OUT, "mcs32 %d\n", Set11n->cmdsu.set11n.mcs32);
}
else if(strcasecmp(str, "smps") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
return FALSE;
smps = atoi(str);
smps++;
Set11n->cmdsu.set11n.smps = smps;
DPRINT_INFO(WFA_OUT, "smps %d\n", Set11n->cmdsu.set11n.smps);
}
else if(strcasecmp(str, "txsp_stream") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
return FALSE;
Set11n->cmdsu.set11n.txsp_stream = atoi(str);
DPRINT_INFO(WFA_OUT, "txsp_stream %d\n", Set11n->cmdsu.set11n.txsp_stream);
}
else if(strcasecmp(str, "rxsp_stream") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
return FALSE;
Set11n->cmdsu.set11n.rxsp_stream = atoi(str);
DPRINT_INFO(WFA_OUT, "rxsp_stream %d\n", Set11n->cmdsu.set11n.rxsp_stream);
}
else if(strcasecmp(str, "mcs_fixedrate") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
return FALSE;
Set11n->cmdsu.set11n.mcs_fixedrate = atoi(str);
if((Set11n->cmdsu.set11n.mcs_fixedrate > 31) || (Set11n->cmdsu.set11n.mcs_fixedrate < 0))
return FALSE;
DPRINT_INFO(WFA_OUT, "mcs_fixedrate %d\n", Set11n->cmdsu.set11n.mcs_fixedrate);
}
else
{
/* done to ignore mcs if it is not set */
Set11n->cmdsu.set11n.mcs_fixedrate = -1;
}
}
wfaEncodeTLV(WFA_STA_SET_11N_TLV, sizeof(dutCommand_t), (BYTE *)Set11n, aBuf);
*aLen = 4+sizeof(dutCommand_t);
return TRUE;
}
int xcCmdProcStaSetRIFSTest(char *pcmdStr, BYTE *aBuf, int *aLen)
{
dutCommand_t *rifstest = (dutCommand_t *) (aBuf+sizeof(wfaTLV));
char *str;
if(aBuf == NULL)
return FALSE;
memset(aBuf, 0, *aLen);
for(;;)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
break;
if(strcasecmp(str, "interface") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
return FALSE;
strncpy(rifstest->intf, str, WFA_IF_NAME_LEN);
DPRINT_INFO(WFA_OUT, "interface %s\n", rifstest->intf);
}
if(strcasecmp(str, "action") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
return FALSE;
if(strcasecmp(str, "enable") == 0)
rifstest->cmdsu.action_rifs = 2;
else if(strcasecmp(str, "disable") == 0)
rifstest->cmdsu.action_rifs = 1;
else
{
DPRINT_ERR(WFA_OUT, "not a proper action id\n");
return FALSE;
}
DPRINT_INFO(WFA_OUT, "action %d\n", rifstest->cmdsu.action_rifs);
}
}
wfaEncodeTLV(WFA_STA_SET_RIFS_TEST_TLV, sizeof(dutCommand_t), (BYTE *)rifstest, aBuf);
*aLen = 4 + sizeof(dutCommand_t);
return TRUE;
}
int xcCmdProcStaSetWireless(char *pcmdStr, BYTE *aBuf, int *aLen)
{
dutCommand_t *wireless = (dutCommand_t *) (aBuf+sizeof(wfaTLV));
char *str;
if(aBuf == NULL)
return FALSE;
memset(aBuf, 0, *aLen);
for(;;)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
break;
if(strcasecmp(str, "interface") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
return FALSE;
strncpy(wireless->intf, str, WFA_IF_NAME_LEN);
DPRINT_INFO(WFA_OUT, "interface %s\n", wireless->intf);
}
else if(strcasecmp(str, "band") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
return FALSE;
strncpy(wireless->cmdsu.wireless_band, str, strlen(str));
DPRINT_INFO(WFA_OUT, "band %s\n", wireless->cmdsu.wireless_band);
}
}
wfaEncodeTLV(WFA_STA_SET_WIRELESS_TLV, sizeof(dutCommand_t), (BYTE *)wireless, aBuf);
*aLen = 4+sizeof(dutCommand_t);
return TRUE;
}
int xcCmdProcStaSendAddba(char *pcmdStr, BYTE *aBuf, int *aLen)
{
dutCommand_t *addba = (dutCommand_t *) (aBuf+sizeof(wfaTLV));
char *str;
if(aBuf == NULL)
return FALSE;
memset(aBuf, 0, *aLen);
for(;;)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
break;
if(strcasecmp(str, "interface") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
return FALSE;
strncpy(addba->intf, str, WFA_IF_NAME_LEN);
DPRINT_INFO(WFA_OUT, "interface %s\n", addba->intf);
}
else if(strcasecmp(str, "tid") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
return FALSE;
addba->cmdsu.tid = atoi(str);
DPRINT_INFO(WFA_OUT, "tid %d\n", addba->cmdsu.tid);
}
}
wfaEncodeTLV(WFA_STA_SEND_ADDBA_TLV, sizeof(dutCommand_t), (BYTE *)addba, aBuf);
*aLen = 4+sizeof(dutCommand_t);
return TRUE;
}
int xcCmdProcStaSendCoexistMGMT(char *pcmdStr, BYTE *aBuf, int *aLen)
{
dutCommand_t *coexist = (dutCommand_t *) (aBuf+sizeof(wfaTLV));
char *str;
if(aBuf == NULL)
return FALSE;
memset(aBuf, 0, *aLen);
for(;;)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
break;
if(strcasecmp(str, "interface") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
return FALSE;
strncpy(coexist->intf, str, WFA_IF_NAME_LEN);
DPRINT_INFO(WFA_OUT, "interface %s\n", coexist->intf);
}
else if(strcasecmp(str, "type") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
return FALSE;
if(strcasecmp(str, "MHz") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
return FALSE;
if(strcasecmp(str, "value") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
return FALSE;
strncpy(coexist->cmdsu.coexistmgmt.Mhz, str, 1);
}
}
else if(strcasecmp(str, "BSS") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
return FALSE;
if(strcasecmp(str, "value") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
return FALSE;
strncpy(coexist->cmdsu.coexistmgmt.bss, str, 1);
}
}
else if(strcasecmp(str, "ChnlRepo") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
return FALSE;
if(strcasecmp(str, "value") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
return FALSE;
strncpy(coexist->cmdsu.coexistmgmt.ChnlRepo, str, strlen(str));
}
}
}
}
wfaEncodeTLV(WFA_STA_SEND_COEXIST_MGMT_TLV, sizeof(dutCommand_t), (BYTE *)coexist, aBuf);
*aLen = 4+sizeof(dutCommand_t);
return TRUE;
}
int xcCmdProcStaDisconnect(char *pcmdStr, BYTE *aBuf, int *aLen)
{
dutCommand_t *disconnect = (dutCommand_t *) (aBuf+sizeof(wfaTLV));
char *str;
if(aBuf == NULL)
return FALSE;
memset(aBuf, 0, *aLen);
for(;;)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
break;
if(strcasecmp(str, "interface") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
return FALSE;
strncpy(disconnect->intf, str, WFA_IF_NAME_LEN);
DPRINT_INFO(WFA_OUT, "intf %s\n", disconnect->intf);
}
}
wfaEncodeTLV(WFA_STA_DISCONNECT_TLV, sizeof(dutCommand_t), (BYTE *)disconnect, aBuf);
*aLen = 4+sizeof(dutCommand_t);
return TRUE;
}
#endif /* WFA_STA_TB */
int xcCmdProcStaResetDefault(char *pcmdStr, BYTE *aBuf, int *aLen)
{
caStaResetDefault_t *reset = (caStaResetDefault_t *) (aBuf+sizeof(wfaTLV));
char *str;
if(aBuf == NULL)
return FALSE;
memset(aBuf, 0, *aLen);
for(;;)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
break;
if(strcasecmp(str, "interface") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(reset->intf, str, 15);
}
else if(strcasecmp(str, "program") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(reset->prog, str, 16);
}
}
wfaEncodeTLV(WFA_STA_RESET_DEFAULT_TLV, sizeof(caStaResetDefault_t), (BYTE *)reset, aBuf);
*aLen = 4+sizeof(caStaResetDefault_t);
return TRUE;
}
int xcCmdProcStaSetEapFAST(char *pcmdStr, BYTE *aBuf, int *aLen)
{
caStaSetEapFAST_t *setsec = (caStaSetEapFAST_t *) (aBuf+sizeof(wfaTLV));
char *str;
if(aBuf == NULL)
return FALSE;
memset(aBuf, 0, *aLen);
for(;;)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
break;
if(strcasecmp(str, "interface") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(setsec->intf, str, 15);
}
else if(strcasecmp(str, "ssid") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(setsec->ssid, str, 64);
}
else if(strcasecmp(str, "username") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strcpy(setsec->username, str);
}
else if(strcasecmp(str, "password") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strcpy(setsec->passwd, str);
}
else if(strcasecmp(str, "keyMgmtType") == 0)
{
str=strtok_r(NULL, ",", &pcmdStr);
strncpy(setsec->keyMgmtType, str, 7);
}
else if(strcasecmp(str, "encpType") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(setsec->encrptype, str, 8);
}
else if(strcasecmp(str, "trustedRootCA") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(setsec->trustedRootCA, str,31);
}
else if(strcasecmp(str, "innerEAP") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strcpy(setsec->innerEAP, str);
}
else if(strcasecmp(str, "validateServer") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(strcasecmp(str, "yes") == 0)
{
setsec->validateServer=1;
}
else if(strcasecmp(str, "no") == 0)
{
setsec->validateServer=0;
}
}
else if(strcasecmp(str, "pacFile") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strcpy(setsec->pacFileName, str);
}
}
wfaEncodeTLV(WFA_STA_SET_EAPFAST_TLV, sizeof(caStaSetEapFAST_t), (BYTE *)setsec, aBuf);
*aLen = 4+sizeof(caStaSetEapFAST_t);
return TRUE;
}
int xcCmdProcStaSetEapAKA(char *pcmdStr, BYTE *aBuf, int *aLen)
{
caStaSetEapAKA_t *setsec = (caStaSetEapAKA_t *) (aBuf+sizeof(wfaTLV));
char *str;
if(aBuf == NULL)
return FALSE;
memset(aBuf, 0, *aLen);
for(;;)
{
str = strtok_r(NULL, ",", &pcmdStr);
if(str == NULL || str[0] == '\0')
break;
if(strcasecmp(str, "interface") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(setsec->intf, str, 15);
}
else if(strcasecmp(str, "ssid") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(setsec->ssid, str, 64);
}
else if(strcasecmp(str, "username") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strcpy(setsec->username, str);
}
else if(strcasecmp(str, "password") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strcpy(setsec->passwd, str);
}
else if(strcasecmp(str, "keyMgmtType") == 0)
{
str=strtok_r(NULL, ",", &pcmdStr);
strncpy(setsec->keyMgmtType, str, 7);
}
else if(strcasecmp(str, "encpType") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy(setsec->encrptype, str, 8);
}
else if(strcasecmp(str, "triplet1") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy((char *)setsec->tripletSet[0], str, 63);
DPRINT_INFO(WFA_OUT, "Triplet1 : %s\n", setsec->tripletSet[0]);
setsec->tripletCount = 1;
}
else if(strcasecmp(str, "triplet2") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy((char *)setsec->tripletSet[1], str, 63);
DPRINT_INFO(WFA_OUT, "Triplet2 : %s\n", setsec->tripletSet[1]);
setsec->tripletCount=2;
}
else if(strcasecmp(str, "triplet3") == 0)
{
str = strtok_r(NULL, ",", &pcmdStr);
strncpy((char *)setsec->tripletSet[2], str, 63);
DPRINT_INFO(WFA_OUT, "Triplet1 : %s\n", setsec->tripletSet[2]);
setsec->tripletCount = 3;
}
}
wfaEncodeTLV(WFA_STA_SET_EAPAKA_TLV, sizeof(caStaSetEapAKA_t), (BYTE *)setsec, aBuf);
*aLen = 4+sizeof(caStaSetEapAKA_t);
return TRUE;
}