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

📄 assoc.c

📁 ralink最新rt3070 usb wifi 无线网卡驱动程序
💻 C
📖 第 1 页 / 共 5 页
字号:
				StaAddMacTableEntry(pAd, &pAd->MacTab.Content[BSSID_WCID], MaxSupportedRateIn500Kbps, &HtCapability, HtCapabilityLen, CapabilityInfo);				pAd->StaCfg.CkipFlag = CkipFlag;				if (CkipFlag & 0x18)				{					NdisZeroMemory(pAd->StaCfg.TxSEQ, 4);					NdisZeroMemory(pAd->StaCfg.RxSEQ, 4);					NdisZeroMemory(pAd->StaCfg.CKIPMIC, 4);					pAd->StaCfg.GIV[0] = RandomByte(pAd);					pAd->StaCfg.GIV[1] = RandomByte(pAd);					pAd->StaCfg.GIV[2] = RandomByte(pAd);					pAd->StaCfg.bCkipOn = TRUE;					DBGPRINT(RT_DEBUG_TRACE, ("<CCX> pAd->StaCfg.CkipFlag = 0x%02x\n", pAd->StaCfg.CkipFlag));				}			} 			else 			{  				// Faile on Association, we need to check the status code				// Is that a Rogue AP?#ifdef LEAP_SUPPORT				if ((pAd->StaCfg.LeapAuthMode == CISCO_AuthModeLEAP) && (Status == MLME_ALG_NOT_SUPPORT))				{ //Possibly Rogue AP					RogueApTableSetEntry(pAd, &pAd->StaCfg.RogueApTab, pAd->MlmeAux.Bssid, LEAP_REASON_INVALID_AUTH);				}#endif // LEAP_SUPPORT //			}			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)                {                    union iwreq_data    wrqu;                    SendAssocIEsToWpaSupplicant(pAd);                    memset(&wrqu, 0, sizeof(wrqu));                    wrqu.data.flags = RT_ASSOC_EVENT_FLAG;                    wireless_send_event(pAd->net_dev, IWEVCUSTOM, &wrqu, NULL);                }#endif // NATIVE_WPA_SUPPLICANT_SUPPORT //#endif // WPA_SUPPLICANT_SUPPORT //#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT                {                    union iwreq_data    wrqu;                    wext_notify_event_assoc(pAd);                                        memset(wrqu.ap_addr.sa_data, 0, MAC_ADDR_LEN);                    memcpy(wrqu.ap_addr.sa_data, pAd->MlmeAux.Bssid, MAC_ADDR_LEN);                    wireless_send_event(pAd->net_dev, SIOCGIWAP, &wrqu, NULL);                                    }#endif // NATIVE_WPA_SUPPLICANT_SUPPORT //			} 			//			// Cisco Leap CCKM supported Re-association.			//#ifdef LEAP_SUPPORT			if (LEAP_CCKM_ON(pAd) && (pAd->StaCfg.CCKMLinkUpFlag == TRUE))			{				if (CCKMAssocRspSanity(pAd, Elem->Msg, Elem->MsgLen) == TRUE)				{					pAd->StaCfg.CkipFlag = CkipFlag;					if (CkipFlag & 0x18)					{						NdisZeroMemory(pAd->StaCfg.TxSEQ, 4);						NdisZeroMemory(pAd->StaCfg.RxSEQ, 4);						NdisZeroMemory(pAd->StaCfg.CKIPMIC, 4);						pAd->StaCfg.GIV[0] = RandomByte(pAd);						pAd->StaCfg.GIV[1] = RandomByte(pAd);						pAd->StaCfg.GIV[2] = RandomByte(pAd);						pAd->StaCfg.bCkipOn = TRUE;						DBGPRINT(RT_DEBUG_TRACE, ("<CCX> pAd->StaCfg.CkipFlag = 0x%02x\n", pAd->StaCfg.CkipFlag));					}					pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;					MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_REASSOC_CONF, 2, &Status);				}				else				{					DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - CCKMAssocRspSanity() sanity check fail\n"));				}			}			else#endif // LEAP_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); 			}#ifdef LEAP_SUPPORT			if (pAd->StaCfg.LeapAuthMode == CISCO_AuthModeLEAP)			{				// Cisco_LEAP has start a timer 				// We should cancel it if using LEAP							RTMPCancelTimer(&pAd->StaCfg.LeapAuthTimer, &TimerCancelled);				//Check is it mach the LEAP Authentication failed as possible a Rogue AP				//on it's PortSecured not equal to WPA_802_1X_PORT_SECURED while process the Association.				if ((pAd->Mlme.LeapMachine.CurrState != LEAP_IDLE) && (pAd->StaCfg.PortSecured != WPA_802_1X_PORT_SECURED))				{					RogueApTableSetEntry(pAd, &pAd->StaCfg.RogueApTab, Addr2, LEAP_REASON_AUTH_TIMEOUT);				}			}	#endif	// LEAP_SUPPORT //					//			// Get Current System time and Turn on AdjacentAPReport 			//			NdisGetSystemUpTime(&pAd->StaCfg.CCXAdjacentAPLinkDownTime); 			pAd->StaCfg.CCXAdjacentAPReportFlag = TRUE;			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) 			{                union iwreq_data    wrqu;                //send disassociate event to wpa_supplicant                memset(&wrqu, 0, sizeof(wrqu));                wrqu.data.flags = RT_DISASSOC_EVENT_FLAG;                wireless_send_event(pAd->net_dev, IWEVCUSTOM, &wrqu, NULL);            } #endif // NATIVE_WPA_SUPPLICANT_SUPPORT //#endif // WPA_SUPPLICANT_SUPPORT //#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT            {                union iwreq_data    wrqu;                memset(wrqu.ap_addr.sa_data, 0, MAC_ADDR_LEN);                wireless_send_event(pAd->net_dev, SIOCGIWAP, &wrqu, NULL);            }#endif // NATIVE_WPA_SUPPLICANT_SUPPORT // 		}	}

⌨️ 快捷键说明

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