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

📄 assoc.c

📁 华硕无线网卡 167G linux 驱动
💻 C
📖 第 1 页 / 共 3 页
字号:
				// Mask out unnecessary capability information				CapabilityInfo &= SUPPORTED_CAPABILITY_INFO;  // pAd->PortCfg.SupportedCapabilityInfo;                AssocPostProc(pAd, &Addr2, CapabilityInfo, Aid, Rates, RatesLen, ExtendedRateIeExist);            }             pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;            MlmeCntlConfirm(pAd, MT2_ASSOC_CONF, Status);        }     }    else    {        DBGPRINT(RT_DEBUG_TRACE, "ASSOC - PeerAssocRspAction() sanity check fail\n");    }}/*    ==========================================================================    Description:        peer sends reassoc rsp    Parametrs:        Elem - MLME message cntaining the received frame        	IRQL = DISPATCH_LEVEL    ========================================================================== */VOID PeerReassocRspAction(    IN PRT2570ADAPTER pAd,     IN MLME_QUEUE_ELEM *Elem) {    USHORT      CapabilityInfo;    USHORT      Status;    USHORT      Aid;    UCHAR       Rates[MAX_LEN_OF_SUPPORTED_RATES];    UCHAR       RatesLen;    MACADDR     Addr2;    BOOLEAN     ExtendedRateIeExist;    if(PeerAssocRspSanity(pAd, Elem->Msg, Elem->MsgLen, &Addr2, &CapabilityInfo, &Status, &Aid, Rates, &RatesLen, &ExtendedRateIeExist))     {        if(MAC_ADDR_EQUAL(&Addr2, &pAd->Mlme.AssocAux.Addr)) // The frame is for me ?        {            DBGPRINT(RT_DEBUG_TRACE, "ASSOC - receive REASSOC_RSP to me (status=%d)\n", Status);            RTMPCancelTimer(&pAd->Mlme.AssocAux.ReassocTimer);                        if(Status == MLME_SUCCESS)             {				// Mask out unnecessary capability information				CapabilityInfo &= SUPPORTED_CAPABILITY_INFO;  // pAd->PortCfg.SupportedCapabilityInfo;                // go to procedure listed on page 376                AssocPostProc(pAd, &Addr2, CapabilityInfo, Aid, Rates, RatesLen, ExtendedRateIeExist);            }             pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;            MlmeCntlConfirm(pAd, MT2_REASSOC_CONF, Status);        }     }    else    {        DBGPRINT(RT_DEBUG_TRACE, "ASSOC - PeerReassocRspAction() sanity check fail\n");    }}/*    ==========================================================================    Description:        procedures on IEEE 802.11/1999 p.376     Parametrs:        	IRQL = DISPATCH_LEVEL    ========================================================================== */VOID AssocPostProc(    IN PRT2570ADAPTER pAd,     IN PMACADDR Addr2,     IN USHORT CapabilityInfo,     IN USHORT Aid,     IN UCHAR Rates[],     IN UCHAR RatesLen,    IN BOOLEAN ExtendedRateIeExist) {	ULONG Idx;    UCHAR RateIe = IE_SUPP_RATES;	UCHAR VarIesOffset;    // 2003/12/11 -  skip the following because experiment show that we can not     // trust the "privacy" bit in AssocRsp. We can only trust "Privacy" bit specified in    // BEACON and ProbeRsp.    // pAd->PortCfg.PrivacyInvoked = CAP_IS_PRIVACY_ON(CapabilityInfo);        pAd->PortCfg.Aid = Aid;    memcpy(pAd->PortCfg.SupportedRates, Rates, RatesLen);    pAd->PortCfg.SupportedRatesLen = RatesLen;    COPY_MAC_ADDR(&pAd->PortCfg.Bssid, Addr2);    AsicSetBssid(pAd, &pAd->PortCfg.Bssid);    // set listen interval    pAd->PortCfg.DefaultListenCount = pAd->Mlme.AssocAux.ListenIntv;//  pAd->PortCfg.CurrListenCount = pAd->Mlme.AssocAux.ListenIntv;	// Set New WPA information	Idx = BssTableSearch(&pAd->PortCfg.BssTab, Addr2);	if (Idx == BSS_NOT_FOUND) 	{		DBGPRINT(RT_DEBUG_ERROR, "ASSOC - Can't find BSS after receiving Assoc response\n");	}	else	{		// Mod by James to fix OID_802_11_ASSOCIATION_INFORMATION		pAd->PortCfg.AssocInfo.Length = sizeof(NDIS_802_11_ASSOCIATION_INFORMATION); //+ sizeof(NDIS_802_11_FIXED_IEs); 	// Filled in assoc request		pAd->PortCfg.AssocInfo.AvailableResponseFixedIEs =			NDIS_802_11_AI_RESFI_CAPABILITIES | NDIS_802_11_AI_RESFI_STATUSCODE | NDIS_802_11_AI_RESFI_ASSOCIATIONID;		pAd->PortCfg.AssocInfo.ResponseFixedIEs.Capabilities  = CapabilityInfo;		pAd->PortCfg.AssocInfo.ResponseFixedIEs.StatusCode    = MLME_SUCCESS;		// Should be success, add failed later		pAd->PortCfg.AssocInfo.ResponseFixedIEs.AssociationId = Aid;		// Copy BSS VarIEs to PortCfg associnfo structure.		// First add Supported rates		VarIesOffset = 0;		memcpy(pAd->PortCfg.ResVarIEs + VarIesOffset, &RateIe, 1);		VarIesOffset += 1;		memcpy(pAd->PortCfg.ResVarIEs + VarIesOffset, &RatesLen, 1);		VarIesOffset += 1;		memcpy(pAd->PortCfg.ResVarIEs + VarIesOffset, Rates, RatesLen);		VarIesOffset += RatesLen;		// Second add RSN		memcpy(pAd->PortCfg.ResVarIEs + VarIesOffset, pAd->PortCfg.BssTab.BssEntry[Idx].VarIEs, pAd->PortCfg.BssTab.BssEntry[Idx].VarIELen);		VarIesOffset += pAd->PortCfg.BssTab.BssEntry[Idx].VarIELen;				// Set Variable IEs Length		pAd->PortCfg.ResVarIELen = VarIesOffset;		pAd->PortCfg.AssocInfo.ResponseIELength = VarIesOffset;	}}/*    ==========================================================================    Description:        left part of IEEE 802.11/1999 p.374     Parameters:        Elem - MLME message containing the received frame        	IRQL = DISPATCH_LEVEL    ========================================================================== */VOID PeerDisassocAction(    IN PRT2570ADAPTER pAd,     IN MLME_QUEUE_ELEM *Elem) {    MACADDR       Addr2;    USHORT        Reason;    if(PeerDisassocSanity(pAd, Elem->Msg, Elem->MsgLen, &Addr2, &Reason))     {        if (INFRA_ON(pAd) && MAC_ADDR_EQUAL(&pAd->PortCfg.Bssid, &Addr2))         {			DBGPRINT_RAW(RT_DEBUG_TRACE, "LinkDown(PeerDisassocAction(Reason = %d))\n", Reason);//steven:for debug            LinkDown(pAd);            pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;            // 2002/11/21 -            // patch RT2430/RT2420 hangup issue. We suspect this AP DIS-ASSOCIATE frame            // is caused by PHY hangup, so we reset PHY, then auto recover the connection.            // if this attempt fails, then remains in LinkDown and leaves the problem            // to MlmePeriodicExec()            // NICPatchRT2430Bug(pAd);            pAd->RalinkCounters.BeenDisassociatedCount ++;			// Remove auto recover effort when disassociate by AP, re-enable for patch 2430 only            DBGPRINT(RT_DEBUG_TRACE, "ASSOC - Disassociated by AP, Auto Recovery attempt #%d\n", pAd->RalinkCounters.BeenDisassociatedCount);            MlmeAutoReconnectLastSSID(pAd);        }    }    else    {        DBGPRINT(RT_DEBUG_TRACE, "ASSOC - PeerDisassocAction() sanity check fail\n");    }}/*    ==========================================================================    Description:        what the state machine will do after assoc timeout    Parameters:        Elme -        	IRQL = DISPATCH_LEVEL    ========================================================================== */VOID AssocTimeoutAction(    IN PRT2570ADAPTER pAd,     IN MLME_QUEUE_ELEM *Elem) {    DBGPRINT(RT_DEBUG_TRACE, "ASSOC - AssocTimeoutAction\n");    pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;    MlmeCntlConfirm(pAd, MT2_ASSOC_CONF, MLME_REJ_TIMEOUT);}/*    ==========================================================================    Description:        what the state machine will do after reassoc timeout        	IRQL = DISPATCH_LEVEL    ========================================================================== */VOID ReassocTimeoutAction(    IN PRT2570ADAPTER pAd,     IN MLME_QUEUE_ELEM *Elem) {    DBGPRINT(RT_DEBUG_TRACE, "ASSOC - ReassocTimeoutAction\n");    pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;    MlmeCntlConfirm(pAd, MT2_REASSOC_CONF, MLME_REJ_TIMEOUT);}/*    ==========================================================================    Description:        what the state machine will do after disassoc timeout        	IRQL = DISPATCH_LEVEL    ========================================================================== */VOID DisassocTimeoutAction(    IN PRT2570ADAPTER pAd,     IN MLME_QUEUE_ELEM *Elem) {    DBGPRINT(RT_DEBUG_TRACE, "ASSOC - DisassocTimeoutAction\n");    pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;    MlmeCntlConfirm(pAd, MT2_DISASSOC_CONF, MLME_SUCCESS);}VOID InvalidStateWhenAssoc(    IN PRT2570ADAPTER pAd,     IN MLME_QUEUE_ELEM *Elem) {    DBGPRINT(RT_DEBUG_TRACE, "ASSOC - InvalidStateWhenAssoc(state=%d), reset ASSOC state machine\n",         pAd->Mlme.AssocMachine.CurrState);    pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;    MlmeCntlConfirm(pAd, MT2_ASSOC_CONF, MLME_STATE_MACHINE_REJECT);}VOID InvalidStateWhenReassoc(    IN PRT2570ADAPTER pAd,     IN MLME_QUEUE_ELEM *Elem) {    DBGPRINT(RT_DEBUG_TRACE, "ASSOC - InvalidStateWhenReassoc(state=%d), reset ASSOC state machine\n",         pAd->Mlme.AssocMachine.CurrState);    pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;    MlmeCntlConfirm(pAd, MT2_REASSOC_CONF, MLME_STATE_MACHINE_REJECT);}VOID InvalidStateWhenDisassociate(    IN PRT2570ADAPTER pAd,     IN MLME_QUEUE_ELEM *Elem) {    DBGPRINT(RT_DEBUG_TRACE, "ASSOC - InvalidStateWhenDisassoc(state=%d), reset ASSOC state machine\n",         pAd->Mlme.AssocMachine.CurrState);    pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;    MlmeCntlConfirm(pAd, MT2_DISASSOC_CONF, MLME_STATE_MACHINE_REJECT);}/*    ==========================================================================    Description:        right part of IEEE 802.11/1999 page 374    Note:         This event should never cause ASSOC state machine perform state        transition, and has no relationship with CNTL machine. So we separate        this routine as a service outside of ASSOC state transition table.        	IRQL = DISPATCH_LEVEL    ========================================================================== */VOID Cls3errAction(    IN PRT2570ADAPTER pAd,     IN PMACADDR      pAddr) {    MACHDR                DisassocHdr;    CHAR                 *OutBuffer = NULL;    ULONG                 FrameLen = 0;    NDIS_STATUS           NStatus;    USHORT                Reason = REASON_CLS3ERR;    NStatus = MlmeAllocateMemory(pAd, (PVOID)&OutBuffer);  //Get an unused nonpaged memory    if (NStatus != NDIS_STATUS_SUCCESS)         return;        DBGPRINT(RT_DEBUG_TRACE, "ASSOC - Class 3 Error, Send DISASSOC frame\n");    MgtMacHeaderInit(pAd, &DisassocHdr, SUBTYPE_DISASSOC, 0, pAddr, &pAd->PortCfg.Bssid);    MakeOutgoingFrame(OutBuffer,            &FrameLen,                       sizeof(MACHDR),       &DisassocHdr,                       2,                    &Reason,                       END_OF_ARGS);    MiniportMMRequest(pAd, OutBuffer, FrameLen);    pAd->PortCfg.DisassocReason = REASON_CLS3ERR;    COPY_MAC_ADDR(&pAd->PortCfg.DisassocSta, pAddr);}

⌨️ 快捷键说明

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