/*----------------------------------------------------------------------------*/ BOOL /* ENUM_PORT_CONTROL_RESULT */ secTxPortControlCheck(IN P_ADAPTER_T prAdapter, IN P_MSDU_INFO_T prMsduInfo, IN P_STA_RECORD_T prStaRec) { ASSERT(prAdapter); ASSERT(prMsduInfo); ASSERT(prStaRec); if (prStaRec) { /* Todo:: */ if (prMsduInfo->fgIs802_1x) return TRUE; if (prStaRec->fgPortBlock == TRUE) { DBGLOG(INIT, TRACE, ("Drop Tx packet due Port Control!\n")); return FALSE; } #if CFG_SUPPORT_WAPI if (prAdapter->rWifiVar.rConnSettings.fgWapiMode) { return TRUE; } #endif if (IS_STA_IN_AIS(prStaRec)) { if (!prAdapter->rWifiVar.rAisSpecificBssInfo.fgTransmitKeyExist && (prAdapter->rWifiVar.rConnSettings.eEncStatus == ENUM_ENCRYPTION1_ENABLED)) { DBGLOG(INIT, TRACE, ("Drop Tx packet due the key is removed!!!\n")); return FALSE; } } } return TRUE; }
/*----------------------------------------------------------------------------*/ static inline VOID secFsmTrans_CHECK_OK_to_SEND_EAPOL(IN P_ADAPTER_T prAdapter, IN P_STA_RECORD_T prSta) { P_AIS_SPECIFIC_BSS_INFO_T prAisBssInfo; ASSERT(prAdapter); ASSERT(prSta); prAisBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; ASSERT(prAisBssInfo); if (!IS_STA_IN_AIS(prSta)) { DBGLOG(RSN, INFO, "Counter Measure should occur at AIS network!!\n"); /* ASSERT(0); */ return; } prAisBssInfo->fgCheckEAPoLTxDone = TRUE; /* cnmTimerStartTimer(prAdapter, */ /* &prAisBssInfo->rRsnaEAPoLReportTimeoutTimer, */ /* SEC_TO_MSEC(EAPOL_REPORT_SEND_TIMEOUT_INTERVAL_SEC)); */ return; }
/*----------------------------------------------------------------------------*/ VOID secPrivacyFreeSta ( IN P_ADAPTER_T prAdapter, IN P_STA_RECORD_T prStaRec ) { UINT_32 entry; P_WLAN_TABLE_T prWtbl; if (!prStaRec) return; prWtbl = prAdapter->rWifiVar.arWtbl; prStaRec->ucWlanIndex = WTBL_RESERVED_ENTRY; prStaRec->ucBMCWlanIndex = WTBL_RESERVED_ENTRY; if ((IS_ADHOC_STA(prStaRec) || IS_STA_IN_AIS(prStaRec)) /* && prStaRec->ucBMCWlanIndex < WTBL_SIZE */) { for (entry = 0; entry < WTBL_SIZE; entry++) { if (prWtbl[entry].ucUsed && EQUAL_MAC_ADDR(prStaRec->aucMacAddr, prWtbl[entry].aucMacAddr)) { secPrivacyFreeForEntry(prAdapter, entry); #if DBG DBGLOG(RSN, TRACE, ("Free the STA entry (%lu)!\n", entry)); #endif } } } }
/*----------------------------------------------------------------------------*/ WLAN_STATUS aaaFsmSendEventJoinComplete(WLAN_STATUS rJoinStatus, P_STA_RECORD_T prStaRec, P_SW_RFB_T prSwRfb) { P_MSG_SAA_JOIN_COMP_T prJoinCompMsg; ASSERT(prStaRec); prJoinCompMsg = cnmMemAlloc(RAM_TYPE_TCM, sizeof(MSG_SAA_JOIN_COMP_T)); if (!prJoinCompMsg) return WLAN_STATUS_RESOURCES; if (IS_STA_IN_AIS(prStaRec)) prJoinCompMsg->rMsgHdr.eMsgId = MID_SAA_AIS_JOIN_COMPLETE; else if (IS_STA_IN_P2P(prStaRec)) prJoinCompMsg->rMsgHdr.eMsgId = MID_SAA_P2P_JOIN_COMPLETE; else if (IS_STA_IN_BOW(prStaRec)) prJoinCompMsg->rMsgHdr.eMsgId = MID_SAA_BOW_JOIN_COMPLETE; else ASSERT(0); prJoinCompMsg->rJoinStatus = rJoinStatus; prJoinCompMsg->prStaRec = prStaRec; prJoinCompMsg->prSwRfb = prSwRfb; mboxSendMsg(MBOX_ID_0, (P_MSG_HDR_T) prJoinCompMsg, MSG_SEND_METHOD_BUF); return WLAN_STATUS_SUCCESS; } /* end of saaFsmSendEventJoinComplete() */
/*----------------------------------------------------------------------------*/ BOOLEAN secIsProtectedFrame ( IN P_ADAPTER_T prAdapter, IN P_MSDU_INFO_T prMsdu, IN P_STA_RECORD_T prStaRec ) { ASSERT(prAdapter); ASSERT(prMsdu); ASSERT(prStaRec); //prStaRec = &(g_arStaRec[prMsdu->ucStaRecIndex]); if (prStaRec == NULL) { if (prAdapter->rWifiVar.rAisSpecificBssInfo.fgTransmitKeyExist) return TRUE; return FALSE; /* No privacy bit */ } /* Todo:: */ if (0 /* prMsdu->fgIs1xFrame */){ if (IS_STA_IN_AIS(prStaRec) && prAdapter->rWifiVar.rConnSettings.eAuthMode < AUTH_MODE_WPA) { DBGLOG(RSN, LOUD, ("For AIS Legacy 1x, always not encryped\n")); return FALSE; } else if (!prStaRec->fgTransmitKeyExist) { DBGLOG(RSN, LOUD, ("1x Not Protected.\n")); return FALSE; } else if (prStaRec->rSecInfo.fgKeyStored) { DBGLOG(RSN, LOUD, ("1x not Protected due key stored!\n")); return FALSE; } else { DBGLOG(RSN, LOUD, ("1x Protected.\n")); return TRUE; } } else { if (!prStaRec->fgTransmitKeyExist) { /* whsu , check for AIS only */ if (prAdapter->rWifiVar.rConnSettings.eAuthMode < AUTH_MODE_WPA && prAdapter->rWifiVar.rAisSpecificBssInfo.fgTransmitKeyExist){ DBGLOG(RSN, LOUD, ("Protected\n")); return TRUE; } } else { DBGLOG(RSN, LOUD, ("Protected.\n")); return TRUE; } } /* No sec or key is removed!!! */ return FALSE; }
/*----------------------------------------------------------------------------*/ VOID secFsmEventEapolTxDone(IN P_ADAPTER_T prAdapter, IN P_STA_RECORD_T prStaRec, IN ENUM_TX_RESULT_CODE_T rTxDoneStatus) { P_SEC_INFO_T prSecInfo; ENUM_SEC_STATE_T eNextState; BOOLEAN fgIsTransition = (BOOLEAN) FALSE; P_AIS_SPECIFIC_BSS_INFO_T prAisBssInfo; DEBUGFUNC("secFsmRunEventEapolTxDone"); ASSERT(prStaRec); if (rTxDoneStatus != TX_RESULT_SUCCESS) { DBGLOG(RSN, INFO, "Error EAPoL fram fail to send!!\n"); /* ASSERT(0); */ return; } if (!IS_STA_IN_AIS(prStaRec)) { DBGLOG(RSN, INFO, "Counter Measure should occur at AIS network!!\n"); /* ASSERT(0); */ return; } prAisBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; ASSERT(prAisBssInfo); prSecInfo = &prStaRec->rSecInfo; eNextState = prSecInfo->eCurrentState; #if DBG DBGLOG(RSN, TRACE, "%pM Sec state %s\n", prStaRec->aucMacAddr, apucDebugSecState[prSecInfo->eCurrentState]); #else DBGLOG(RSN, TRACE, "%pM Sec state [%d]\n", prStaRec->aucMacAddr, prSecInfo->eCurrentState); #endif switch (prSecInfo->eCurrentState) { case SEC_STATE_SEND_EAPOL: if (prAisBssInfo->fgCheckEAPoLTxDone == FALSE) ASSERT(0); prAisBssInfo->fgCheckEAPoLTxDone = FALSE; /* cnmTimerStopTimer(prAdapter, &prAisBssInfo->rRsnaEAPoLReportTimeoutTimer); */ SEC_STATE_TRANSITION(prAdapter, prStaRec, SEND_EAPOL, SEND_DEAUTH); break; default: break; } if (prSecInfo->eCurrentState != eNextState) secFsmSteps(prAdapter, prStaRec, eNextState); return; } /* secFsmRunEventEapolTxDone */
/*----------------------------------------------------------------------------*/ VOID secFsmEventDeauthTxDone(IN P_ADAPTER_T prAdapter, IN P_MSDU_INFO_T prMsduInfo, IN ENUM_TX_RESULT_CODE_T rTxDoneStatus) { P_STA_RECORD_T prStaRec; P_SEC_INFO_T prSecInfo; ENUM_SEC_STATE_T eNextState; BOOLEAN fgIsTransition = (BOOLEAN) FALSE; DEBUGFUNC("secFsmRunEventDeauthTxDone"); ASSERT(prMsduInfo); prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); ASSERT(prStaRec); if (!prStaRec) return; if (!IS_STA_IN_AIS(prStaRec)) { DBGLOG(RSN, INFO, ("Counter Measure should occur at AIS network!!\n")); /* ASSERT(0); */ return; } prSecInfo = (P_SEC_INFO_T) &prStaRec->rSecInfo; #if DBG DBGLOG(RSN, TRACE, (MACSTR " Sec state %s\n", MAC2STR(prStaRec->aucMacAddr), apucDebugSecState[prSecInfo->eCurrentState])); #else DBGLOG(RSN, TRACE, (MACSTR " Sec state [%d]\n", MAC2STR(prStaRec->aucMacAddr), prSecInfo->eCurrentState)); #endif switch (prSecInfo->eCurrentState) { case SEC_STATE_SEND_DEAUTH: DBGLOG(RSN, TRACE, ("Set timer %d\n", COUNTER_MEASURE_TIMEOUT_INTERVAL_SEC)); SEC_STATE_TRANSITION(prAdapter, prStaRec, SEND_DEAUTH, COUNTERMEASURE); break; default: ASSERT(0); break; } return; } /* secFsmRunEventDeauthTxDone */
/*----------------------------------------------------------------------------*/ VOID secFsmEventStartCounterMeasure(IN P_ADAPTER_T prAdapter, IN P_STA_RECORD_T prSta) { P_SEC_INFO_T prSecInfo; ENUM_SEC_STATE_T eNextState; BOOLEAN fgIsTransition = (BOOLEAN) FALSE; DEBUGFUNC("secFsmRunEventStartCounterMeasure"); ASSERT(prSta); if (!IS_STA_IN_AIS(prSta)) { DBGLOG(RSN, INFO, ("Counter Measure should occur at AIS network!!\n")); /* ASSERT(0); */ return; } prSecInfo = &prSta->rSecInfo; eNextState = prSecInfo->eCurrentState; #if DBG DBGLOG(RSN, TRACE, (MACSTR " Sec state %s\n", MAC2STR(prSta->aucMacAddr), apucDebugSecState[prSecInfo->eCurrentState])); #else DBGLOG(RSN, TRACE, (MACSTR " Sec state [%d]\n", MAC2STR(prSta->aucMacAddr), prSecInfo->eCurrentState)); #endif prAdapter->rWifiVar.rAisSpecificBssInfo.u4RsnaLastMICFailTime = 0; switch (prSecInfo->eCurrentState) { case SEC_STATE_CHECK_OK: { prAdapter->rWifiVar.rAisSpecificBssInfo.fgCounterMeasure = TRUE; /* <Todo> dls port control */ SEC_STATE_TRANSITION(prAdapter, prSta, CHECK_OK, SEND_EAPOL); } break; default: break; } /* Call arbFsmSteps() when we are going to change ARB STATE */ if (prSecInfo->eCurrentState != eNextState) { secFsmSteps(prAdapter, prSta, eNextState); } return; } /* secFsmRunEventStartCounterMeasure */
/*----------------------------------------------------------------------------*/ VOID secFsmEventAbort(IN P_ADAPTER_T prAdapter, IN P_STA_RECORD_T prSta) { P_SEC_INFO_T prSecInfo; DBGLOG(RSN, TRACE, ("secFsmEventAbort for sta " MACSTR " network %d\n", MAC2STR(prSta->aucMacAddr), prSta->ucNetTypeIndex)); ASSERT(prSta); if (!prSta) return; if (!IS_STA_IN_AIS(prSta)) return; prSecInfo = (P_SEC_INFO_T) &prSta->rSecInfo; prSta->fgTransmitKeyExist = FALSE; secSetPortBlocked(prAdapter, prSta, TRUE); if (prSecInfo == NULL) return; if (IS_STA_IN_AIS(prSta)) { prAdapter->rWifiVar.rAisSpecificBssInfo.fgTransmitKeyExist = FALSE; if (prSecInfo->eCurrentState == SEC_STATE_SEND_EAPOL) { if (prAdapter->rWifiVar.rAisSpecificBssInfo.fgCheckEAPoLTxDone == FALSE) { DBGLOG(RSN, TRACE, ("EAPOL STATE not match the flag\n")); /* cnmTimerStopTimer(prAdapter, &prAdapter->rWifiVar. rAisSpecificBssInfo.rRsnaEAPoLReportTimeoutTimer); */ } } } prSecInfo->eCurrentState = SEC_STATE_INIT; }
/*----------------------------------------------------------------------------*/ VOID secFsmEventEndOfCounterMeasure(IN P_ADAPTER_T prAdapter, UINT_32 u4Parm) { P_STA_RECORD_T prSta; P_SEC_INFO_T prSecInfo; ENUM_SEC_STATE_T eNextState; BOOLEAN fgIsTransition = (BOOLEAN) FALSE; DEBUGFUNC("secFsmRunEventEndOfCounterMeasure"); prSta = (P_STA_RECORD_T) u4Parm; ASSERT(prSta); if (!IS_STA_IN_AIS(prSta)) { DBGLOG(RSN, INFO, ("Counter Measure should occur at AIS network!!\n")); /* ASSERT(0); */ return; } prSecInfo = &prSta->rSecInfo; eNextState = prSecInfo->eCurrentState; #if DBG DBGLOG(RSN, TRACE, (MACSTR " Sec state %s\n", MAC2STR(prSta->aucMacAddr), apucDebugSecState[prSecInfo->eCurrentState])); #else DBGLOG(RSN, TRACE, (MACSTR " Sec state [%d]\n", MAC2STR(prSta->aucMacAddr), prSecInfo->eCurrentState)); #endif switch (prSecInfo->eCurrentState) { case SEC_STATE_SEND_DEAUTH: { prAdapter->rWifiVar.rAisSpecificBssInfo.fgCounterMeasure = FALSE; SEC_STATE_TRANSITION(prAdapter, prSta, COUNTERMEASURE, INIT); } break; default: ASSERT(0); } /* Call arbFsmSteps() when we are going to change ARB STATE */ if (prSecInfo->eCurrentState != eNextState) { secFsmSteps(prAdapter, prSta, eNextState); } return; } /* end of secFsmRunEventEndOfCounterMeasure */
/*----------------------------------------------------------------------------*/ static inline VOID secFsmTrans_SEND_DEAUTH_to_COUNTERMEASURE(IN P_ADAPTER_T prAdapter, IN P_STA_RECORD_T prSta) { ASSERT(prAdapter); ASSERT(prSta); if (!IS_STA_IN_AIS(prSta)) { DBGLOG(RSN, INFO, "Counter Measure should occur at AIS network!!\n"); /* ASSERT(0); */ return; } /* Start the 60 sec timer */ cnmTimerStartTimer(prAdapter, &prAdapter->rWifiVar.rAisSpecificBssInfo.rRsnaBlockTrafficTimer, SEC_TO_MSEC(COUNTER_MEASURE_TIMEOUT_INTERVAL_SEC)); return; }
/*----------------------------------------------------------------------------*/ static inline VOID secFsmTrans_SEND_EAPOL_to_SEND_DEAUTH(IN P_ADAPTER_T prAdapter, IN P_STA_RECORD_T prSta) { if (!IS_STA_IN_AIS(prSta)) { DBGLOG(RSN, INFO, "Counter Measure should occur at AIS network!!\n"); /* ASSERT(0); */ return; } /* Compose deauth frame to AP, a call back function for tx done */ if (authSendDeauthFrame(prAdapter, prSta, (P_SW_RFB_T) NULL, REASON_CODE_MIC_FAILURE, (PFN_TX_DONE_HANDLER) secFsmEventDeauthTxDone) != WLAN_STATUS_SUCCESS) { ASSERT(FALSE); } }
/*----------------------------------------------------------------------------*/ VOID /* whsu:Todo: */ secFsmUnInit(IN P_ADAPTER_T prAdapter, IN P_STA_RECORD_T prSta) { P_SEC_INFO_T prSecInfo; ASSERT(prSta); prSecInfo = &prSta->rSecInfo; prSecInfo->fg2nd1xSend = FALSE; prSecInfo->fgKeyStored = FALSE; /* nicPrivacyRemoveWlanTable(prSta->ucWTEntry); */ if (IS_STA_IN_AIS(prSta)) { cnmTimerStopTimer(prAdapter, &prAdapter->rWifiVar.rAisSpecificBssInfo.rRsnaEAPoLReportTimeoutTimer); cnmTimerStopTimer(prAdapter, &prAdapter->rWifiVar.rAisSpecificBssInfo.rRsnaBlockTrafficTimer); } }
/*----------------------------------------------------------------------------*/ VOID secFsmInit(IN P_ADAPTER_T prAdapter, IN P_STA_RECORD_T prSta) { P_SEC_INFO_T prSecInfo; P_AIS_SPECIFIC_BSS_INFO_T prAisSpecBssInfo; ASSERT(prSta); prSecInfo = &prSta->rSecInfo; #if 1 /* MT6620 */ /* At MT5921, is ok, but at MT6620, firmware base ASIC, the firmware */ /* will lost these data, thus, driver have to keep the wep material and */ /* setting to firmware while awake from D3. */ #endif prSecInfo->eCurrentState = SEC_STATE_INIT; prSecInfo->fg2nd1xSend = FALSE; prSecInfo->fgKeyStored = FALSE; if (IS_STA_IN_AIS(prSta)) { prAisSpecBssInfo = &prAdapter->rWifiVar.rAisSpecificBssInfo; prAisSpecBssInfo->u4RsnaLastMICFailTime = 0; prAisSpecBssInfo->fgCheckEAPoLTxDone = FALSE; cnmTimerInitTimer(prAdapter, &prAdapter->rWifiVar.rAisSpecificBssInfo. rRsnaEAPoLReportTimeoutTimer, (PFN_MGMT_TIMEOUT_FUNC) secFsmEventEapolTxTimeout, (UINT_32) prSta); cnmTimerInitTimer(prAdapter, &prAdapter->rWifiVar.rAisSpecificBssInfo.rRsnaBlockTrafficTimer, (PFN_MGMT_TIMEOUT_FUNC) secFsmEventEndOfCounterMeasure, (UINT_32) prSta); } return; }
/*----------------------------------------------------------------------------*/ VOID secFsmEventStart(IN P_ADAPTER_T prAdapter, IN P_STA_RECORD_T prSta) { P_SEC_INFO_T prSecInfo; BOOLEAN fgIsTransition = (BOOLEAN) FALSE; ENUM_SEC_STATE_T eNextState; DBGLOG(RSN, TRACE, "secFsmRunEventStart\n"); ASSERT(prSta); if (!prSta) return; if (!IS_STA_IN_AIS(prSta)) return; DBGLOG(RSN, TRACE, "secFsmRunEventStart for sta %pM network %d\n", prSta->aucMacAddr, prSta->ucNetTypeIndex); prSecInfo = (P_SEC_INFO_T) &prSta->rSecInfo; eNextState = prSecInfo->eCurrentState; secSetPortBlocked(prAdapter, prSta, TRUE); /* prSta->fgTransmitKeyExist = FALSE; */ /* whsu:: nicPrivacySetStaDefaultWTIdx(prSta); */ #if 1 /* Since the 1x and key can set to firmware in order, always enter the check ok state */ SEC_STATE_TRANSITION(prAdapter, prSta, INIT, CHECK_OK); #else if (IS_STA_IN_AIS(prSta->eStaType)) { if (secRsnKeyHandshakeEnabled(prAdapter) == TRUE #if CFG_SUPPORT_WAPI || (prAdapter->rWifiVar.rConnSettings.fgWapiMode) #endif ) { prSta->fgTransmitKeyExist = FALSE; /* nicPrivacyInitialize(prSta->ucNetTypeIndex); */ SEC_STATE_TRANSITION(prAdapter, prSta, INIT, INITIATOR_PORT_BLOCKED); } else { SEC_STATE_TRANSITION(prAdapter, prSta, INIT, CHECK_OK); } } #if CFG_ENABLE_WIFI_DIRECT || CFG_ENABLE_BT_OVER_WIFI #if CFG_ENABLE_WIFI_DIRECT && CFG_ENABLE_BT_OVER_WIFI else if ((prSta->eStaType == STA_TYPE_BOW_CLIENT) || (prSta->eStaType == STA_TYPE_P2P_GC)) { #elif CFG_ENABLE_WIFI_DIRECT else if (prSta->eStaType == STA_TYPE_P2P_GC) { #elif CFG_ENABLE_BT_OVER_WIFI else if (prSta->eStaType == STA_TYPE_BOW_CLIENT) { #endif SEC_STATE_TRANSITION(prAdapter, prSta, INIT, RESPONDER_PORT_BLOCKED); } #endif else SEC_STATE_TRANSITION(prAdapter, prSta, INIT, INITIATOR_PORT_BLOCKED); #endif if (prSecInfo->eCurrentState != eNextState) secFsmSteps(prAdapter, prSta, eNextState); return; } /* secFsmRunEventStart */ /*----------------------------------------------------------------------------*/ /*! * \brief This function called by reset procedure to force the sec fsm enter * idle state * * \param[in] ucNetTypeIdx The Specific Network type index * \param[in] prSta Pointer to the Sta record * * \return none */ /*----------------------------------------------------------------------------*/ VOID secFsmEventAbort(IN P_ADAPTER_T prAdapter, IN P_STA_RECORD_T prSta) { P_SEC_INFO_T prSecInfo; DBGLOG(RSN, TRACE, "secFsmEventAbort for sta %pM network %d\n", prSta->aucMacAddr, prSta->ucNetTypeIndex); ASSERT(prSta); if (!prSta) return; if (!IS_STA_IN_AIS(prSta)) return; prSecInfo = (P_SEC_INFO_T) &prSta->rSecInfo; prSta->fgTransmitKeyExist = FALSE; secSetPortBlocked(prAdapter, prSta, TRUE); if (prSecInfo == NULL) return; if (IS_STA_IN_AIS(prSta)) { prAdapter->rWifiVar.rAisSpecificBssInfo.fgTransmitKeyExist = FALSE; if (prSecInfo->eCurrentState == SEC_STATE_SEND_EAPOL) { if (prAdapter->rWifiVar.rAisSpecificBssInfo.fgCheckEAPoLTxDone == FALSE) { DBGLOG(RSN, TRACE, "EAPOL STATE not match the flag\n"); /* cnmTimerStopTimer(prAdapter, &prAdapter->rWifiVar. * rAisSpecificBssInfo.rRsnaEAPoLReportTimeoutTimer); */ } } } prSecInfo->eCurrentState = SEC_STATE_INIT; } /*----------------------------------------------------------------------------*/ /*! * \brief This function will indicate an Event of "2nd EAPoL Tx is sending" to Sec FSM. * * \param[in] prSta Pointer to the Sta record * * \return - */ /*----------------------------------------------------------------------------*/ VOID secFsmEvent2ndEapolTx(IN P_ADAPTER_T prAdapter, IN P_STA_RECORD_T prSta) { P_SEC_INFO_T prSecInfo; ENUM_SEC_STATE_T eNextState; /* BOOLEAN fgIsTransition = (BOOLEAN)FALSE; */ DEBUGFUNC("secFsmRunEvent2ndEapolTx"); ASSERT(prSta); prSecInfo = &prSta->rSecInfo; eNextState = prSecInfo->eCurrentState; #if DBG DBGLOG(RSN, TRACE, "%pM Sec state %s\n", prSta->aucMacAddr, apucDebugSecState[prSecInfo->eCurrentState]); #else DBGLOG(RSN, TRACE, "%pM Sec state [%d]\n", prSta->aucMacAddr, prSecInfo->eCurrentState); #endif switch (prSecInfo->eCurrentState) { case SEC_STATE_INITIATOR_PORT_BLOCKED: case SEC_STATE_CHECK_OK: prSecInfo->fg2nd1xSend = TRUE; break; default: #if DBG DBGLOG(RSN, WARN, "Rcv 2nd EAPoL at %s\n", apucDebugSecState[prSecInfo->eCurrentState]); #else DBGLOG(RSN, WARN, "Rcv 2nd EAPoL at [%d]\n", prSecInfo->eCurrentState); #endif break; } if (prSecInfo->eCurrentState != eNextState) secFsmSteps(prAdapter, prSta, eNextState); return; } /* secFsmRunEvent2ndEapolTx */
/*----------------------------------------------------------------------------*/ VOID secFsmEventStart(IN P_ADAPTER_T prAdapter, IN P_STA_RECORD_T prSta) { P_SEC_INFO_T prSecInfo; BOOLEAN fgIsTransition = (BOOLEAN) FALSE; ENUM_SEC_STATE_T eNextState; DBGLOG(RSN, TRACE, ("secFsmRunEventStart\n")); ASSERT(prSta); if (!prSta) return; if (!IS_STA_IN_AIS(prSta)) return; DBGLOG(RSN, TRACE, ("secFsmRunEventStart for sta " MACSTR " bss %d\n", MAC2STR(prSta->aucMacAddr), prSta->ucBssIndex)); prSecInfo = (P_SEC_INFO_T) &prSta->rSecInfo; eNextState = prSecInfo->eCurrentState; secSetPortBlocked(prAdapter, prSta, TRUE); /* prSta->fgTransmitKeyExist = FALSE; */ /* whsu:: nicPrivacySetStaDefaultWTIdx(prSta); */ #if 1 /* Since the 1x and key can set to firmware in order, always enter the check ok state */ SEC_STATE_TRANSITION(prAdapter, prSta, INIT, CHECK_OK); #else if (IS_STA_IN_AIS(prSta->eStaType)) { if (secRsnKeyHandshakeEnabled(prAdapter) == TRUE #if CFG_SUPPORT_WAPI || (prAdapter->rWifiVar.rConnSettings.fgWapiMode) #endif ) { prSta->fgTransmitKeyExist = FALSE; /* nicPrivacyInitialize(prSta->ucNetTypeIndex); */ SEC_STATE_TRANSITION(prAdapter, prSta, INIT, INITIATOR_PORT_BLOCKED); } else { SEC_STATE_TRANSITION(prAdapter, prSta, INIT, CHECK_OK); } } #if CFG_ENABLE_WIFI_DIRECT || CFG_ENABLE_BT_OVER_WIFI #if CFG_ENABLE_WIFI_DIRECT && CFG_ENABLE_BT_OVER_WIFI else if ((prSta->eStaType == STA_TYPE_BOW_CLIENT) || (prSta->eStaType == STA_TYPE_P2P_GC)) #elif CFG_ENABLE_WIFI_DIRECT else if (prSta->eStaType == STA_TYPE_P2P_GC) #elif CFG_ENABLE_BT_OVER_WIFI else if (prSta->eStaType == STA_TYPE_BOW_CLIENT) #endif { SEC_STATE_TRANSITION(prAdapter, prSta, INIT, RESPONDER_PORT_BLOCKED); } #endif else { SEC_STATE_TRANSITION(prAdapter, prSta, INIT, INITIATOR_PORT_BLOCKED); } #endif if (prSecInfo->eCurrentState != eNextState) { secFsmSteps(prAdapter, prSta, eNextState); } return; } /* secFsmRunEventStart */