📄 zdshared.c
字号:
body[3] = (Seq & 0xff00) >> 8;
body[4] = Status & 0xff; //Status
body[5] = (Status & 0xff00) >> 8;
len = 6;
if ((Alg == SHARE_KEY) && ((Seq == 2)|| (Seq == 3)) && (pChalng)) {
body[len] = EID_CTEXT;
body[len+1] = CHAL_TEXT_LEN;
memcpy(&body[len+2], pChalng, CHAL_TEXT_LEN);
len += (2+CHAL_TEXT_LEN);
}
pf->bodyLen = len;
}
void mkRe_AsocRspFrm(FrmDesc_t* pfrmDesc, TypeSubtype subType, MacAddr_t *addr1,
U16 Cap, U16 Status, U16 Aid, Element *pSupRates, Element *pExtRates, U8 vapId)
{
U8 *body;
U8 elemLen;
U16 len;
Frame_t *pf = pfrmDesc->mpdu;
setFrameType(pf, subType);
pf->body = pfrmDesc->buffer;
body = pf->body;
setAddr1(pf, addr1);
setAddr2(pf, &dot11MacAddress);
setAddr3(pf, &mBssId);
pf->HdrLen = MAC_HDR_LNG;
body[0] = Cap & 0xff; //Cap
body[1] = (Cap & 0xff00) >> 8;
body[2] = Status & 0xff; //Status
body[3] = (Status & 0xff00) >> 8;
body[4] = Aid & 0xff; //AID
body[5] = (Aid & 0xff00) >> 8;
len = 6;
elemLen = pSupRates->buf[1]+2;
memcpy(&body[len], (U8 *)pSupRates, elemLen); //Support Rates
len += elemLen;
if ((mMacMode != PURE_B_MODE) && (PURE_A_MODE != mMacMode) && (pExtRates)){
elemLen = pExtRates->buf[1]+2;
memcpy(&body[len], (U8 *)pExtRates, elemLen); //Extended rates
len += elemLen;
}
pf->bodyLen = len;
}
void mkProbeRspFrm(FrmDesc_t* pfrmDesc, MacAddr_t *addr1, U16 BcnInterval,
U16 Cap, Element *pSsid, Element *pSupRates, Element *pDsParms,
Element *pExtRates, Element *pWpa, U8 vapId)
{
struct zd1205_private *macp=g_dev->priv;
U8 *body;
U8 elemLen;
U16 len;
Frame_t *pf = pfrmDesc->mpdu;
setFrameType(pf, ST_PROBE_RSP);
pf->body = pfrmDesc->buffer;
body = pf->body;
setAddr1(pf, addr1);
setAddr2(pf, &dot11MacAddress);
setAddr3(pf, &mBssId);
pf->HdrLen = MAC_HDR_LNG;
body[8] = BcnInterval & 0xff; //BcnPeriod
body[9] = (BcnInterval & 0xff00) >> 8;
body[10] = Cap & 0xff; //Cap
body[11] = (Cap & 0xff00) >> 8;
len = 12;
elemLen = pSsid->buf[1]+2;
memcpy(&body[len], (U8 *)pSsid, elemLen); //SSID
len += elemLen;
elemLen = pSupRates->buf[1]+2;
memcpy(&body[len], (U8 *)pSupRates, elemLen); //Suported rates
len += elemLen;
elemLen = pDsParms->buf[1]+2;
memcpy(&body[len], (U8 *)pDsParms, elemLen); //Extended rates
len += elemLen;
if ((mMacMode != PURE_B_MODE)&& (mMacMode != PURE_A_MODE) && (pExtRates)){
elemLen = pExtRates->buf[1]+2;
memcpy(&body[len], (U8 *)pExtRates, elemLen); //Extended rates
len += elemLen;
}
#if 0
if (((mDynKeyMode == DYN_KEY_TKIP) || (mDynKeyMode == DYN_KEY_AES)) && (pWpa)){
elemLen = pWpa->buf[1]+2;
memcpy(&body[len], (U8 *)pWpa, elemLen); //WPA IE
len += elemLen;
}
#endif
//if (((mDynKeyMode == DYN_KEY_TKIP) || (mDynKeyMode == DYN_KEY_AES)) && (pWpa)){
if (macp->cardSetting.WPAIeLen)
{
//elemLen = pWpa->buf[1]+2;
//memcpy(&body[len], (U8 *)pWpa, elemLen); //WPA IE
memcpy(&body[len], macp->cardSetting.WPAIe, macp->cardSetting.WPAIeLen);
len += macp->cardSetting.WPAIeLen;
}
pf->bodyLen = len;
}
void mkDisAssoc_DeAuthFrm(FrmDesc_t* pfrmDesc, TypeSubtype subType, MacAddr_t *addr1,
U16 Reason, U8 vapId)
{
U8 *body;
Frame_t *pf = pfrmDesc->mpdu;
setFrameType(pf, subType);
pf->body = pfrmDesc->buffer;
body = pf->body;
setAddr1(pf, addr1);
setAddr2(pf, &dot11MacAddress);
setAddr3(pf, &mBssId);
pf->HdrLen = MAC_HDR_LNG;
body[0] = Reason & 0xff; //Reason Code
body[1] = (Reason & 0xff00) >> 8;
pf->bodyLen = 2;
}
void sendProbeRspFrm(MacAddr_t *addr1, U16 BcnInterval, U16 Cap,
Element *pSsid, Element *pSupRates, Element *pDsParms,
Element *pExtRates, Element *pWpa, U8 vapId)
{
Signal_t *signal;
FrmDesc_t *pfrmDesc;
if ((signal = allocSignal()) == NULL)
return;
if ((pfrmDesc = allocFdesc()) == NULL){
freeSignal(signal);
return;
}
mkProbeRspFrm(pfrmDesc, addr1, BcnInterval, Cap, pSsid, pSupRates, pDsParms,
pExtRates, pWpa, vapId);
sendMgtFrame(signal, pfrmDesc);
}
void mkProbeReqFrm(FrmDesc_t* pfrmDesc, MacAddr_t *addr1, Element *pSsid, Element *pSupRates,
Element *pExtRates, Element *pWpa, U8 vapId)
{
U8 *body;
U8 elemLen;
U16 len;
Frame_t *pf = pfrmDesc->mpdu;
setFrameType(pf, ST_PROBE_REQ);
pf->body = pfrmDesc->buffer;
body = pf->body;
setAddr1(pf, addr1);
setAddr2(pf, &dot11MacAddress);
setAddr3(pf, &dot11BCAddress);
pf->HdrLen = MAC_HDR_LNG;
len = 0;
if (pSsid->buf[1] > 0){
elemLen = pSsid->buf[1]+2;
memcpy(&body[len], (U8 *)pSsid, elemLen); //Extended rates
len += elemLen;
} else {
body[0] = pSsid->buf[0];
body[1] = 0; //broadcast SSID
len += 2;
}
elemLen = pSupRates->buf[1]+2;
memcpy(&body[len], (U8 *)pSupRates, elemLen); //Extended rates
len += elemLen;
if ((mMacMode != PURE_A_MODE) && (mMacMode != PURE_B_MODE) && (pExtRates)){
elemLen = pExtRates->buf[1]+2;
memcpy(&body[len], (U8 *)pExtRates, elemLen); //Extended rates
len += elemLen;
}
if ((mDynKeyMode == DYN_KEY_TKIP) && (pWpa)){
elemLen = pWpa->buf[1]+2;
memcpy(&body[len], (U8 *)pWpa, elemLen); //WPA IE
len += elemLen;
}
pf->bodyLen = len;
}
void mkRe_AsocReqFrm(FrmDesc_t* pfrmDesc, TypeSubtype subType, MacAddr_t *addr1,
U16 Cap, U16 LisInterval, MacAddr_t *oldAP, Element *pSsid, Element *pSupRates,
Element *pExtRates, Element *pWpa, U8 vapId)
{
U8 *body;
U8 elemLen;
U16 len;
Frame_t *pf = pfrmDesc->mpdu;
setFrameType(pf, subType);
pf->body = pfrmDesc->buffer;
body = pf->body;
setAddr1(pf, addr1);
setAddr2(pf, &dot11MacAddress);
setAddr3(pf, &mBssId);
pf->HdrLen = MAC_HDR_LNG;
body[0] = Cap & 0xff; //Cap
body[1] = (Cap & 0xff00) >> 8;
body[2] = LisInterval & 0xff; //LisInterval
body[3] = (LisInterval & 0xff00) >> 8;
len = 4;
if (subType == ST_REASOC_REQ){
memcpy(&body[4], oldAP, 6);
len = 10;
}
elemLen = pSsid->buf[1]+2;
memcpy(&body[len], (U8 *)pSsid, elemLen); //SSID
len += elemLen;
#if ZDCONF_LP_SUPPORT == 1
if(pdot11Obj->LP_MODE || pdot11Obj->BURST_MODE)
{
BssInfo_t *bs=NULL;
bs=zd1212_bssid_to_BssInfo(mBssId.mac);
if(bs != NULL)
{
body[len++] = EID_ZYDAS;
body[len++] = 7;
body[len++] = (U8)(ZDOUI_TURBO);
body[len++] = (U8)(ZDOUI_TURBO >> 8);
body[len++] = (U8)(ZDOUI_TURBO >> 16);
body[len++] = 0; //OUI Type
body[len++] = 0; //OUI SubType
body[len++] = 1; //Version
body[len] = 0;
if(bs->zdIE_BURST.buf[0] == EID_ZYDAS)
{
if(bs->zdIE_BURST.buf[8] & BIT_7)
body[len] |= pdot11Obj->BURST_MODE;
}
if(bs->zdIE_AMSDU.buf[0] == EID_ZYDAS)
{
if(bs->zdIE_AMSDU.buf[8] & BIT_0)
body[len] |= (pdot11Obj->LP_MODE?BIT_1:0);
}
len++;
}
}
#endif
#ifdef DEBUG_DUMP_ASSOC_REQ
zd1205_dump_data("SSID element:", (U8*) &body[len-elemLen], elemLen);
#endif
elemLen = pSupRates->buf[1]+2;
memcpy(&body[len], (U8 *)pSupRates, elemLen); //Support Rates
len += elemLen;
#ifdef DEBUG_DUMP_ASSOC_REQ
zd1205_dump_data("SupportedRate element:", (U8*) &body[len-elemLen], elemLen);
#endif
if ((mMacMode != PURE_B_MODE) && (mMacMode != PURE_A_MODE)&& (pExtRates)){
elemLen = pExtRates->buf[1]+2;
memcpy(&body[len], (U8 *)pExtRates, elemLen); //Extended rates
len += elemLen;
}
// WPA IE
if (pWpa->buf[1] != 0) {
elemLen = pWpa->buf[1]+2;
memcpy(&body[len], (U8 *)pWpa, elemLen); // WPA IE
len += elemLen;
}
pf->bodyLen = len;
}
BOOLEAN sendPsPollFrame(Signal_t *signal, FrmDesc_t *pfrmDesc, MacAddr_t *addr1, U16 aid)
{
FrmInfo_t *pfrmInfo;
Frame_t *pf = pfrmDesc->mpdu;
setFrameType(pf, ST_PS_POLL);
setAid(pf, aid);
setAddr1(pf, addr1);
setAddr2(pf, &dot11MacAddress);
pf->HdrLen = 16;
pf->bodyLen = 0;
pfrmDesc->ConfigSet |= PS_POLL_SET;
pfrmDesc->ConfigSet &= ~INTRA_BSS_SET;
pfrmDesc->ConfigSet &= ~EAPOL_FRAME_SET;
pfrmDesc->pHash = NULL;
signal->buf = NULL;
signal->bDataFrm = 0;
//pfrmDesc->bDataFrm = 0;
pfrmInfo = &signal->frmInfo;
pfrmInfo->frmDesc = pfrmDesc; //make connection for signal and frmDesc
return SendPkt(signal, pfrmDesc, TRUE);
}
BOOLEAN sendNullDataFrame(Signal_t *signal, FrmDesc_t *pfrmDesc, MacAddr_t *addr1)
{
Frame_t *pf = pfrmDesc->mpdu;
setFrameType(pf, ST_NULL_FRAME);
pf->header[1] = TO_DS_BIT;
if (mPwrState){
pf->header[1] |= PW_SAVE_BIT;
}
else
pf->header[1] &= ~PW_SAVE_BIT;
setAddr1(pf, addr1);
setAddr2(pf, &dot11MacAddress);
setAddr3(pf, &mBssId);
pf->HdrLen = MAC_HDR_LNG;
pf->bodyLen = 0;
pfrmDesc->ConfigSet &= ~INTRA_BSS_SET;
pfrmDesc->ConfigSet &= ~EAPOL_FRAME_SET;
pfrmDesc->pHash = NULL;
signal->buf = NULL;
signal->bDataFrm = 1;
//pfrmDesc->bDataFrm = 0;
mkFragment(signal, pfrmDesc, NULL);
return SendPkt(signal, pfrmDesc, TRUE);
}
U8 RateConvert(U8 rate)
{
#if defined(OFDM)
switch (rate)
{
case 2 : return 0; // 1M
case 4 : return 1; // 2M
case 11 : return 2; // 5.5M
case 22 : return 3; // 11M
case 12 : return 4; // 6M
case 18 : return 5; // 9M
case 24 : return 6; // 12M
case 36 : return 7; // 18M
case 48 : return 8; // 24M
case 72 : return 9; // 36M
case 96 : return 0xa; // 48M
case 108: return 0xb; // 54M
}
#else
switch (rate)
{
case 2 : return 0; // 1M
case 4 : return 1; // 2M
case 11 : return 2; // 5.5M
case 22 : return 3; // 11M
case 33 : return 4; // 16.5M
case 44 : return 5; // 22M
case 55 : return 6; // 27.5M
#if defined(ECCK_60_5)
case 66 : return 7; // 33M
case 77 : return 8; // 38.5M
case 88 : return 9; // 44M
case 99 : return 10; // 49.5M
case 110: return 11; // 55M
case 121: return 12; // 60.5M
#endif
}
#endif
return 3; // 11M
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -