📄 oidproc.c
字号:
}
size = (((sizeof(NDIS_WLAN_BSSID_EX) +
pBSSIDList[idx].IELength) + 3) >> 2) << 2;
// HexDump(DBG_SCAN, "NDIS_WLAN_BSSID_EX:", (PUCHAR)pPrevBuf, size);
/*DBGPRINT(DBG_SCAN, ("bssidlist size = %d, sizeof ex structure = "
"%d, ielength = %d, size of orig "
"structure = %d\n",
size, sizeof(NDIS_WLAN_BSSID_EX),
pBSSIDList[idx].IELength,
sizeof(NDIS_WLAN_BSSID)));*/
DBGPRINT(DBG_SCAN, ("Copied SSID %s, %2x-%2x-%2x-%2x-%2x-%2x\n",
pBSSIDList[idx].Ssid.Ssid,
pBSSIDList[idx].MacAddress[0],
pBSSIDList[idx].MacAddress[1],
pBSSIDList[idx].MacAddress[2],
pBSSIDList[idx].MacAddress[3],
pBSSIDList[idx].MacAddress[4],
pBSSIDList[idx].MacAddress[5]));
// move the pointers
pCurBuf = pPrevBuf + size;
ulActualWriteSize += size;
pPrevBuf = pCurBuf;
}
*BytesWritten = ulActualWriteSize;
*BytesNeeded = 0;
return (Status);
}
#ifdef WPA
/******************************************************************************
*
* Name: MrvDrvSetEncryptionStatus()
*
* Description: process set encryption status OID
*
* Arguments:
* IN PMRVDRV_ADAPTER Adapter
* IN NDIS_802_11_ENCRYPTION_STATUS EncryptionStatus
*
* Return Value:
* NDIS_STATUS_SUCCESS
* NDIS_STATUS_NOT_SUPPORTED
*
* Notes:
* Due to the new OID operation mechanism, this function can only be called from
* MrvDrvSetInformation(). TT noted.
*
*****************************************************************************/
NDIS_STATUS
MrvDrvSetEncryptionStatus(
IN PMRVDRV_ADAPTER Adapter,
IN NDIS_802_11_ENCRYPTION_STATUS EncryptionStatus,
IN NDIS_OID Oid,
IN PVOID InformationBuffer,
OUT PULONG BytesRead,
OUT PULONG BytesNeeded
)
{
NDIS_STATUS Status;
USHORT Action;
NDIS_802_11_ENCRYPTION_STATUS PrevEncryptionStatus;
PrevEncryptionStatus = Adapter->EncryptionStatus;
switch (EncryptionStatus)
{
case Ndis802_11Encryption3Enabled:
//dralee 081005, V4
//return NDIS_STATUS_NOT_SUPPORTED;
case Ndis802_11Encryption3KeyAbsent:
case Ndis802_11Encryption2Enabled:
case Ndis802_11Encryption2KeyAbsent:
if ( ! FW_IS_WPA_ENABLED(Adapter) )
{
return NDIS_STATUS_NOT_SUPPORTED;
}
if ( (Adapter->MediaConnectStatus == NdisMediaStateConnected) &&
//dralee 081005, V4
//(PrevEncryptionStatus != Ndis802_11Encryption2Enabled) )
((PrevEncryptionStatus != Ndis802_11Encryption2Enabled) &&
(PrevEncryptionStatus != Ndis802_11Encryption3Enabled) )
)
{
USHORT usCommand;
// Adapter is connected and there is a mode change
// Disconnect first
if ( Adapter->InfrastructureMode == Ndis802_11Infrastructure )
{
usCommand = HostCmd_CMD_802_11_DEAUTHENTICATE;
}
else
{
usCommand = HostCmd_CMD_802_11_AD_HOC_STOP;
}
// completely clean up
Status=PrepareAndSendCommand(
Adapter,
usCommand,
0,
HostCmd_OPTION_USE_INT,
Oid,
HostCmd_PENDING_ON_NONE,
0,
FALSE,
NULL,
NULL,
NULL,
NULL);
ResetDisconnectStatus(Adapter);
}
if ( (PrevEncryptionStatus == Ndis802_11Encryption1Enabled) ||
(PrevEncryptionStatus == Ndis802_11Encryption1KeyAbsent) )
{
// disable WEP
/* dralee 081005, V4
Adapter->usMacControlRecord |=
( HostCmd_ACT_MAC_RX_ON |
HostCmd_ACT_MAC_TX_ON |
HostCmd_ACT_MAC_INT_ENABLE);
Adapter->usMacControlRecord &=
~HostCmd_STATUS_MAC_WEP_ENABLE;
*/
Action = HostCmd_STATUS_MAC_RX_ON |
HostCmd_STATUS_MAC_TX_ON |
HostCmd_STATUS_MAC_INT_ENABLE;
Status=PrepareAndSendCommand(
Adapter,
HostCmd_CMD_MAC_CONTROL,
//Adapter->usMacControlRecord,
Action,
HostCmd_OPTION_USE_INT,
Oid,
HostCmd_PENDING_ON_NONE,
0,
FALSE,
NULL,
BytesRead,
BytesNeeded,
InformationBuffer);
}
#ifdef REASSOCIATE
if ((Adapter->bIsReconnectEnable == TRUE) ||
(Adapter->bIsBeaconLoseEvent == TRUE) ||
(Adapter->bIsDeauthenticationEvent == TRUE)
#ifdef ACTIVE_ROAMING
||(Adapter->bIsActiveRoaming== TRUE)
#endif
)
{
Adapter->EncryptionStatus = EncryptionStatus;
}
else
#endif
{
// tt broadcom mix mode ++
if(EncryptionStatus==Ndis802_11Encryption3Enabled||EncryptionStatus==Ndis802_11Encryption3KeyAbsent)
Adapter->EncryptionStatus = Ndis802_11Encryption3KeyAbsent;
else
Adapter->EncryptionStatus = Ndis802_11Encryption2KeyAbsent;
// tt broadcom mix mode --
}
// plus added (for WEP -> WPA-PSK TKIP)
Adapter->WEPStatus = Ndis802_11WEPDisabled;
// Enabling FW WPA will occur just right before association
// command is sent down
Status = NDIS_STATUS_SUCCESS;
break;
case Ndis802_11Encryption1Enabled:
case Ndis802_11Encryption1KeyAbsent:
Adapter->WPAEnabled = FALSE;
// disable RSN if previous status is 2 or 3
if ( (PrevEncryptionStatus == Ndis802_11Encryption2Enabled) ||
(PrevEncryptionStatus == Ndis802_11Encryption3Enabled) ||
(PrevEncryptionStatus == Ndis802_11Encryption2KeyAbsent) ||
(PrevEncryptionStatus == Ndis802_11Encryption3KeyAbsent))
{
// check if it is necessary to disconnect
if ( Adapter->MediaConnectStatus == NdisMediaStateConnected )
{
USHORT usCommand;
// Adapter is connected and there is a mode change
// Disconnect first
if ( Adapter->InfrastructureMode == Ndis802_11Infrastructure )
{
usCommand = HostCmd_CMD_802_11_DEAUTHENTICATE;
}
else
{
usCommand = HostCmd_CMD_802_11_AD_HOC_STOP;
}
// completely clean up
Status=PrepareAndSendCommand(
Adapter,
usCommand,
0,
HostCmd_OPTION_USE_INT,
Oid,
HostCmd_PENDING_ON_NONE,
0,
FALSE,
NULL,
NULL,
NULL,
NULL);
ResetDisconnectStatus(Adapter);
}
Status = PrepareAndSendCommand(
Adapter,
HostCmd_CMD_802_11_ENABLE_RSN,
HostCmd_ACT_SET,
HostCmd_OPTION_USE_INT,
Oid,
HostCmd_PENDING_ON_NONE,
0,
FALSE,
NULL,
BytesRead,
BytesNeeded,
InformationBuffer);
}
Adapter->EncryptionStatus = Ndis802_11Encryption1Enabled;
Adapter->WEPStatus = Ndis802_11WEPEnabled;
// Enable WEP
// TODO: May need to check for previous status, not sure
// if OS disable WPA first if WPA is used in previous association
/* dralee 081005, V4
Adapter->usMacControlRecord |=
(HostCmd_ACT_MAC_RX_ON |
HostCmd_ACT_MAC_TX_ON |
HostCmd_ACT_MAC_WEP_ENABLE |
HostCmd_ACT_MAC_INT_ENABLE);
*/
Action = HostCmd_STATUS_MAC_RX_ON |
HostCmd_STATUS_MAC_TX_ON |
HostCmd_STATUS_MAC_WEP_ENABLE |
HostCmd_STATUS_MAC_INT_ENABLE;
//BugFix
if(Adapter->LastAddedWEPKey.KeyLength==13)
{
//WEP 128bit
Action = Action |HostCmd_ACT_MAC_WEP_TYPE;
DBGPRINT(DBG_DEBUGUSE,("MrvDrvSetEncryptionStatus: SetCMD 0x28 WEP 128bit\n"));
}else
{
//WEP 64bit
Action = Action&(~HostCmd_ACT_MAC_WEP_TYPE);
DBGPRINT(DBG_DEBUGUSE,("MrvDrvSetEncryptionStatus: SetCMD 0x28 WEP 64bit\n"));
}
Status=PrepareAndSendCommand(
Adapter,
HostCmd_CMD_MAC_CONTROL,
//Adapter->usMacControlRecord, //dralee 081005, V4
Action,
HostCmd_OPTION_USE_INT,
Oid,
HostCmd_PENDING_ON_SET_OID,
0,
FALSE,
NULL,
BytesRead,
BytesNeeded,
InformationBuffer);
if (Status == NDIS_STATUS_FAILURE || Status == NDIS_STATUS_RESOURCES)
{
// return Status;
}
else
{
Status = NDIS_STATUS_PENDING;
}
break;
case Ndis802_11EncryptionDisabled:
Adapter->WPAEnabled = FALSE;
switch ( Adapter->EncryptionStatus )
{
case Ndis802_11Encryption3Enabled:
case Ndis802_11Encryption2Enabled:
case Ndis802_11Encryption2KeyAbsent:
case Ndis802_11Encryption3KeyAbsent:
// disable TKIP/WPA
Status = PrepareAndSendCommand(
Adapter,
HostCmd_CMD_802_11_ENABLE_RSN,
HostCmd_ACT_SET,
HostCmd_OPTION_USE_INT,
Oid,
HostCmd_PENDING_ON_SET_OID,
0,
FALSE,
NULL,
BytesRead,
BytesNeeded,
InformationBuffer);
if (Status == NDIS_STATUS_FAILURE || Status == NDIS_STATUS_RESOURCES)
{
//return Status;
}
else
{
Status = NDIS_STATUS_PENDING;
}
break;
case Ndis802_11Encryption1Enabled:
case Ndis802_11Encryption1KeyAbsent:
// disable WEP
/* dralee 081005, V4
Adapter->usMacControlRecord |=
( HostCmd_ACT_MAC_RX_ON |
HostCmd_ACT_MAC_TX_ON |
HostCmd_ACT_MAC_INT_ENABLE);
Adapter->usMacControlRecord &=
~HostCmd_STATUS_MAC_WEP_ENABLE;
*/
Action = HostCmd_STATUS_MAC_RX_ON |
HostCmd_STATUS_MAC_TX_ON |
HostCmd_STATUS_MAC_INT_ENABLE;
Status=PrepareAndSendCommand(
Adapter,
HostCmd_CMD_MAC_CONTROL,
//Adapter->usMacControlRecord, //dralee 081005, V4
Action,
HostCmd_OPTION_USE_INT,
Oid,
HostCmd_PENDING_ON_SET_OID,
0,
FALSE,
NULL,
BytesRead,
BytesNeeded,
InformationBuffer);
if (Status == NDIS_STATUS_FAILURE || Status == NDIS_STATUS_RESOURCES)
{
//return Status;
}
else
{
Status = NDIS_STATUS_PENDING;
}
break;
default:
// do nothing
Status = NDIS_STATUS_SUCCESS;
break;
} //switch ( Adapter->EncryptionStatus )
Adapter->EncryptionStatus = Ndis802_11EncryptionDisabled;
Adapter->WEPStatus = Ndis802_11WEPDisabled;
break; //case Ndis802_11EncryptionDisabled:
default:
DBGPRINT(DBG_OID | DBG_WPA, ("Not supported EncryptionStatus: %d\n",
EncryptionStatus));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -