VOID ApCliWpaDisassocApAndBlockAssoc( IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3) { RTMP_ADAPTER *pAd = (PRTMP_ADAPTER)FunctionContext; MLME_DISASSOC_REQ_STRUCT DisassocReq; PAPCLI_STRUCT pApCliEntry; PULONG pCurrState = &pAd->ApCfg.ApCliTab[0].CtrlCurrState; pAd->ApCfg.ApCliTab[0].bBlockAssoc = TRUE; DBGPRINT(RT_DEBUG_TRACE, ("(%s) disassociate with current AP after sending second continuous EAPOL frame.\n", __FUNCTION__)); pApCliEntry = &pAd->ApCfg.ApCliTab[0]; DisassocParmFill(pAd, &DisassocReq, pApCliEntry->MlmeAux.Bssid, REASON_MIC_FAILURE); MlmeEnqueue(pAd, APCLI_ASSOC_STATE_MACHINE, APCLI_MT2_MLME_DISASSOC_REQ, sizeof(MLME_DISASSOC_REQ_STRUCT), &DisassocReq, 0); pApCliEntry->MicErrCnt = 0; }
VOID WpaDisassocApAndBlockAssoc( IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3) { RTMP_ADAPTER *pAd = (PRTMP_ADAPTER)FunctionContext; MLME_DISASSOC_REQ_STRUCT DisassocReq; // disassoc from current AP first DBGPRINT(RT_DEBUG_TRACE, ("RTMPReportMicError - disassociate with current AP after sending second continuous EAPOL frame\n")); DisassocParmFill(pAd, &DisassocReq, pAd->CommonCfg.Bssid, REASON_MIC_FAILURE); MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, MT2_MLME_DISASSOC_REQ, sizeof(MLME_DISASSOC_REQ_STRUCT), &DisassocReq); pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_DISASSOC; pAd->StaCfg.bBlockAssoc = TRUE; }
/* ========================================================================== Description: APCLI MLME Disconnect Req state machine procedure ========================================================================== */ static VOID ApCliCtrlDeAssocAction( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem) { PAPCLI_STRUCT pApCliEntry; MLME_DISASSOC_REQ_STRUCT DisassocReq; USHORT ifIndex = (USHORT)(Elem->Priv); PULONG pCurrState = NULL; BOOLEAN bValid = FALSE; DBGPRINT(RT_DEBUG_TRACE, ("(%s) MLME Request Disconnect.\n", __FUNCTION__)); if ((ifIndex >= MAX_APCLI_NUM) ) return; pCurrState = &pAd->ApCfg.ApCliTab[ifIndex].CtrlCurrState; pApCliEntry = &pAd->ApCfg.ApCliTab[ifIndex]; DisassocParmFill(pAd, &DisassocReq, pAd->ApCfg.ApCliTab[ifIndex].MlmeAux.Bssid, REASON_DISASSOC_STA_LEAVING); bValid = pApCliEntry->Valid; MlmeEnqueue(pAd, APCLI_ASSOC_STATE_MACHINE, APCLI_MT2_MLME_DISASSOC_REQ, sizeof(MLME_DISASSOC_REQ_STRUCT), &DisassocReq, ifIndex); if (bValid) ApCliLinkDown(pAd, ifIndex); /* set the apcli interface be invalid. */ { pApCliEntry->Valid = FALSE; /* clear MlmeAux.Ssid and Bssid. */ NdisZeroMemory(pAd->ApCfg.ApCliTab[ifIndex].MlmeAux.Bssid, MAC_ADDR_LEN); pAd->ApCfg.ApCliTab[ifIndex].MlmeAux.SsidLen = 0; NdisZeroMemory(pAd->ApCfg.ApCliTab[ifIndex].MlmeAux.Ssid, MAX_LEN_OF_SSID); pAd->ApCfg.ApCliTab[ifIndex].MlmeAux.Rssi = 0; } *pCurrState = APCLI_CTRL_DEASSOC; return; }
VOID RTMPRemoveRepeaterDisconnectEntry( IN PRTMP_ADAPTER pAd, IN UCHAR apIdx, IN UCHAR CliIdx) { PAPCLI_STRUCT pApCliEntry; USHORT ifIndex = apIdx; PULONG pCurrState = NULL; BOOLEAN bValid = FALSE; MLME_DISASSOC_REQ_STRUCT DisassocReq; MLME_DEAUTH_REQ_STRUCT DeAuthFrame; BOOLEAN Cancelled; DBGPRINT(RT_DEBUG_OFF, ("(%s) disconnect apIdx=%d CliIdx=%d.\n", __FUNCTION__,apIdx, CliIdx)); if (ifIndex >= MAX_APCLI_NUM) return; pCurrState = &pAd->ApCfg.ApCliTab[ifIndex].RepeaterCli[CliIdx].CtrlCurrState; pApCliEntry = &pAd->ApCfg.ApCliTab[ifIndex]; bValid = pAd->ApCfg.ApCliTab[ifIndex].RepeaterCli[CliIdx].CliValid; RTMPCancelTimer(&pApCliEntry->RepeaterCli[CliIdx].ApCliAssocTimer, &Cancelled); RTMPCancelTimer(&pApCliEntry->RepeaterCli[CliIdx].ApCliAuthTimer, &Cancelled); if (*pCurrState == APCLI_CTRL_ASSOC) { *pCurrState = APCLI_CTRL_DEASSOC; DisassocParmFill(pAd, &DisassocReq, pAd->ApCfg.ApCliTab[ifIndex].MlmeAux.Bssid, REASON_DISASSOC_STA_LEAVING); MlmeEnqueue(pAd, APCLI_ASSOC_STATE_MACHINE, APCLI_MT2_MLME_DISASSOC_REQ, sizeof(MLME_DISASSOC_REQ_STRUCT), &DisassocReq, (64 + (MAX_EXT_MAC_ADDR_SIZE*ifIndex) + CliIdx)); RTMP_MLME_HANDLER(pAd); } else if (*pCurrState == APCLI_CTRL_CONNECTED) { DeAuthFrame.Reason = (USHORT)REASON_DEAUTH_STA_LEAVING; COPY_MAC_ADDR(DeAuthFrame.Addr, pAd->ApCfg.ApCliTab[ifIndex].MlmeAux.Bssid); MlmeEnqueue(pAd, APCLI_AUTH_STATE_MACHINE, APCLI_MT2_MLME_DEAUTH_REQ, sizeof(MLME_DEAUTH_REQ_STRUCT), &DeAuthFrame, (64 + (MAX_EXT_MAC_ADDR_SIZE*ifIndex) + CliIdx)); RTMP_MLME_HANDLER(pAd); if (bValid) ApCliLinkDown(pAd, (64 + (MAX_EXT_MAC_ADDR_SIZE*ifIndex) + CliIdx)); *pCurrState = APCLI_CTRL_DISCONNECTED; } else { if (bValid) ApCliLinkDown(pAd, (64 + (MAX_EXT_MAC_ADDR_SIZE*ifIndex) + CliIdx)); *pCurrState = APCLI_CTRL_DISCONNECTED; } return; }