📄 zdshared.c
字号:
case ST_REASOC_RSP: k = 6; n = 2; if ((mDynKeyMode == DYN_KEY_TKIP) || (mDynKeyMode == DYN_KEY_AES)) n++; break; default: elem->buf[1] = 0; return FALSE; } //while(n--){ while(k < frame->bodyLen) { pos = frame->body[k]; len = frame->body[k+1] + 2; if ((pos == eleID) && (len <= max_len)) { //match if (eleID == EID_WPA) //Valid WPA IE { if (len > 20) { memcpy((U8 *)elem, &frame->body[k], len); return TRUE; } else k += len; } else { memcpy((U8 *)elem, &frame->body[k], len); return TRUE; } } else { k += len; } } elem->buf[1] = 0; //set element length to zero return FALSE; }#endif BOOLEAN getElem(Frame_t *frame, ElementID eleID, Element *elem) { U8 k = 0; //offset bytes to first element U8 pos; //current position U8 len; U8 max_len = 130; switch (frmType(frame)) { case ST_PROBE_REQ: k = 0; break; case ST_ASOC_REQ: k = 4; break; case ST_REASOC_REQ: k = 10; break; case ST_AUTH: k = 6; break; case ST_BEACON: case ST_PROBE_RSP: k = 12; break; case ST_ASOC_RSP: case ST_REASOC_RSP: k = 6; break; default: elem->buf[1] = 0; return FALSE; } //jxiao while (k < frame->bodyLen) { pos=frame->body[k]; len=frame->body[k+1]+2; if ((pos==eleID) && (len <= max_len)) { if (eleID == EID_WPA)//The WMM and WPA use the same Element ID. { if (len > 20) { u8 WPA_OUI[4]={0x00, 0x50, 0xF2, 0x01}; //u8 WMM_OUI[4]={0x00, 0x50, 0xF2, 0x02}; if (memcmp (WPA_OUI, (u8*)&frame->body[k+2], 4)==0) { memcpy((U8 *)elem, &frame->body[k], len); return TRUE; } //else if (memcmp (WMM_OUI, (u8*)&frame->body[k+2], 4)==0) //{ // memcpy((U8 *)&elem->buf[0]+128, &frame->body[k], len); //return TRUE; //} else k += len; } else k += len; } else { memcpy((U8 *)elem, &frame->body[k], len); return TRUE; } } else { k += len; } } elem->buf[1]=0; return FALSE; } void mkAuthFrm(FrmDesc_t* pfrmDesc, MacAddr_t *addr1, U16 Alg, U16 Seq, U16 Status, U8 *pChalng, U8 vapId) { U8 *body; U16 len; Frame_t *pf = pfrmDesc->mpdu; setFrameType(pf, ST_AUTH); pf->body = pfrmDesc->buffer; body = pf->body; setAddr1(pf, addr1); setAddr2(pf, &dot11MacAddress); setAddr3(pf, &mBssId); pf->HdrLen = MAC_HDR_LNG; body[0] = Alg & 0xff; //AuthAlg body[1] = (Alg & 0xff00) >> 8; body[2] = Seq & 0xff; //AuthSeq 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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -