/*----------------------------------------------------------------------------*/ 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 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 */
/*----------------------------------------------------------------------------*/ static inline VOID secFsmTrans_RESPONDER_PORT_BLOCKED_to_CHECK_OK(IN P_ADAPTER_T prAdapter, IN P_STA_RECORD_T prSta) { secSetPortBlocked(prAdapter, prSta, FALSE); 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 " 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 */
/*----------------------------------------------------------------------------*/ __KAL_INLINE__ VOID secFsmTrans_INITIATOR_PORT_BLOCKED_to_CHECK_OK(IN P_ADAPTER_T prAdapter, IN P_STA_RECORD_T prSta) { secSetPortBlocked(prAdapter, prSta, FALSE); return; }