VOS_VOID NAS_ESM_ProcValidNwMsgResAllocRej ( VOS_UINT32 ulStateTblIndex, const EMM_ESM_INTRA_DATA_IND_STRU *pRcvMsg ) { NAS_ESM_STATE_INFO_STRU *pstStateAddr = VOS_NULL_PTR; VOS_UINT32 ulTmpStateTblIndex = NAS_ESM_NULL; /*打印进入该函数*/ NAS_ESM_NORM_LOG("NAS_ESM_ProcValidNwMsgResAllocRej is entered."); TLPS_PRINT2LAYER_INFO(NAS_ESM_ProcValidNwMsgResAllocRej_ENUM, LNAS_ENTRY); /*停止定时器*/ NAS_ESM_TimerStop(ulStateTblIndex, TI_NAS_ESM_T3480); pstStateAddr = NAS_ESM_GetStateTblAddr(ulStateTblIndex); if(ID_APP_ESM_PDP_SETUP_REQ == pstStateAddr->stAppMsgRecord.enAppMsgType ) { if( NAS_ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY == pRcvMsg->stEsmNwMsgIE.enEsmCau ) { /* 本地释放此承载的关联缺省承载和相关承载 */ NAS_ESM_DeactBearerAndInformApp(pstStateAddr->ulLinkedEpsbId); /*通知EMM当前承载状态信息,发送ID_EMM_ESM_BEARER_STATUS_REQ*/ NAS_ESM_SndEsmEmmBearerStatusReqMsg(EMM_ESM_BEARER_CNTXT_MOD_MUTUAL); /*清除和中止与ulEpsbId关联的流程信息*/ if(NAS_ESM_SUCCESS == NAS_ESM_QueryStateTblIndexByEpsbId(pstStateAddr->ulLinkedEpsbId, &ulTmpStateTblIndex)) { NAS_ESM_RelStateTblResource(ulTmpStateTblIndex); } } /*向APP发送ID_APP_ESM_BEARER_SETUP_CNF(失败)消息*/ NAS_ESM_SndEsmAppSdfSetupCnfFailMsg(ulStateTblIndex, \ NAS_ESM_GetAppErrorByEsmCause(pRcvMsg->stEsmNwMsgIE.enEsmCau)); } /*释放状态表资源*/ NAS_ESM_RelStateTblResource(ulStateTblIndex); }
/***************************************************************************** Function Name : NAS_ESM_ProcTimerMsgWaitAppCnfExp Description : 等待APP回复定时器超时处理函数 Input : VOS_VOID *pMsg Output : None Return : VOS_VOID History : 1.lihong00150010 2009-12-4 Draft Enact *****************************************************************************/ VOS_VOID NAS_ESM_ProcTimerMsgWaitAppCnfExp(const VOS_VOID * pMsg) { VOS_UINT32 ulStateTblIndex = NAS_ESM_NULL; /*打印进入该函数*/ NAS_ESM_NORM_LOG("NAS_ESM_ProcTimerMsgWaitAppCnfExp is entered."); /*获取消息中包含的状态表StateTblIndex*/ ulStateTblIndex = PS_GET_REL_TIMER_NAME(pMsg); if (NAS_ESM_L_MODE_STATUS_NORMAL != NAS_ESM_GetLModeStatus()) { NAS_ESM_WARN_LOG("NAS_ESM_ProcTimerMsgWaitAppCnfExp: L mode is already suspended!"); /*释放状态表资源*/ NAS_ESM_RelStateTblResource(ulStateTblIndex); return ; } /* App拒绝承载激活或承载修改的处理 */ NAS_ESM_AppPdpManageRspMsgRefuseProc(ulStateTblIndex); }
VOS_VOID NAS_ESM_Init(VOS_VOID) { VOS_UINT32 ulCnt = NAS_ESM_NULL; /*打印进入该函数*/ NAS_ESM_INFO_LOG("NAS_SM START INIT..."); /*初始化SM实体*/ NAS_ESM_MEM_SET((VOS_VOID*)NAS_ESM_Entity(),NAS_ESM_NULL,sizeof(NAS_ESM_ENTITY_STRU)); /*设置EMM的状态为未注册*/ NAS_ESM_SetEmmStatus(NAS_ESM_PS_REGISTER_STATUS_DETACHED); /*设置L MODE的状态为SUSPENDED*/ NAS_ESM_SetLModeStatus(NAS_ESM_L_MODE_STATUS_SUSPENDED); /*设置已激活的承载数目为零*/ NAS_ESM_SetCurMaxOpIdValue(NAS_ESM_MIN_OPID_VALUE); #ifdef PS_ITT_PC_TEST_NAS /*NAS ST场景下,由于现有用例在注册时使用了PTI值为2,所以PTI初始化为1,调用PTI分配函数,会从2开始使用*/ NAS_ESM_SetCurMaxPTIValue(NAS_ESM_PTI_MIN_VALUE); #else /*PTI初始化为0,注册时,调用PTI分配函数,会从1开始使用*/ /*lint -e778*/ NAS_ESM_SetCurMaxPTIValue(NAS_ESM_PTI_MIN_VALUE-1); /*lint +e778*/ #endif NAS_ESM_SetCurMaxGwAuthIdVaule(NAS_ESM_GWAUTHID_MIN_VALUE); /*初始化承载参数*/ NAS_ESM_BearerCntxtParaInit(); /*初始化承载管理方式*/ NAS_ESM_BearerManageInfoInit(NAS_ESM_GetBearerManageInfoAddr()); /*初始化状态表信息*/ for( ulCnt = 0; ulCnt < NAS_ESM_MAX_STATETBL_NUM; ulCnt++ ) { NAS_ESM_RelStateTblResource(ulCnt); } /*初始化承载信息*/ for( ulCnt = NAS_ESM_MIN_EPSB_ID; ulCnt <= NAS_ESM_MAX_EPSB_ID; ulCnt++ ) { NAS_ESM_InitEpsbCntxtInfo(ulCnt); NAS_ESM_MEM_SET(&(g_stEsmOmInfo[ulCnt - NAS_ESM_MIN_EPSB_ID]), NAS_ESM_NULL, sizeof(OM_ESM_STATE_INFO_STRU)); } /* 初始化ESM缓存区 */ NAS_COMM_InitBuff(NAS_COMM_BUFF_TYPE_ESM); /* 初始化注册承载相关内容 */ NAS_ESM_InitAttachBearerReestInfo(); /* ESM软调初始化 */ NAS_ESM_DebugInit(); /* 初始化延迟释放非紧急PDN连接定时器 */ NAS_ESM_Entity()->stDeferRelNonEmcTimerInfo.enPara = TI_NAS_ESM_REL_NON_EMC_BEARER; /* xiongxianghui00253310 modify for ftmerrlog begin */ #if (FEATURE_PTM == FEATURE_ON) NAS_ESM_FtmInfoInit(); NAS_ESM_ErrlogInfoInit(); #endif /* xiongxianghui00253310 modify for ftmerrlog end */ }
VOS_VOID NAS_ESM_ProcTimerMsgT3481Exp(const VOS_VOID * pMsg) { VOS_UINT32 ulStateTblIndex = NAS_ESM_NULL; VOS_UINT32 ulErrorCode = APP_ERR_TIME_OUT; VOS_UINT32 ulActCidNum = NAS_ESM_NULL; NAS_ESM_TIMER_STRU *pTimer3481 = VOS_NULL_PTR; NAS_ESM_STATE_INFO_STRU *pstStateAddr = VOS_NULL_PTR; /*打印进入该函数*/ NAS_ESM_NORM_LOG("NAS_ESM_ProcTimerMsgT3481Exp is entered."); /*获取消息中包含的状态表StateTblIndex*/ ulStateTblIndex = PS_GET_REL_TIMER_NAME(pMsg); pstStateAddr = NAS_ESM_GetStateTblAddr(ulStateTblIndex); if (NAS_ESM_L_MODE_STATUS_NORMAL != NAS_ESM_GetLModeStatus()) { NAS_ESM_WARN_LOG("NAS_ESM_ProcTimerMsgT3481Exp: L mode is already suspended!"); /*释放状态表资源*/ NAS_ESM_RelStateTblResource(ulStateTblIndex); return ; } /*根据消息对应的ulStateTblIndex,获取相关联的定时器*/ pTimer3481 = NAS_ESM_GetStateTblTimer(ulStateTblIndex); /*超时次数++*/ pTimer3481->ucExpireTimes++; /*如果当前定时器超时次数小于NAS_ESM_MAX_TIMER_EXPIRE_TIMES次*/ if(pTimer3481->ucExpireTimes < TI_NAS_ESM_T3481_TIMER_MAX_EXP_NUM) { /*调用函数:SM向MM发送消息:NAS_ESMCN_BEARER_RES_MOD_REQ*/ NAS_ESM_SndEsmEmmDataReqMsg(pstStateAddr->stNwMsgRecord.ulOpId, pstStateAddr->stNwMsgRecord.ucIsEmcPdnReq, pstStateAddr->stNwMsgRecord.ulMsgLength, pstStateAddr->stNwMsgRecord.aucMsgBuff); /*重新启动定时器*/ NAS_ESM_TimerStart(ulStateTblIndex,TI_NAS_ESM_T3481); /*上报空口消息*/ NAS_ESM_SndAirMsgReportInd(pstStateAddr->stNwMsgRecord.aucMsgBuff, pstStateAddr->stNwMsgRecord.ulMsgLength, NAS_ESM_AIR_MSG_DIR_ENUM_UP, ESM_BEARER_RESOUCE_MOD_REQ); return; } if(ID_APP_ESM_PDP_SETUP_REQ == NAS_ESM_GetStateTblAppMsgType(ulStateTblIndex) ) { /*调用函数:发送确认消息通知APP,本次承载资源分配过程失败*/ NAS_ESM_SndEsmAppSdfSetupCnfFailMsg(ulStateTblIndex, ulErrorCode); } else if(ID_APP_ESM_PDP_RELEASE_REQ == NAS_ESM_GetStateTblAppMsgType(ulStateTblIndex) ) { ulActCidNum = NAS_ESM_GetBearerLinkedCidNum(pstStateAddr->ulEpsbId); /* 如果只对应一个激活的Cid,说明App要释放所有的SDF */ if (ulActCidNum == NAS_ESM_BEARER_ACT_CID_NUM_ONE) { /* 本地释放此承载 */ NAS_ESM_DeactBearerAndInformApp(pstStateAddr->ulEpsbId); /*通知EMM当前承载状态信息,发送ID_EMM_ESM_BEARER_STATUS_REQ*/ NAS_ESM_SndEsmEmmBearerStatusReqMsg(EMM_ESM_BEARER_CNTXT_MOD_LOCAL); } else { NAS_ESM_SndEsmAppSdfModCnfFailMsg(ulStateTblIndex, ulErrorCode); } } else { NAS_ESM_SndEsmAppSdfModCnfFailMsg(ulStateTblIndex, ulErrorCode); } /*释放状态表资源*/ NAS_ESM_RelStateTblResource(ulStateTblIndex); }
VOS_VOID NAS_ESM_ProcTimerMsgT3480Exp ( const VOS_VOID * pMsg ) { VOS_UINT32 ulStateTblIndex = NAS_ESM_NULL; VOS_UINT32 ulErrorCode = APP_ERR_TIME_OUT; NAS_ESM_TIMER_STRU *pTimer3480 = VOS_NULL_PTR; NAS_ESM_STATE_INFO_STRU *pstStateAddr = VOS_NULL_PTR; /*打印进入该函数*/ NAS_ESM_NORM_LOG("NAS_ESM_ProcTimerMsgT3480Exp is entered."); /*获取消息中包含的状态表StateTblIndex*/ ulStateTblIndex = PS_GET_REL_TIMER_NAME(pMsg); pstStateAddr = NAS_ESM_GetStateTblAddr(ulStateTblIndex); if (NAS_ESM_L_MODE_STATUS_NORMAL != NAS_ESM_GetLModeStatus()) { NAS_ESM_WARN_LOG("NAS_ESM_ProcTimerMsgT3480Exp: L mode is already suspended!"); /*释放状态表资源*/ NAS_ESM_RelStateTblResource(ulStateTblIndex); return ; } /*根据消息对应的ulStateTblIndex,获取相关联的定时器*/ pTimer3480 = NAS_ESM_GetStateTblTimer(ulStateTblIndex); /*超时次数++*/ pTimer3480->ucExpireTimes++; /*如果当前定时器超时次数小于NAS_ESM_MAX_TIMER_EXPIRE_TIMES次*/ if(pTimer3480->ucExpireTimes < TI_NAS_ESM_T3480_TIMER_MAX_EXP_NUM) { /*调用函数:SM向MM发送消息:NAS_ESMCN_BEARER_RES_MOD_REQ*/ NAS_ESM_SndEsmEmmDataReqMsg(pstStateAddr->stNwMsgRecord.ulOpId, pstStateAddr->stNwMsgRecord.ucIsEmcPdnReq, pstStateAddr->stNwMsgRecord.ulMsgLength, pstStateAddr->stNwMsgRecord.aucMsgBuff); /*重新启动定时器*/ NAS_ESM_TimerStart(ulStateTblIndex,TI_NAS_ESM_T3480); /*上报空口消息*/ NAS_ESM_SndAirMsgReportInd(pstStateAddr->stNwMsgRecord.aucMsgBuff, pstStateAddr->stNwMsgRecord.ulMsgLength, NAS_ESM_AIR_MSG_DIR_ENUM_UP, ESM_BEARER_RESOUCE_ALLOC_REQ); return; } if(ID_APP_ESM_PDP_SETUP_REQ == NAS_ESM_GetStateTblAppMsgType(ulStateTblIndex) ) { /*调用函数:发送确认消息通知APP,本次承载资源分配过程失败*/ NAS_ESM_SndEsmAppSdfSetupCnfFailMsg(ulStateTblIndex, ulErrorCode); } /*释放状态表资源*/ NAS_ESM_RelStateTblResource(ulStateTblIndex); }
VOS_VOID NAS_ESM_ProcTimerMsgT3492Exp(const VOS_VOID * pMsg) { VOS_UINT32 ulStateTblIndex = NAS_ESM_NULL; NAS_ESM_TIMER_STRU *pTimer3492 = VOS_NULL_PTR; NAS_ESM_STATE_INFO_STRU *pstStateAddr = VOS_NULL_PTR; /*打印进入该函数*/ NAS_ESM_NORM_LOG("NAS_ESM_ProcTimerMsgT3492Exp is entered."); /*获取消息中包含的状态表StateTblIndex*/ ulStateTblIndex = PS_GET_REL_TIMER_NAME(pMsg); pstStateAddr = NAS_ESM_GetStateTblAddr(ulStateTblIndex); if (NAS_ESM_L_MODE_STATUS_NORMAL != NAS_ESM_GetLModeStatus()) { NAS_ESM_WARN_LOG("NAS_ESM_ProcTimerMsgT3492Exp: L mode is already suspended!"); /*释放状态表资源*/ NAS_ESM_RelStateTblResource(ulStateTblIndex); return ; } /*根据消息对应的ulStateTblIndex,获取相关联的定时器*/ pTimer3492 = NAS_ESM_GetStateTblTimer(ulStateTblIndex); /*超时次数++*/ pTimer3492->ucExpireTimes++; /*如果当前定时器超时次数小于NAS_ESM_MAX_TIMER_EXPIRE_TIMES次*/ if(pTimer3492->ucExpireTimes < TI_NAS_ESM_T3492_TIMER_MAX_EXP_NUM) { /*调用函数:SM向MM发送消息:NAS_ESMCN_PDN_DISCONNECT_REQ*/ NAS_ESM_SndEsmEmmDataReqMsg(pstStateAddr->stNwMsgRecord.ulOpId, pstStateAddr->stNwMsgRecord.ucIsEmcPdnReq, pstStateAddr->stNwMsgRecord.ulMsgLength, pstStateAddr->stNwMsgRecord.aucMsgBuff); /*重新启动定时器*/ NAS_ESM_TimerStart(ulStateTblIndex,TI_NAS_ESM_T3492); /*上报空口消息*/ NAS_ESM_SndAirMsgReportInd(pstStateAddr->stNwMsgRecord.aucMsgBuff, pstStateAddr->stNwMsgRecord.ulMsgLength, NAS_ESM_AIR_MSG_DIR_ENUM_UP, ESM_PDN_DISCONNECT_REQ); return; } else { NAS_ESM_WARN_LOG("NAS_ESM_DefltAttingBInactPPendMsgT3492Exp:WARNING:ExpireTimes exceed!"); /*本地释放缺省承载资源,向APP回复释放成功消息*/ NAS_ESM_DeactBearerAndInformApp(pstStateAddr->ulEpsbId); /*通知EMM当前承载状态信息,发送ID_EMM_ESM_BEARER_STATUS_REQ*/ NAS_ESM_SndEsmEmmBearerStatusReqMsg(EMM_ESM_BEARER_CNTXT_MOD_LOCAL); } /*释放状态表资源*/ NAS_ESM_RelStateTblResource(ulStateTblIndex); }
VOS_VOID NAS_ESM_ProcTimerMsgT3482Exp(const VOS_VOID * pMsg) { VOS_UINT32 ulStateTblIndex = NAS_ESM_NULL; NAS_ESM_TIMER_STRU *pTimer3482 = VOS_NULL_PTR; VOS_UINT32 ulErrorCode = APP_ERR_TIME_OUT; NAS_ESM_STATE_INFO_STRU *pstStateAddr = VOS_NULL_PTR; /*打印进入该函数*/ NAS_ESM_NORM_LOG("NAS_ESM_ProcTimerMsgT3482Exp is entered."); /*获取消息中包含的状态表StateTblIndex*/ ulStateTblIndex = PS_GET_REL_TIMER_NAME(pMsg); pstStateAddr = NAS_ESM_GetStateTblAddr(ulStateTblIndex); if (NAS_ESM_L_MODE_STATUS_NORMAL != NAS_ESM_GetLModeStatus()) { NAS_ESM_WARN_LOG("NAS_ESM_ProcTimerMsgT3482Exp: L mode is already suspended!"); /*释放状态表资源*/ NAS_ESM_RelStateTblResource(ulStateTblIndex); return ; } #if (FEATURE_PTM == FEATURE_ON) NAS_ESM_PdnConFailRecord(VOS_NULL_PTR, ESM_OM_ERRLOG_TIMEOUT_T3482); #endif /*根据消息对应的ulStateTblIndex,获取相关联的定时器T3482*/ pTimer3482 = NAS_ESM_GetStateTblTimer(ulStateTblIndex); /*超时次数++*/ pTimer3482->ucExpireTimes++; /*如果当前定时器超时次数小于NAS_ESM_MAX_TIMER_EXPIRE_TIMES次*/ if(pTimer3482->ucExpireTimes < TI_NAS_ESM_T3482_TIMER_MAX_EXP_NUM) { /*调用函数:SM向MM发送消息:NAS_ESMCN_MSG_TYPE_PDN_CONNECT_REQ*/ NAS_ESM_SndEsmEmmDataReqMsg(pstStateAddr->stNwMsgRecord.ulOpId, pstStateAddr->stNwMsgRecord.ucIsEmcPdnReq, pstStateAddr->stNwMsgRecord.ulMsgLength, pstStateAddr->stNwMsgRecord.aucMsgBuff); /*重新启动定时器*/ NAS_ESM_TimerStart(ulStateTblIndex,TI_NAS_ESM_T3482); /*上报空口消息*/ NAS_ESM_SndAirMsgReportInd(pstStateAddr->stNwMsgRecord.aucMsgBuff, pstStateAddr->stNwMsgRecord.ulMsgLength, NAS_ESM_AIR_MSG_DIR_ENUM_UP, ESM_PDN_CONNECT_REQ); return; } else if(ID_APP_ESM_NDISCONN_REQ == NAS_ESM_GetStateTblAppMsgType(ulStateTblIndex) ) { /*调用函数:发送确认消息通知APP,本次承载资源分配过程失败*/ NAS_ESM_LOG1("NAS_ESM_ProcTimerMsgT3482Exp:ERROR =", ulErrorCode); NAS_ESM_SndEsmAppNdisConnCnfFailMsg(ulStateTblIndex, ulErrorCode); } else { NAS_ESM_WARN_LOG("NAS_ESM_ProcTimerMsgT3482Exp:WARNING:ExpireTimes exceed!"); /*向APP回复消息*/ NAS_ESM_SndEsmAppSdfSetupCnfFailMsg(ulStateTblIndex, \ APP_ERR_TIME_OUT); } /*释放状态表资源*/ NAS_ESM_RelStateTblResource(ulStateTblIndex); }