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

📄 miscproc.c

📁 Windows CE 6.0 BSP for VOIP sample phone. Intel PXA270 platform.
💻 C
📖 第 1 页 / 共 5 页
字号:
	}
	
	// set ssid
	NdisMoveMemory(  &(Adapter->ActiveScanSSID), 
				      	&(Adapter->ReSSID), 
					sizeof(NDIS_802_11_SSID)); 
	
	/*
       {     ULONG i;
			
		RETAILMSG(1, (TEXT("ActiveScanSSID  \r\n")));	
			
		for (i=0; i<Adapter->ActiveScanSSID.SsidLength; i++)
		{
                     RETAILMSG(1, (TEXT("%02x  "), *(((UCHAR *)(Adapter->ActiveScanSSID.Ssid))+ i) ));
			if (((i %16) == 0) && i)
				RETAILMSG(1, (TEXT("\r\n")));
		}
		RETAILMSG(1, (TEXT("\r\n")));		
	}	
	*/

       /*
	if (Adapter->bIsDeauthenticaticationEvent)
	{
		Status = PrepareAndSendCommand(
    							Adapter,
							HostCmd_CMD_802_11_ASSOCIATE_EXT,
							0,
							HostCmd_OPTION_USE_INT,
							(NDIS_OID)0,
							HostCmd_PENDING_ON_NONE,
							0,
							FALSE,
							NULL,
							NULL,
							NULL,
							&(Adapter->ReSSID));
		
///RETAILMSG(1, (TEXT("Send HostCmd_CMD_802_11_ASSOCIATE_EXT command \r\n")));			
	}
	else
	*/	
	{
		if (( ! Adapter->bIsScanInProgress ) && ( ! Adapter->bIsAssociateInProgress ))
		{  
			DBGPRINT(DBG_ALLEN, ("Send HostCmd_CMD_802_11_SCAN  then Association\n"));	
		
			Adapter->bIsAssociationBlockedByScan = TRUE;
  			Adapter->SetActiveScanSSID = TRUE;

//RETAILMSG(1, (TEXT("Send HostCmd_CMD_802_11_SCAN command \r\n")));	
			Status = PrepareAndSendCommand(
						       Adapter,				
		       		 		HostCmd_CMD_802_11_SCAN,
		       	 			0,
		       	 			HostCmd_OPTION_USE_INT,
		        				(NDIS_OID)0,
              					HostCmd_PENDING_ON_NONE,
		      					0, 
		        				FALSE, 
		        				NULL, 
							NULL, 
							NULL, 
							&(Adapter->ActiveScanSSID));
		}
       	else
		{
			Adapter->bIsReConnectNow = FALSE;
//RETAILMSG(1, (TEXT("Adapter->bIsReConnectNow = FALSE  9  \r\n")));
       	}   
	}

}

/// called by 
VOID
ReConnectHandler(
		PMRVDRV_ADAPTER Adapter)
{

	if (Adapter->bIsReconnectEnable == FALSE )
	{
		return;
	}

	if (Adapter->bIsAssociateInProgress ||Adapter->bIsScanInProgress ||Adapter->bIsSystemConnectNow)
	{     
		DBGPRINT(DBG_ALLEN, ("Adapter->bIsSystemConnectNow = TRUE\n"));
		return;   
	}

	DBGPRINT(DBG_ALLEN, ("ReConnectHandler()  ,ReconnectType = 0x%x\n", Adapter->ReconnectType));
	
	switch (Adapter->ReconnectType)
	{
		case RECONNECT_COUNTER_TYPE:

			DBGPRINT(DBG_ALLEN, ("usReconnectCounter = 0x%x  \n", Adapter->usReconnectCounter));

			if ((Adapter->usReconnectCounter >= 1) && 
			     (Adapter->MediaConnectStatus == NdisMediaStateDisconnected))
			{
				Adapter->usReconnectCounter --;
				
//RETAILMSG(1, (TEXT("ReConnectHandler %d  \r\n"), Adapter->usReconnectCounter));

				if (Adapter->bIsIgnoreTheFirstOne == FALSE)
				{
				DoReConnect (Adapter);
			}
			else
			{
					Adapter->bIsIgnoreTheFirstOne = FALSE;
				}
			}
			else
			{
				InfraBssReconnectStop(Adapter);	
			}
			break;
			
		case RECONNECT_PEROID_TYPE:

			{	
				ULONG   ulCurrentSystemUpTime, ulDiff;

        			NdisGetSystemUpTime(&ulCurrentSystemUpTime);
				ulDiff = ulCurrentSystemUpTime - Adapter->ulStartTimeStamp ;

				DBGPRINT(DBG_ALLEN, ("ulStartTimeStamp = 0x%x  \n", Adapter->ulStartTimeStamp));
				DBGPRINT(DBG_ALLEN, ("ulCurrentSystemUpTime = 0x%x  \n", ulCurrentSystemUpTime));
				DBGPRINT(DBG_ALLEN, ("ulDiff = 0x%x  \n", ulDiff));

				if ((ulDiff  < Adapter->ulReconnectPeriod) && 
				    (Adapter->MediaConnectStatus == NdisMediaStateDisconnected))
				{

					if (Adapter->bIsIgnoreTheFirstOne == FALSE)
					{	
					DoReConnect (Adapter);
				}
				else
				{	
						Adapter->bIsIgnoreTheFirstOne = FALSE;
					}	
				}
				else
				{	
					InfraBssReconnectStop(Adapter);	
				}
			}
			break;
		
		case RECONNECT_RSSI_TYPE:
			break;
	}
}

// plus ++
USHORT Wpa2RsnIeAdjust(UCHAR *Dest, UCHAR *Src, USHORT RsnIeLen, UCHAR Mode)
{
	USHORT length;	

#ifdef MRVL_BCOM_MIX
     UCHAR Tkip_Oui[] = {0x00, 0xF, 0xAC, 0x2}; 
     UCHAR Aes_Oui[] =  {0x00, 0xF, 0xAC, 0x4};
#else
     	UCHAR Tkip_Oui[] = {0x00, 0xF0, 0xAC, 0x02}; 
     	UCHAR Aes_Oui[] =  {0x00, 0xF0, 0xAC, 0x4};
#endif
     
     	length = RsnIeLen;
     	if (Src[8] == 2)  // two pairwise key AES+TKIP
     	{
       	NdisMoveMemory(&Dest[0], &Src[0], 10); //copy IE header and group key suite
	    	Dest[1] -= 4;
	    	Dest[8] = 1;
	    	length -= 4;
       	if (Mode == RSN_IE_AES)
           		NdisMoveMemory(&Dest[10], &Aes_Oui[0], 4); //copy AES pairwise key suite
        	else
           		NdisMoveMemory(&Dest[10], &Tkip_Oui[0], 4); //copy TKIP pairwise keu suite
        	NdisMoveMemory(&Dest[14], &Src[18], length - 14); //copy IE other information
     	}
     	else
       	NdisMoveMemory(&Dest[0], &Src[0], length); //copy IE header and group key suite
      	return length;     
}	

// plus --   

//Plus++, 080106(for Broadcom mix mode fix)
UCHAR WpaIeAdjust(UCHAR *Dest, UCHAR *Src, UCHAR RsnIeLen, UCHAR Mode)
{
     UCHAR length, authOffset, index;  
     UCHAR Tkip_Oui[] = {0x00, 0x50, 0xF2, 0x02}; 
     UCHAR Aes_Oui[] =  {0x00, 0x50, 0xF2, 0x04};
     UCHAR Ssn_Oui[] =  {0x00, 0x50, 0xF2, 0x01};
     UCHAR SsnPsk_Oui[] =  {0x00, 0x50, 0xF2, 0x02};
     // WPA_ID                        1
     // Length                        1
     // OUI                           4
     // Version                       2
     // MulticastCipherSuite          4  
     // UnicastCipherCount            2
     // UnicastCipherSuite            4n
     // AuthKeyMgmtCount              2
     // AuthKeyMgmtSuite              4n
     
     length = RsnIeLen;
     authOffset = UNI_CIPHER_OFFSET + 2 + 4;  // count + suite
     index = authOffset;
     if(Src[UNI_CIPHER_OFFSET] == 2)  // two pairwise key AES+TKIP
     {
         NdisMoveMemory(&Dest[0], &Src[0], UNI_CIPHER_OFFSET); //copy IE header and group key suite
         Dest[1] -= 4;
         Dest[UNI_CIPHER_OFFSET] = 1;
         length -= 4;
         if(Mode & RSN_IE_AES)
             NdisMoveMemory(&Dest[UNI_CIPHER_OFFSET + 2], &Aes_Oui[0], 4); //copy AES pairwise key suite
         else
             NdisMoveMemory(&Dest[UNI_CIPHER_OFFSET + 2], &Tkip_Oui[0], 4); //copy TKIP pairwise keu suite
         index += 4;    
     }
     else
        NdisMoveMemory(&Dest[0], &Src[0], authOffset); //copy IE header and group key suite
     
     if(Src[index] == 2)  // two auth management count
     {
         Dest[1] -= 4;
         Dest[authOffset] = 1;
         length -= 4;
         if(Mode & AUTH_SSN)
             NdisMoveMemory(&Dest[authOffset + 2], &Ssn_Oui[0], 4); //copy AES pairwise key suite
         else
             NdisMoveMemory(&Dest[authOffset + 2], &SsnPsk_Oui[0], 4); //copy TKIP pairwise keu suite
         index += 4;
     }
     else
         NdisMoveMemory(&Dest[authOffset], &Src[index], 6); //copy IE other information

     index += 6;
     authOffset += 6;
     NdisMoveMemory(&Dest[authOffset], &Src[index], length - authOffset); //copy IE other information

     return length;     
}   
//Plus--, 080106

VOID 
v5MrvPrintFileW (
		const unsigned short *fmt, ...)
{
	va_list     argP;
    	FILE        *MrvDbgfp;
    	//DWORD       dwThreadID;
    	//DWORD       dwTick;

       MrvDbgfp = fopen("\\My Documents\\MrvlSDv5.log","a+");

    	if ( MrvDbgfp == NULL )
    	{
       	return;
    	}

    	// dwThreadID = GetCurrentThreadId();
    	// dwTick = GetTickCount();

    	// fprintf(MrvDbgfp, "%8x:%d:", dwThreadID, dwTick);

    	va_start(argP, fmt);
    	vfwprintf(MrvDbgfp, fmt, argP);
    	fflush(MrvDbgfp);

    	va_end(argP);

    	fclose(MrvDbgfp);
}


#ifdef PMKID_CACHE_CAP
void ResetPmkidCache( IN PMRVDRV_ADAPTER Adapter )
{
	Adapter->NumOfPmkid = 0;
	NdisZeroMemory( Adapter->PmkidCache, sizeof(Adapter->PmkidCache) );
}

/*
	RETURN:
		0, failed
		1, successful
*/
int SavePmkidToCache( IN PMRVDRV_ADAPTER Adapter, IN PNDIS_802_11_PMKID pNewPmkid )
{
	ULONG				idx;
	PPMKID_CACHE	pPmkidCache;
	PBSSID_INFO		pIdInfo;

	if ( pNewPmkid->BSSIDInfoCount > MAX_PMKID_CACHE )
		return 0;

	pPmkidCache = Adapter->PmkidCache;
	pIdInfo = pNewPmkid->BSSIDINFO;
	
	for ( idx=0; idx<pNewPmkid->BSSIDInfoCount; idx++ )
	{
		NdisMoveMemory( pPmkidCache[idx].bssid, pIdInfo[idx].BSSID, sizeof(pIdInfo[idx].BSSID) );
		NdisMoveMemory( pPmkidCache[idx].pmkid, pIdInfo[idx].PMKID, sizeof(pIdInfo[idx].PMKID) );
	}

	Adapter->NumOfPmkid = pNewPmkid->BSSIDInfoCount;

	return 1;
}

/*
	RETURN: 
		<0, could not find Pmkid in cache
		>=0, found one. the return value is the index of the pmkid.
*/
int FindPmkidInCache( IN PMRVDRV_ADAPTER Adapter, IN UCHAR *pBssid )
{
	ULONG				idx;
	PPMKID_CACHE	pPmkidCache;

	DBGPRINT( DBG_MACEVENT, ("    Try to find PMKID in cache ...\n") );
	DBGPRINT( DBG_MACEVENT, ("        Total number of PMKID in cache: %d\n", Adapter->NumOfPmkid) );
	DBGPRINT( DBG_MACEVENT, ("        Desired BSSID=...%x:%x:%x\n", pBssid[3], pBssid[4], pBssid[5]) );
	
	for ( idx=0; idx<Adapter->NumOfPmkid; idx++ )
	{
		pPmkidCache = &(Adapter->PmkidCache[idx]);
		
		if ( NdisEqualMemory( pPmkidCache->bssid, pBssid, MRVDRV_ETH_ADDR_LEN ) )
			break;
	}

	if ( idx < Adapter->NumOfPmkid )
		return idx;
	else
		return -1;
}

void DbgDumpCurrentPmkidCache( IN PMRVDRV_ADAPTER Adapter )
{
	ULONG				idx, i;
	PPMKID_CACHE	pPmkidCache;

	pPmkidCache = Adapter->PmkidCache;
	
	DBGPRINT( DBG_MACEVENT, ("*** PMKID cache dump ***\n") );
	DBGPRINT( DBG_MACEVENT, ("   Total number of PMKIDs is %d\n", Adapter->NumOfPmkid) );

	for ( idx=0; idx<Adapter->NumOfPmkid; idx++ )
	{
		DBGPRINT( DBG_MACEVENT, ("   %2x:%2x:%2x:%2x:%2x",
				pPmkidCache[idx].bssid[0], 
				pPmkidCache[idx].bssid[1], 
				pPmkidCache[idx].bssid[2], 
				pPmkidCache[idx].bssid[3],
				pPmkidCache[idx].bssid[4],
				pPmkidCache[idx].bssid[5] ) );

		DBGPRINT( DBG_MACEVENT, ("  [ ") );

		for ( i=0; i<LEN_OF_PMKID; i++ )
			DBGPRINT( DBG_MACEVENT, ("%2x ", pPmkidCache[idx].pmkid[i]) );

		DBGPRINT( DBG_MACEVENT, ("]\n") );
	}
}

void DbgDumpRSN( IN PMRVDRV_ADAPTER Adapter )
{
}

UINT PrepareRSNForOsNotify( IN PMRVDRV_ADAPTER Adapter, IN UCHAR *pDesiredSsid, IN UINT nSsidLen )
{
	UINT	nIdxBss, nIdxCand;
	PPMKID_CANDIDATE		pPmkidCand;
	PNDIS_WLAN_BSSID_EX	pBssidEx;

// tt ++ patch pmk
	static NDIS_802_11_MAC_ADDRESS	s_PrevAP[3];
	static DWORD						s_IdxAP=0, s_NumAP=0;
	DWORD				i;
// tt --

	DBGPRINT( DBG_MACEVENT, ("+ PrepareRSNForOsNotify\n") );

	DBGPRINT( DBG_MACEVENT, ("   TotalNumOfBssid=%d, DesiredSsid=%c%c%c%c...\n",
		Adapter->ulPSNumOfBSSIDs,
		pDesiredSsid[0],
		pDesiredSsid[1], 
		pDesiredSsid[2], 
		pDesiredSsid[3] ) );

// tt ++ patch pmk
    DBGPRINT( DBG_MACEVENT, ("   Going to append previous %d APs\n", s_NumAP ) );
    nIdxCand = 0;
    for ( i=0; i<s_NumAP; i++ )
    {
        pPmkidCand = &(Adapter->RSNPmkidCandidateList.CandidateList[nIdxCand]);
        pPmkidCand->Flags = 0; // means PreAuth disabled.
        NdisMoveMemory( pPmkidCand->Bssid, s_PrevAP[i], sizeof(pPmkidCand->Bssid) );
        nIdxCand ++;
    }
    DBGPRINT( DBG_MACEVENT, ("   Added %d APs\n", nIdxCand ) );
// tt --

#if 0 // tt ++ patch pmk
	for( nIdxBss=0, nIdxCand=0; nIdxBss<Adapter->ulPSNumOfBSSIDs && nIdxCand<MAX_PMKID_CANDIDATE; nIdxBss++ )
#else
       for( nIdxBss=0; nIdxBss<Adapter->ulPSNumOfBSSIDs && nIdxCand<MAX_PMKID_CANDIDATE; nIdxBss++ )
#endif
	{
		pBssidEx = &(Adapter->PSBSSIDList[nIdxBss]);

//		DBGPRINT( DBG_MACEVENT, ("   matching %c%c%c...\n", 
//			pBssidEx->Ssid.Ssid[0],
//			pBssidEx->Ssid.Ssid[1], 
//			pBssidEx->Ssid.Ssid[2] ) );
		
		if ( nSsidLen == 0 || 
			(nSsidLen==pBssidEx->Ssid.SsidLength && NdisEqualMemory(pDesiredSsid, pBssidEx->Ssid.Ssid, nSsidLen)) )
		{
			pPmkidCand = &(Adapter->RSNPmkidCandidateList.CandidateList[nIdxCand]);
// tt ++ patch pmk
                     for ( i=0; i<s_NumAP; i++ )
                     {
                        if ( NdisEqualMemory( s_PrevAP[i], pBssidEx->MacAddress, 6 ) )
                            break;
                     }
                     if ( i < s_NumAP ) continue;
// tt --
			// TODO: value of the Flags should depend on PreAuth field of RSNCapability that comes from an AP.
			pPmkidCand->Flags = 0; // means PreAuth disabled.
			NdisMoveMemory( pPmkidCand->Bssid, pBssidEx->MacAddress, sizeof(pPmkidCand->Bssid) );

			nIdxCand ++;
// tt ++ patch pmk
                     NdisMoveMemory( s_PrevAP[s_IdxAP], pBssidEx->MacAddress, sizeof(NDIS_802_11_MAC_ADDRESS) );
                     s_IdxAP ++;
                     if ( s_NumAP < 3 )    s_NumAP ++;
                     if ( s_IdxAP >= 3 )    s_IdxAP = 0;
// tt --
		}
	}

	DBGPRINT( DBG_MACEVENT, ("- Pr

⌨️ 快捷键说明

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