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

📄 auth.c

📁 TP Link 321 Linux Driver
💻 C
📖 第 1 页 / 共 2 页
字号:
                        MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_AUTH_CONF, 2, &Status2);                        return;                    }                                        DBGPRINT(RT_DEBUG_TRACE, "AUTH - Send AUTH request seq#3...\n");                    MgtMacHeaderInit(pAd, &AuthHdr, SUBTYPE_AUTH, 0, Addr2, pAd->MlmeAux.Bssid);                    AuthHdr.FC.Wep = 1;                    // Encrypt challenge text & auth information                    RTMPInitWepEngine(                    	pAd,                    	pAd->SharedKey[pAd->PortCfg.DefaultKeyId].Key,                    	pAd->PortCfg.DefaultKeyId,                    	pAd->SharedKey[pAd->PortCfg.DefaultKeyId].KeyLen,                    	CyperChlgText);#ifdef BIG_ENDIAN                    Alg = SWAP16(*(USHORT *)&Alg);                    Seq = SWAP16(*(USHORT *)&Seq);                    RemoteStatus= SWAP16(*(USHORT *)&RemoteStatus);#endif                    RTMPEncryptData(pAd, (PUCHAR) &Alg, CyperChlgText + 4, 2);                    RTMPEncryptData(pAd, (PUCHAR) &Seq, CyperChlgText + 6, 2);                    RTMPEncryptData(pAd, (PUCHAR) &RemoteStatus, CyperChlgText + 8, 2);                    Element[0] = 16;                    Element[1] = 128;                    RTMPEncryptData(pAd, Element, CyperChlgText + 10, 2);                    RTMPEncryptData(pAd, ChlgText, CyperChlgText + 12, 128);                    RTMPSetICV(pAd, CyperChlgText + 140);                    MakeOutgoingFrame(pOutBuffer,               &FrameLen,                                       sizeof(HEADER_802_11),    &AuthHdr,                                        CIPHER_TEXT_LEN + 16,     CyperChlgText,                                       END_OF_ARGS);                                        MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, FrameLen);                    RTMPSetTimer(&pAd->MlmeAux.AuthTimer, AUTH_TIMEOUT);                    pAd->Mlme.AuthMachine.CurrState = AUTH_WAIT_SEQ4;                }            }             else             {                pAd->PortCfg.AuthFailReason = Status;                COPY_MAC_ADDR(pAd->PortCfg.AuthFailSta, Addr2);                pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE;                MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_AUTH_CONF, 2, &Status);            }        }    }    else    {        DBGPRINT(RT_DEBUG_TRACE, "AUTH - PeerAuthSanity() sanity check fail\n");    }}/*    ==========================================================================    Description:    ========================================================================== */VOID PeerAuthRspAtSeq4Action(    IN PRTMP_ADAPTER pAd,     IN MLME_QUEUE_ELEM *Elem) {    UCHAR       Addr2[MAC_ADDR_LEN];    USHORT      Alg, Seq, Status;    CHAR        ChlgText[CIPHER_TEXT_LEN];	BOOLEAN     TimerCancelled;        if(PeerAuthSanity(pAd, Elem->Msg, Elem->MsgLen, Addr2, &Alg, &Seq, &Status, ChlgText))    {        if(MAC_ADDR_EQUAL(&(pAd->MlmeAux.Bssid), Addr2) && Seq == 4)         {            DBGPRINT(RT_DEBUG_TRACE, "AUTH - Receive AUTH_RSP seq#4 to me\n");            RTMPCancelTimer(&pAd->MlmeAux.AuthTimer,&TimerCancelled);                        if(Status != MLME_SUCCESS)             {                pAd->PortCfg.AuthFailReason = Status;                COPY_MAC_ADDR(pAd->PortCfg.AuthFailSta, Addr2);            }             pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE;            MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_AUTH_CONF, 2, &Status);        }    }    else    {        DBGPRINT(RT_DEBUG_TRACE, "AUTH - PeerAuthRspAtSeq4Action() sanity check fail\n");    }}/*    ==========================================================================    Description:    ========================================================================== */VOID MlmeDeauthReqAction(    IN PRTMP_ADAPTER pAd,     IN MLME_QUEUE_ELEM *Elem) {    MLME_DEAUTH_REQ_STRUCT      *pInfo;    HEADER_802_11               DeauthHdr;    PUCHAR                      pOutBuffer = NULL;    ULONG                       FrameLen = 0;    USHORT                      Status;    USHORT                      NStatus;        pInfo = (MLME_DEAUTH_REQ_STRUCT *)Elem->Msg;    // allocate and send out DeauthReq frame    NStatus = MlmeAllocateMemory(pAd, (PVOID *)&pOutBuffer);  //Get an unused nonpaged memory    if (NStatus != NDIS_STATUS_SUCCESS)    {        DBGPRINT(RT_DEBUG_TRACE, "AUTH - MlmeDeauthReqAction() allocate memory fail\n");        pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE;        Status = MLME_FAIL_NO_RESOURCE;        MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_DEAUTH_CONF, 2, &Status);        return;    }    DBGPRINT(RT_DEBUG_TRACE, "AUTH - Send DE-AUTH request (Reason=%d)...\n", pInfo->Reason);    MgtMacHeaderInit(pAd, &DeauthHdr, SUBTYPE_DEAUTH, 0, pInfo->Addr, pAd->MlmeAux.Bssid);    MakeOutgoingFrame(pOutBuffer,               &FrameLen,                       sizeof(HEADER_802_11),    &DeauthHdr,                       2,                        &pInfo->Reason,                       END_OF_ARGS);                          MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, FrameLen);        pAd->PortCfg.DeauthReason = pInfo->Reason;    COPY_MAC_ADDR(pAd->PortCfg.DeauthSta, pInfo->Addr);    pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE;    Status = MLME_SUCCESS;    MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_DEAUTH_CONF, 2, &Status);}/*    ==========================================================================    Description:    ========================================================================== */VOID AuthTimeoutAction(    IN PRTMP_ADAPTER pAd,     IN MLME_QUEUE_ELEM *Elem) {    USHORT Status;        DBGPRINT(RT_DEBUG_TRACE, "AUTH - AuthTimeoutAction\n");    pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE;    Status = MLME_REJ_TIMEOUT;    MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_AUTH_CONF, 2, &Status);}/*    ==========================================================================    Description:    ========================================================================== */VOID InvalidStateWhenAuth(    IN PRTMP_ADAPTER pAd,     IN MLME_QUEUE_ELEM *Elem) {    USHORT  Status;    DBGPRINT(RT_DEBUG_TRACE, "AUTH - InvalidStateWhenAuth (state=%d), reset AUTH state machine\n", pAd->Mlme.AuthMachine.CurrState);    pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE;    Status = MLME_STATE_MACHINE_REJECT;    MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_AUTH_CONF, 2, &Status);}/*    ==========================================================================    Description:        Some STA/AP    Note:        This action should never trigger AUTH state transition, therefore we        separate it from AUTH state machine, and make it as a standalone service    ========================================================================== */VOID Cls2errAction(    IN PRTMP_ADAPTER pAd,     IN PUCHAR pAddr) {    HEADER_802_11   DeauthHdr;    PUCHAR          pOutBuffer = NULL;    ULONG           FrameLen = 0;    USHORT          Reason = REASON_CLS2ERR;    USHORT          NStatus;        // allocate memory    NStatus = MlmeAllocateMemory(pAd, (PVOID *)&pOutBuffer);  //Get an unused nonpaged memory    if (NStatus != NDIS_STATUS_SUCCESS)        return;    DBGPRINT(RT_DEBUG_TRACE, "AUTH - Class 2 error, Send DEAUTH frame...\n");    MgtMacHeaderInit(pAd, &DeauthHdr, SUBTYPE_DEAUTH, 0, pAddr, pAd->MlmeAux.Bssid);    MakeOutgoingFrame(pOutBuffer,               &FrameLen,                       sizeof(HEADER_802_11),    &DeauthHdr,                       2,                        &Reason,                       END_OF_ARGS);    MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, FrameLen);        pAd->PortCfg.DeauthReason = Reason;    COPY_MAC_ADDR(pAd->PortCfg.DeauthSta, pAddr);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -