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

📄 assoc.c

📁 ralink 2870 usb无线网卡 最新驱动
💻 C
📖 第 1 页 / 共 4 页
字号:
		MlmeFreeMemory(pAd, pOutBuffer);	pAd->StaCfg.DisassocReason = REASON_DISASSOC_STA_LEAVING;	COPY_MAC_ADDR(pAd->StaCfg.DisassocSta, pDisassocReq->Addr);	RTMPSetTimer(&pAd->MlmeAux.DisassocTimer, Timeout); /* in mSec */	pAd->Mlme.AssocMachine.CurrState = DISASSOC_WAIT_RSP;#ifdef WPA_SUPPLICANT_SUPPORT#ifndef NATIVE_WPA_SUPPLICANT_SUPPORT	if (pAd->StaCfg.WpaSupplicantUP != WPA_SUPPLICANT_DISABLE) 	{		//send disassociate event to wpa_supplicant		RtmpOSWrielessEventSend(pAd, IWEVCUSTOM, RT_DISASSOC_EVENT_FLAG, NULL, NULL, 0);	}#endif // NATIVE_WPA_SUPPLICANT_SUPPORT //#endif // WPA_SUPPLICANT_SUPPORT //#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT	RtmpOSWrielessEventSend(pAd, SIOCGIWAP, -1, NULL, NULL, 0);#endif // NATIVE_WPA_SUPPLICANT_SUPPORT //        }/*	==========================================================================	Description:		peer sends assoc rsp back	Parameters:		Elme - MLME message containing the received frame	IRQL = DISPATCH_LEVEL	========================================================================== */VOID PeerAssocRspAction(	IN PRTMP_ADAPTER pAd, 	IN MLME_QUEUE_ELEM *Elem) {	USHORT        CapabilityInfo, Status, Aid;	UCHAR         SupRate[MAX_LEN_OF_SUPPORTED_RATES], SupRateLen;	UCHAR         ExtRate[MAX_LEN_OF_SUPPORTED_RATES], ExtRateLen;	UCHAR         Addr2[MAC_ADDR_LEN];	BOOLEAN       TimerCancelled;	UCHAR         CkipFlag;	EDCA_PARM     EdcaParm;	HT_CAPABILITY_IE		HtCapability;	ADD_HT_INFO_IE		AddHtInfo;	// AP might use this additional ht info IE 	UCHAR			HtCapabilityLen;	UCHAR			AddHtInfoLen;	UCHAR			NewExtChannelOffset = 0xff;	if (PeerAssocRspSanity(pAd, Elem->Msg, Elem->MsgLen, Addr2, &CapabilityInfo, &Status, &Aid, SupRate, &SupRateLen, ExtRate, &ExtRateLen, 		&HtCapability,&AddHtInfo, &HtCapabilityLen,&AddHtInfoLen,&NewExtChannelOffset, &EdcaParm, &CkipFlag)) 	{		// The frame is for me ?		if(MAC_ADDR_EQUAL(Addr2, pAd->MlmeAux.Bssid)) 		{			DBGPRINT(RT_DEBUG_TRACE, ("PeerAssocRspAction():ASSOC - receive ASSOC_RSP to me (status=%d)\n", Status));#ifdef DOT11_N_SUPPORT			DBGPRINT(RT_DEBUG_TRACE, ("PeerAssocRspAction():MacTable [%d].AMsduSize = %d. ClientStatusFlags = 0x%lx \n",Elem->Wcid, pAd->MacTab.Content[BSSID_WCID].AMsduSize, pAd->MacTab.Content[BSSID_WCID].ClientStatusFlags));#endif // DOT11_N_SUPPORT //			RTMPCancelTimer(&pAd->MlmeAux.AssocTimer, &TimerCancelled);			if(Status == MLME_SUCCESS) 			{				UCHAR			MaxSupportedRateIn500Kbps = 0;				UCHAR			idx;				// supported rates array may not be sorted. sort it and find the maximum rate			    for (idx=0; idx<SupRateLen; idx++)			    {			        if (MaxSupportedRateIn500Kbps < (SupRate[idx] & 0x7f)) 			            MaxSupportedRateIn500Kbps = SupRate[idx] & 0x7f;			    }				for (idx=0; idx<ExtRateLen; idx++)			    {			        if (MaxSupportedRateIn500Kbps < (ExtRate[idx] & 0x7f)) 			            MaxSupportedRateIn500Kbps = ExtRate[idx] & 0x7f;			    }				// go to procedure listed on page 376				AssocPostProc(pAd, Addr2, CapabilityInfo, Aid, SupRate, SupRateLen, ExtRate, ExtRateLen, 					&EdcaParm, &HtCapability, HtCapabilityLen, &AddHtInfo);				StaAddMacTableEntry(pAd, 									&pAd->MacTab.Content[BSSID_WCID], 									MaxSupportedRateIn500Kbps, 									&HtCapability, 									HtCapabilityLen,									&AddHtInfo,									AddHtInfoLen,									CapabilityInfo);			}			pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;			MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_ASSOC_CONF, 2, &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 PRTMP_ADAPTER pAd, 	IN MLME_QUEUE_ELEM *Elem) {	USHORT      CapabilityInfo;	USHORT      Status;	USHORT      Aid;	UCHAR       SupRate[MAX_LEN_OF_SUPPORTED_RATES], SupRateLen;	UCHAR       ExtRate[MAX_LEN_OF_SUPPORTED_RATES], ExtRateLen;	UCHAR       Addr2[MAC_ADDR_LEN];	UCHAR       CkipFlag;	BOOLEAN     TimerCancelled;	EDCA_PARM   EdcaParm;	HT_CAPABILITY_IE		HtCapability;	ADD_HT_INFO_IE		AddHtInfo;	// AP might use this additional ht info IE 	UCHAR			HtCapabilityLen;	UCHAR			AddHtInfoLen;	UCHAR			NewExtChannelOffset = 0xff;	if(PeerAssocRspSanity(pAd, Elem->Msg, Elem->MsgLen, Addr2, &CapabilityInfo, &Status, &Aid, SupRate, &SupRateLen, ExtRate, &ExtRateLen, 								&HtCapability,	&AddHtInfo, &HtCapabilityLen, &AddHtInfoLen,&NewExtChannelOffset, &EdcaParm, &CkipFlag)) 	{		if(MAC_ADDR_EQUAL(Addr2, pAd->MlmeAux.Bssid)) // The frame is for me ?		{			DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - receive REASSOC_RSP to me (status=%d)\n", Status));			RTMPCancelTimer(&pAd->MlmeAux.ReassocTimer, &TimerCancelled);			if(Status == MLME_SUCCESS) 			{				// go to procedure listed on page 376				AssocPostProc(pAd, Addr2, CapabilityInfo, Aid, SupRate, SupRateLen, ExtRate, ExtRateLen, 					 &EdcaParm, &HtCapability, HtCapabilityLen, &AddHtInfo);#ifdef WPA_SUPPLICANT_SUPPORT#ifndef NATIVE_WPA_SUPPLICANT_SUPPORT                if (pAd->StaCfg.WpaSupplicantUP != WPA_SUPPLICANT_DISABLE)			{				SendAssocIEsToWpaSupplicant(pAd);				RtmpOSWrielessEventSend(pAd, IWEVCUSTOM, RT_ASSOC_EVENT_FLAG, NULL, NULL, 0);			}#endif // NATIVE_WPA_SUPPLICANT_SUPPORT //#endif // WPA_SUPPLICANT_SUPPORT //#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT                {                    wext_notify_event_assoc(pAd);                    RtmpOSWrielessEventSend(pAd, SIOCGIWAP, -1, &pAd->MlmeAux.Bssid[0], NULL, 0);                }#endif // NATIVE_WPA_SUPPLICANT_SUPPORT //			} 			// CkipFlag is no use for reassociate			pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;			MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_REASSOC_CONF, 2, &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 PRTMP_ADAPTER pAd, 	IN PUCHAR pAddr2, 	IN USHORT CapabilityInfo, 	IN USHORT Aid, 	IN UCHAR SupRate[], 	IN UCHAR SupRateLen,	IN UCHAR ExtRate[],	IN UCHAR ExtRateLen,	IN PEDCA_PARM pEdcaParm,	IN HT_CAPABILITY_IE		*pHtCapability,	IN UCHAR HtCapabilityLen, 	IN ADD_HT_INFO_IE		*pAddHtInfo)	// AP might use this additional ht info IE {	ULONG Idx;	pAd->MlmeAux.BssType = BSS_INFRA;	COPY_MAC_ADDR(pAd->MlmeAux.Bssid, pAddr2);	pAd->MlmeAux.Aid = Aid;	pAd->MlmeAux.CapabilityInfo = CapabilityInfo & SUPPORTED_CAPABILITY_INFO;	#ifdef DOT11_N_SUPPORT	// Some HT AP might lost WMM IE. We add WMM ourselves. beacuase HT requires QoS on.	if ((HtCapabilityLen > 0) && (pEdcaParm->bValid == FALSE))	{		pEdcaParm->bValid = TRUE;		pEdcaParm->Aifsn[0] = 3;		pEdcaParm->Aifsn[1] = 7;		pEdcaParm->Aifsn[2] = 2;		pEdcaParm->Aifsn[3] = 2;		pEdcaParm->Cwmin[0] = 4;		pEdcaParm->Cwmin[1] = 4;		pEdcaParm->Cwmin[2] = 3;		pEdcaParm->Cwmin[3] = 2;		pEdcaParm->Cwmax[0] = 10;		pEdcaParm->Cwmax[1] = 10;		pEdcaParm->Cwmax[2] = 4;		pEdcaParm->Cwmax[3] = 3;		pEdcaParm->Txop[0]  = 0;		pEdcaParm->Txop[1]  = 0;		pEdcaParm->Txop[2]  = 96;		pEdcaParm->Txop[3]  = 48;	}#endif // DOT11_N_SUPPORT //	NdisMoveMemory(&pAd->MlmeAux.APEdcaParm, pEdcaParm, sizeof(EDCA_PARM));	// filter out un-supported rates	pAd->MlmeAux.SupRateLen = SupRateLen;	NdisMoveMemory(pAd->MlmeAux.SupRate, SupRate, SupRateLen);	RTMPCheckRates(pAd, pAd->MlmeAux.SupRate, &pAd->MlmeAux.SupRateLen);	// filter out un-supported rates	pAd->MlmeAux.ExtRateLen = ExtRateLen;	NdisMoveMemory(pAd->MlmeAux.ExtRate, ExtRate, ExtRateLen);	RTMPCheckRates(pAd, pAd->MlmeAux.ExtRate, &pAd->MlmeAux.ExtRateLen);#ifdef DOT11_N_SUPPORT	if (HtCapabilityLen > 0)	{		RTMPCheckHt(pAd, BSSID_WCID, pHtCapability, pAddHtInfo);	}	DBGPRINT(RT_DEBUG_TRACE, ("AssocPostProc===>  AP.AMsduSize = %d. ClientStatusFlags = 0x%lx \n", pAd->MacTab.Content[BSSID_WCID].AMsduSize, pAd->MacTab.Content[BSSID_WCID].ClientStatusFlags));			DBGPRINT(RT_DEBUG_TRACE, ("AssocPostProc===>    (Mmps=%d, AmsduSize=%d, )\n", 		pAd->MacTab.Content[BSSID_WCID].MmpsMode, pAd->MacTab.Content[BSSID_WCID].AMsduSize));#endif // DOT11_N_SUPPORT //	// Set New WPA information	Idx = BssTableSearch(&pAd->ScanTab, pAddr2, pAd->MlmeAux.Channel);	if (Idx == BSS_NOT_FOUND) 	{		DBGPRINT_ERR(("ASSOC - Can't find BSS after receiving Assoc response\n"));	}	else	{		// Init variable		pAd->MacTab.Content[BSSID_WCID].RSNIE_Len = 0;		NdisZeroMemory(pAd->MacTab.Content[BSSID_WCID].RSN_IE, MAX_LEN_OF_RSNIE);		// Store appropriate RSN_IE for WPA SM negotiation later		if ((pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) && (pAd->ScanTab.BssEntry[Idx].VarIELen != 0))		{								PUCHAR              pVIE;			USHORT              len;			PEID_STRUCT         pEid;			pVIE = pAd->ScanTab.BssEntry[Idx].VarIEs;			len	 = pAd->ScanTab.BssEntry[Idx].VarIELen;			while (len > 0)			{				pEid = (PEID_STRUCT) pVIE;					// For WPA/WPAPSK				if ((pEid->Eid == IE_WPA) && (NdisEqualMemory(pEid->Octet, WPA_OUI, 4)) 					&& (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA || pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK))				{					NdisMoveMemory(pAd->MacTab.Content[BSSID_WCID].RSN_IE, pVIE, (pEid->Len + 2));					pAd->MacTab.Content[BSSID_WCID].RSNIE_Len = (pEid->Len + 2);												DBGPRINT(RT_DEBUG_TRACE, ("AssocPostProc===> Store RSN_IE for WPA SM negotiation \n"));				}				// For WPA2/WPA2PSK				else if ((pEid->Eid == IE_RSN) && (NdisEqualMemory(pEid->Octet + 2, RSN_OUI, 3))					&& (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2 || pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK))				{					NdisMoveMemory(pAd->MacTab.Content[BSSID_WCID].RSN_IE, pVIE, (pEid->Len + 2));					pAd->MacTab.Content[BSSID_WCID].RSNIE_Len = (pEid->Len + 2);						DBGPRINT(RT_DEBUG_TRACE, ("AssocPostProc===> Store RSN_IE for WPA2 SM negotiation \n"));				}				pVIE += (pEid->Len + 2);				len  -= (pEid->Len + 2);			}								}		if (pAd->MacTab.Content[BSSID_WCID].RSNIE_Len == 0)		{						DBGPRINT(RT_DEBUG_TRACE, ("AssocPostProc===> no RSN_IE \n"));					}		else		{			hex_dump("RSN_IE", pAd->MacTab.Content[BSSID_WCID].RSN_IE, pAd->MacTab.Content[BSSID_WCID].RSNIE_Len);		}	}}/*	==========================================================================	Description:		left part of IEEE 802.11/1999 p.374 	Parameters:		Elem - MLME message containing the received frame	IRQL = DISPATCH_LEVEL	========================================================================== */VOID PeerDisassocAction(	IN PRTMP_ADAPTER pAd, 	IN MLME_QUEUE_ELEM *Elem) {	UCHAR         Addr2[MAC_ADDR_LEN];	USHORT        Reason;	DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - PeerDisassocAction()\n"));	if(PeerDisassocSanity(pAd, Elem->Msg, Elem->MsgLen, Addr2, &Reason)) 	{		DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - PeerDisassocAction() Reason = %d\n", Reason));		if (INFRA_ON(pAd) && MAC_ADDR_EQUAL(pAd->CommonCfg.Bssid, Addr2)) 		{			if (pAd->CommonCfg.bWirelessEvent)			{								RTMPSendWirelessEvent(pAd, IW_DISASSOC_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); 			}			LinkDown(pAd, TRUE);			pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;#ifdef WPA_SUPPLICANT_SUPPORT#ifndef NATIVE_WPA_SUPPLICANT_SUPPORT            if (pAd->StaCfg.WpaSupplicantUP != WPA_SUPPLICANT_DISABLE) 			{				//send disassociate event to wpa_supplicant				RtmpOSWrielessEventSend(pAd, IWEVCUSTOM, RT_DISASSOC_EVENT_FLAG, NULL, NULL, 0);			} #endif // NATIVE_WPA_SUPPLICANT_SUPPORT //#endif // WPA_SUPPLICANT_SUPPORT //#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT			RtmpOSWrielessEventSend(pAd, SIOCGIWAP, -1, NULL, NULL, 0);#endif // NATIVE_WPA_SUPPLICANT_SUPPORT //		}	}	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 PRTMP_ADAPTER pAd, 	IN MLME_QUEUE_ELEM *Elem) {	USHORT  Status;	DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - AssocTimeoutAction\n"));	pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;	Status = MLME_REJ_TIMEOUT;	MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_ASSOC_CONF, 2, &Status);}/*	==========================================================================	Description:		what the state machine will do after reassoc timeout	IRQL = DISPATCH_LEVEL	========================================================================== */VOID ReassocTimeoutAction(	IN PRTMP_ADAPTER pAd, 	IN MLME_QUEUE_ELEM *Elem) {	USHORT  Status;	DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - ReassocTimeoutAction\n"));	pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;	Status = MLME_REJ_TIMEOUT;

⌨️ 快捷键说明

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