⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zdshared.c

📁 ZYDAS zd1211b driver for Linux2.4
💻 C
📖 第 1 页 / 共 3 页
字号:
                                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 + -