Beispiel #1
0
VOID FT_OTA_AuthParmFill(
	IN PRTMP_ADAPTER pAd, 
	IN OUT MLME_FT_OTA_AUTH_REQ_STRUCT *pFtOtaAuthReq, 
	IN PUCHAR 	pAddr, 
	IN USHORT 	Alg,
	IN PDOT11R_CMN_STRUC	pCmmDot11rCfg)
{		
	COPY_MAC_ADDR(pFtOtaAuthReq->Addr, pAddr);
	pFtOtaAuthReq->Alg = Alg;
	pFtOtaAuthReq->Timeout = (AUTH_TIMEOUT * 2);

	/* MDIE */
	pFtOtaAuthReq->MdIe.FtCapPlc.field.RsrReqCap = 0;
	pFtOtaAuthReq->MdIe.FtCapPlc.field.FtOverDs = 0;
	if (pCmmDot11rCfg->bSupportResource && pAd->MlmeAux.MdIeInfo.FtCapPlc.field.RsrReqCap)
		pFtOtaAuthReq->MdIe.FtCapPlc.field.RsrReqCap = 1;
	pFtOtaAuthReq->MdIe.FtCapPlc.field.FtOverDs = pAd->MlmeAux.MdIeInfo.FtCapPlc.field.FtOverDs;
	FT_SET_MDID(pFtOtaAuthReq->MdIe.MdId, pCmmDot11rCfg->MdIeInfo.MdId);
}
Beispiel #2
0
VOID FT_OTD_ActParmFill(
    IN PRTMP_ADAPTER pAd,
    IN OUT MLME_FT_REQ_STRUCT *FtReq,
    IN PUCHAR pAddr,
    IN NDIS_802_11_AUTHENTICATION_MODE AuthMode,
    IN PFT_MDIE_INFO FtMdieInfo,
    IN PFT_FTIE_INFO FtFtieInfo,
    IN UCHAR VarIeLen,
    IN PUCHAR pVarIe)
{
    RTMPZeroMemory(FtReq, sizeof (MLME_FT_REQ_STRUCT));
    COPY_MAC_ADDR(FtReq->TargetAddr, pAddr);
    if (AuthMode >= Ndis802_11AuthModeWPA)
        FtReq->HaveRSN = 1;
    FtReq->Timeout = FT_ACT_TIMEOUT;
    FT_SET_MDID(FtReq->MdIe.MdId, FtMdieInfo->MdId);
    FtReq->MdIe.FtCapPlc.word = FtMdieInfo->FtCapPlc.word;
    RTMPMoveMemory(&FtReq->SNonce[0], FtFtieInfo->SNonce, 32);
    RTMPMoveMemory(&FtReq->R0khId[0], FtFtieInfo->R0khId,
                   FtFtieInfo->R0khIdLen);
    FtReq->R0khIdLen = FtFtieInfo->R0khIdLen;
    RTMPMoveMemory(&FtReq->VIe[0], pVarIe, VarIeLen);
}
Beispiel #3
0
BOOLEAN PeerFtAuthRspSanity(
    IN  PRTMP_ADAPTER 	pAd,
    IN  PUCHAR		 	ApAddr,
    IN  VOID 			*pMsg, 
    IN  ULONG 			MsgLen,
    OUT MAC_TABLE_ENTRY *pEntry) 
{
	PEID_STRUCT     pEid;
	USHORT          Length = 0;
	UCHAR			Sanity = 0;
	PFRAME_802_11 	pFrame = (PFRAME_802_11)pMsg;
	FT_MDIE			MdIe;
	UINT8			PMKR0Name[16];

	pEntry = &pAd->MacTab.Content[MCAST_WCID];

	/*
		Alg: 2 bytes
		Seq: 2 bytes
		Status: 2 bytes
	*/
    pEid = (PEID_STRUCT) &pFrame->Octet[6];
	while ((Length + 2 + (USHORT)pEid->Len) <= (MsgLen - LENGTH_802_11 - 6))
	{
		switch(pEid->Eid)
		{
			case IE_FT_MDIE:
				if (pEid->Len == sizeof(FT_MDIE))
				{
					NdisZeroMemory(&MdIe, sizeof(FT_MDIE));
					NdisMoveMemory(&MdIe, &pEid->Octet[0], pEid->Len);
					FT_SET_MDID(pEntry->MdIeInfo.MdId, MdIe.MdId);
					pEntry->MdIeInfo.FtCapPlc.word = MdIe.FtCapPlc.word;
					Sanity |= 0x01;
				}
				break;
			case IE_FT_FTIE:
				if (pEid->Len)
				{
					NdisMoveMemory(&pAd->MlmeAux.FtIeInfo.ANonce[0], &pEid->Octet[18], 32);
					FT_FTIeParse(pEid->Len, 
								 (PFT_FTIE)pEid/*(PFT_FTIE)&pEid->Octet[0]*/, 
								 &pEntry->FtIeInfo.R1khId[0], 
								 &pEntry->FtIeInfo.GtkLen, 
								 &pEntry->FtIeInfo.GtkSubIE[0], 
								 &pEntry->FtIeInfo.R0khIdLen, 
								 &pEntry->FtIeInfo.R0khId[0]);
					Sanity |= 0x02;
				}
				break;

			case IE_RSN:
				if (pEid->Len > LEN_PMK_NAME)
				{
					/* Check PMKR0Name */
					NdisMoveMemory(&PMKR0Name[0], &pEid->Octet[pEid->Len - LEN_PMK_NAME], LEN_PMK_NAME);
					if (NdisEqualMemory(&PMKR0Name[0], &pAd->StaCfg.Dot11RCommInfo.PMKR0Name[0], LEN_PMK_NAME))
						Sanity |= 0x04;
				}
				break;
        }
		Length = Length + 2 + (USHORT)pEid->Len;  /* Eid[1] + Len[1]+ content[Len] */
		pEid = (PEID_STRUCT)((UCHAR*)pEid + 2 + pEid->Len);        
	}

	if ((Sanity & 0x01) == 0)
	{
		MTWF_LOG(DBG_CAT_ALL, DBG_SUBCAT_ALL, DBG_LVL_WARN, ("PeerFtAuthRspSanity - missing field, Sanity=0x%02x\n", Sanity));
		return FALSE;
	}

	if (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA)
	{
		if ((Sanity & 0x07) == 0)
		{
			MTWF_LOG(DBG_CAT_ALL, DBG_SUBCAT_ALL, DBG_LVL_WARN, ("PeerFtAuthRspSanity - missing field, Sanity=0x%02x\n", Sanity));
			return FALSE;
		}
		else
		{
			return TRUE;
		}
	}

    return TRUE;
}