📄 miscproc.c
字号:
Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_BROADCAST_ENABLE;
if ( CurrentPacketFilter & NDIS_PACKET_TYPE_PROMISCUOUS )
Adapter->usMacControlRecord |= HostCmd_ACT_MAC_PROMISCUOUS_ENABLE;
else
Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_PROMISCUOUS_ENABLE;
#ifdef WMM
if ( CurrentPacketFilter & HostCmd_ACT_MAC_WMM_ENABLE )
Adapter->usMacControlRecord |= HostCmd_ACT_MAC_WMM_ENABLE;
else
Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_WMM_ENABLE;
#endif
}
// tt ++ wep+tkip
if ( Adapter->usMacControlRecord & HostCmd_ACT_MAC_PROMISCUOUS_ENABLE )
{
DBGPRINT(DBG_WEP, ( L"[Mrvl] promiscuous bit is ON, driver will disable it!\n" ));
Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_PROMISCUOUS_ENABLE;
}
// tt --
DBGPRINT(DBG_WEP | DBG_CRLF | DBG_ALLEN ,("+Set HostCmd_CMD_MAC_CONTROL 0x%x \n", Adapter->usMacControlRecord));
// Send MAc control command ro station
Status=PrepareAndSendCommand(
Adapter,
HostCmd_CMD_MAC_CONTROL,
Adapter->usMacControlRecord,
HostCmd_OPTION_USE_INT,
(NDIS_OID)0,
HostCmd_PENDING_ON_NONE,
0,
FALSE,
NULL,
NULL,
NULL,
NULL);
return Status;
}
NDIS_STATUS
SetMacPacketFilterOID(
IN PMRVDRV_ADAPTER Adapter,
IN ULONG CurrentPacketFilter
)
{
NDIS_STATUS Status;
DBGPRINT(DBG_WEP | DBG_CRLF | DBG_ALLEN ,("+SetMacPacketFilterOID() 0x%x \n", CurrentPacketFilter));
if (CurrentPacketFilter == 0)
{
Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_ALL_MULTICAST_ENABLE;
Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_MULTICAST_ENABLE;
Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_BROADCAST_ENABLE;
Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_PROMISCUOUS_ENABLE;
Adapter->usMacControlRecord |= (HostCmd_ACT_MAC_RX_ON |
HostCmd_ACT_MAC_TX_ON |
HostCmd_ACT_MAC_INT_ENABLE);
}
else
{
// Set default MAC option
Adapter->usMacControlRecord |= (HostCmd_ACT_MAC_RX_ON |
HostCmd_ACT_MAC_TX_ON );
// need to check if currently the wep is on
if ( Adapter->WEPStatus == Ndis802_11WEPEnabled )
{
DBGPRINT(DBG_WEP,("WEPStatus set, setting HostCmd_ACT_MAC_WEP_ENABLE in CmdOption\n"));
Adapter->usMacControlRecord |= HostCmd_ACT_MAC_WEP_ENABLE;
}
else
{
Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_WEP_ENABLE;
}
if( CurrentPacketFilter & NDIS_PACKET_TYPE_ALL_MULTICAST )
Adapter->usMacControlRecord |= HostCmd_ACT_MAC_ALL_MULTICAST_ENABLE;
else
Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_ALL_MULTICAST_ENABLE;
if ( CurrentPacketFilter & NDIS_PACKET_TYPE_MULTICAST )
Adapter->usMacControlRecord |= HostCmd_ACT_MAC_MULTICAST_ENABLE;
else
Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_MULTICAST_ENABLE;
if ( CurrentPacketFilter & NDIS_PACKET_TYPE_BROADCAST )
Adapter->usMacControlRecord |= HostCmd_ACT_MAC_BROADCAST_ENABLE;
else
Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_BROADCAST_ENABLE;
if ( CurrentPacketFilter & NDIS_PACKET_TYPE_PROMISCUOUS )
Adapter->usMacControlRecord |= HostCmd_ACT_MAC_PROMISCUOUS_ENABLE;
else
Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_PROMISCUOUS_ENABLE;
}
// tt ++ wep+tkip
if ( Adapter->usMacControlRecord & HostCmd_ACT_MAC_PROMISCUOUS_ENABLE )
{
DBGPRINT(DBG_WEP, ( L"[Mrvl] promiscuous bit is ON, driver will disable it!\n" ));
Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_PROMISCUOUS_ENABLE;
}
// tt --
DBGPRINT(DBG_WEP | DBG_CRLF | DBG_ALLEN ,("+Set HostCmd_CMD_MAC_CONTROL 0x%x \n", Adapter->usMacControlRecord));
// Send MAc control command ro station
Status = PrepareAndSendCommand(
Adapter,
HostCmd_CMD_MAC_CONTROL,
Adapter->usMacControlRecord,
HostCmd_OPTION_USE_INT,
(NDIS_OID)0,
HostCmd_PENDING_ON_SET_OID, // TEST
//HostCmd_PENDING_ON_NONE,
0,
FALSE,
NULL,
NULL,
NULL,
NULL);
return Status;
}
#ifdef UNDER_CE
#ifdef MRVL_PRINT_DBG_MSG
// redirect DBGPrint to a file
#if 0//def MRVL_WINCE50
void MrvPrintFile(const char *fmt, ...)
{
static TCHAR szHeader[] = TEXT("TUX_CF: ");
TCHAR szBuffer[1024];
TCHAR szFormat[1024];
va_list pArgs;
va_start(pArgs, fmt);
MultiByteToWideChar(CP_ACP, 0,fmt, 1024, szFormat,1024);
lstrcpy(szBuffer, szHeader);
wvsprintf(
szBuffer,
szFormat,
pArgs);
va_end(pArgs);
_tcscat(szBuffer, TEXT("\r\n"));
OutputDebugString(szBuffer);
}
#else //#ifdef MRVL_WINCE50
void MrvPrintFile(const char *fmt, ...)
{
va_list argP;
FILE *MrvDbgfp;
DWORD dwThreadID;
DWORD dwTick;
#ifdef IF_SDIO
MrvDbgfp = fopen("\\My Documents\\MrvlSD-25DBG.txt","a+");
#else ///IF_SDIO
MrvDbgfp = fopen("\\My Documents\\MrvlCF-25DBG.log","a+");
#endif ///IF_SDIO
//MessageBox(NULL, TEXT("printdbgmsg"), TEXT("CF25"), MB_OK);
if ( MrvDbgfp == NULL )
{
//MessageBox(NULL, TEXT("open file failed"), TEXT("CF25"), MB_OK);
return;
}
dwThreadID = GetCurrentThreadId();
dwTick = GetTickCount();
fprintf(MrvDbgfp, "%8x:%d:", dwThreadID, dwTick);
va_start(argP, fmt);
vfprintf(MrvDbgfp, fmt, argP);
fflush(MrvDbgfp);
va_end(argP);
fclose(MrvDbgfp);
}
#endif //#ifdef MRVL_WINCE50
#endif // #ifdef MRVL_PRINT_DBG_MSG
#endif // #ifdef UNDER_CE
#ifdef MRVL_PRINT_FILE_MSG
void MrvPrintFileMSG(const char *fmt, ...)
{
va_list argP;
FILE *MrvDbgfp;
DWORD dwThreadID;
DWORD dwTick;
MrvDbgfp = fopen("\\My Documents\\MrvPrintFileMSG.txt","a+");
//MessageBox(NULL, TEXT("printdbgmsg"), TEXT("CF25"), MB_OK);
if ( MrvDbgfp == NULL )
{
//MessageBox(NULL, TEXT("open file failed"), TEXT("CF25"), MB_OK);
return;
}
dwThreadID = GetCurrentThreadId();
dwTick = GetTickCount();
fprintf(MrvDbgfp, "%8x:%d:", dwThreadID, dwTick);
va_start(argP, fmt);
vfprintf(MrvDbgfp, fmt, argP);
fflush(MrvDbgfp);
va_end(argP);
fclose(MrvDbgfp);
}
#endif //MRVL_PRINT_FILE_MSG
void AllenPrintFile(const char *fmt, ...)
{
va_list argP;
FILE *MrvDbgfp;
DWORD dwThreadID;
DWORD dwTick;
MrvDbgfp = fopen("\\My Documents\\MrvlCF-25DBG.log","a+");
//MessageBox(NULL, TEXT("printdbgmsg"), TEXT("CF25"), MB_OK);
if ( MrvDbgfp == NULL )
{
//MessageBox(NULL, TEXT("open file failed"), TEXT("CF25"), MB_OK);
return;
}
dwThreadID = GetCurrentThreadId();
dwTick = GetTickCount();
// fprintf(MrvDbgfp, "%8x:%d:", dwThreadID, dwTick);
va_start(argP, fmt);
vfprintf(MrvDbgfp, fmt, argP);
fflush(MrvDbgfp);
va_end(argP);
fclose(MrvDbgfp);
}
/******************************************************************************
*
* Name: ConvertNDISRateToFWIndex()
*
* Description: Look up the FW index for the rate
*
* Arguments: NDISRate Rate in NDIS format
*
* Return Value: Equivalent index in FW, return MRVDRV_NUM_SUPPORTED_RATES
* if no matching rate is found
*
* Notes:
*
*****************************************************************************/
UCHAR ConvertNDISRateToFWIndex(UCHAR NDISRate)
{
UCHAR i;
for ( i=0; i < MRVDRV_NUM_SUPPORTED_RATES; i++ )
{
if ( NDISRate == MrvDrvSupportedRates[i] )
{
return i;
}
}
return MRVDRV_NUM_SUPPORTED_RATES;
}
/******************************************************************************
*
* Name: ConvertFWIndexToNDISRate()
*
* Description: Look up the rate for FW index
*
* Arguments: FWIndex
*
* Return Value: Equivalent NDIS Rate, return 0
* if no matching rate is found
*
* Notes:
*
*****************************************************************************/
UCHAR ConvertFWIndexToNDISRate(UCHAR FWIndex)
{
if ( FWIndex >= MRVDRV_NUM_SUPPORTED_RATES )
{
return 0;
}
return MrvDrvSupportedRates[FWIndex];
}
//lykao, 053005, for Hidden SSID, from Plus
UCHAR FindSSIDInList(
IN PMRVDRV_ADAPTER Adapter,
IN PNDIS_802_11_SSID pSSID)
{
UCHAR i, index = 0xFF;
for (i=0; i<Adapter->ulNumOfBSSIDs; i++)
{
if(Adapter->BSSIDList[i].Ssid.SsidLength == pSSID->SsidLength)
{
if(NdisEqualMemory(Adapter->BSSIDList[i].Ssid.Ssid,
pSSID->Ssid, pSSID->SsidLength))
index = i;
}
}
return index;
}
#ifdef AUTO_REASSOCIATION
UCHAR FindBSSIDInList(
IN PMRVDRV_ADAPTER Adapter,
IN PVOID pBssid )
{
UCHAR i, index = 0xFF;
for (i=0; i<Adapter->ulNumOfBSSIDs; i++)
{
if ( pBssid &&
NdisEqualMemory( Adapter->BSSIDList[i].MacAddress, pBssid, MRVDRV_ETH_ADDR_LEN) )
{
index = i;
break;
}
}
return index;
}
#endif
#ifdef ADHOCAES
/******************************************************************************
*
* Name: ascii2hex()
*
* Description: convert acssic hex string to hex value
*
* Arguments: s-->input string d-->output value array dlen-->input length
*
* Return Value:
*
* Notes: for ADHOCAES key convert to sync. with linux driver
*
*****************************************************************************/
int ascii2hex(UCHAR *d, char *s, int dlen)
{
int i;
UCHAR n;
NdisZeroMemory(d, dlen);
for (i = 0; i < dlen * 2; i++)
{
/*
if ((s[i] >= 48) && (s[i] <= 57))
n = s[i] - 48;
else if ((s[i] >= 65) && (s[i] <= 70))
n = s[i] - 55;
else if ((s[i] >= 97) && (s[i] <= 102))
n = s[i] - 87;
else
break;
*/
n=s[i];
if ((i % 2) == 0)
n = n * 16;
d[i / 2] += n;
}
return i;
}
#endif
// The function just filter and reorganize WPA IE now and will skip WMM IE
VOID
RegularIeFilter(UCHAR *IeBuf, USHORT *pBufLen)
{
UCHAR IeId;
UCHAR IeLen,TmpIeLen;
USHORT CurPos =0;
UCHAR TmpBuf[500];
USHORT TmpPos = 0;
BOOLEAN IsWpaFound = FALSE;
UCHAR WPA_OUI[] = { 0x00, 0x50, 0xF2, 0x01};
#ifdef WMM
UCHAR WMM_OUI[] = { 0x00, 0x50, 0xF2, 0x02};
#endif
#ifdef CCX
UCHAR CCX_OUI[] = { 0x00, 0x40, 0x96};
#endif
NdisMoveMemory( TmpBuf, IeBuf ,*pBufLen);
//DBGPRINT(DBG_ALLEN, ("RegularIeFilter++ *pBufLen = %d\n", *pBufLen));
//HexDump(DBG_ALLEN, "IeBuf ", IeBuf, *pBufLen);
while (TmpPos < *pBufLen)
{
IeId = *(TmpBuf + TmpPos);
TmpIeLen = *(TmpBuf + TmpPos + 1);
IeLen = TmpIeLen;
switch (IeId)
{
case 0xdd: // WPA IE or WMM IE
{
if (NdisEqualMemory((TmpBuf + TmpPos + 2), WPA_OUI, 4) == 1) //WPA IE
{
if (!IsWpaFound)
{
NdisMoveMemory((IeBuf + CurPos), (TmpBuf + TmpPos), TmpIeLen + 2);
HexDump(DBG_WPA, "WPA IE ", (IeBuf + CurPos), TmpIeLen + 2);
CurPos += (TmpIeLen + 2);
IsWpaFound = TRUE;
}
}
#ifdef CCX
else if ( NdisEqualMemory( (TmpBuf + TmpPos + 2), CCX_OUI, 3 ) == 1 )
{
NdisMoveMemory((IeBuf + CurPos), (TmpBuf + TmpPos), TmpIeLen + 2);
CurPos += (TmpIeLen + 2);
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -