VOS_UINT32 NAS_EMM_MsAuthInitSsWtCnAuthMsgT3420Exp( VOS_UINT32 ulMsgId, VOS_VOID *pMsgStru ) { NAS_EMM_SECU_LOG_INFO("NAS_EMM_MsAuthInitSsWtCnAuthMsgT3420Exp is entered."); (VOS_VOID)(ulMsgId); (VOS_VOID)(pMsgStru); /* 如果当前没有正在建立紧急承载且没有紧急承载,则通知RRC释放链路,被BAR类型 */ if ((VOS_TRUE != NAS_LMM_GetEmmInfoIsEmerPndEsting()) && (NAS_LMM_GetEmmInfoRegStatus() != NAS_LMM_REG_STATUS_EMC_REGED) && (NAS_LMM_GetEmmInfoRegStatus() != NAS_LMM_REG_STATUS_NORM_REGED_AND_EMC_BEAR)) { /*确定网侧不能通过本次鉴权*/ NAS_EMM_AuthCheckFail(); return NAS_LMM_MSG_HANDLED; } /* AUTH失败次数清零*/ NAS_EMM_GetAuthFailTimes() = 0; /* 状态出栈*/ NAS_EMM_FSM_PopState(); /* 通知ESM去激活所有非紧急承载 */ if ((EMM_MS_REG == NAS_EMM_CUR_MAIN_STAT) || (EMM_MS_TAU_INIT == NAS_EMM_CUR_MAIN_STAT) || (EMM_MS_SER_INIT == NAS_EMM_CUR_MAIN_STAT)) { NAS_EMM_SendEsmDeactNonEmcBearInd(); } return NAS_LMM_MSG_HANDLED; }
VOS_UINT32 NAS_EMM_AnyStateMsgGtReCmd(VOS_UINT32 ulMsgId, VOS_VOID *pMsgStru) { NAS_EMM_GUTI_REALLOCATION_CMD_STRU *pstGutiCmdMsg = NAS_EMM_NULL_PTR; NAS_EMM_GUTI_STRU *pstGuti; VOS_UINT32 ulRst; (VOS_VOID)ulMsgId; /*解析消息,获取网侧发来的GUTI*/ pstGutiCmdMsg = (NAS_EMM_GUTI_REALLOCATION_CMD_STRU *)pMsgStru; pstGuti = (NAS_EMM_GUTI_STRU *) &pstGutiCmdMsg->stGuti; /*更新全局变量GUTI*/ NAS_LMM_MEM_CPY_S( NAS_LMM_GetEmmInfoUeidGutiAddr(), sizeof(NAS_LMM_GUTI_STRU), pstGuti, sizeof(NAS_LMM_GUTI_STRU)); NAS_LMM_GetEmmInfoUeidAddr()->bitOpGuti = NAS_EMM_BIT_SLCT; /*如果更新了Tai List,存储最新Tai List */ if(VOS_TRUE == pstGutiCmdMsg->ucBitOpTaiList) { if(NAS_LMM_SUCC == NAS_EMM_TaiListSet(&pstGutiCmdMsg->stTaiList)) { NAS_EMM_GUTI_NORMAL_LOG("NAS_EMM_AnyStateMsgGtReCmd: TaiList update is success!"); TLPS_PRINT2LAYER_INFO(NAS_EMM_AnyStateMsgGtReCmd_ENUM,LNAS_SUCC); /*保存新的TAI List的同时更新ForbTA for Roaming和ForbTA for RPOS*/ NAS_EMMC_UpdateForbTaList(); } else { NAS_EMM_GUTI_ERROR_LOG("NAS_EMM_AnyStateMsgGtReCmd: TaiList update is fail!"); TLPS_PRINT2LAYER_ERROR(NAS_EMM_AnyStateMsgGtReCmd_ENUM,LNAS_FAIL); } } /* 判断没有放到函数NAS_LMM_WritePsLoc中来做,是由于紧急注册被拒或者尝试 次数达到5次时还是要删除参数 ,协议只规定是紧急注册成功后才不写卡或者 NV项 */ if ((NAS_LMM_REG_STATUS_EMC_REGING != NAS_LMM_GetEmmInfoRegStatus()) && (NAS_LMM_REG_STATUS_EMC_REGED != NAS_LMM_GetEmmInfoRegStatus())) { /*保存PS LOC信息*/ /*存储最新guti,last Ta,update state */ NAS_LMM_WritePsLoc(NAS_NV_ITEM_UPDATE); } /*发出内部消息MRRC_DATA_REQ,携带GUTI REALLOCAITON CMPL*/ ulRst = NAS_EMM_GutiMrrcDataReq(); if(NAS_EMM_OK != ulRst) { NAS_EMM_GUTI_ERROR_LOG("NAS_EMM_AnyStateMsgGtReCmd: NAS_EMM_GutiMrrcDataReq err!"); TLPS_PRINT2LAYER_ERROR(NAS_EMM_AnyStateMsgGtReCmd_ENUM,LNAS_ERROR); } return NAS_LMM_MSG_HANDLED; }
/***************************************************************************** Function Name : NAS_EMM_MsAuthInitSsWtCnAuthMsgCnDetachAcp Description : 在AuthInit等待CN消息时DETACH ACCPET消息 Input : ulMsgId,pMsgStru Output : None Return : VOS_UINT32 History : 1.lihong00150010 2012-10-19 Draft Enact *****************************************************************************/ VOS_UINT32 NAS_EMM_MsAuthInitSsWtCnAuthMsgCnDetachAcp ( VOS_UINT32 ulMsgId, VOS_VOID *pMsgStru ) { VOS_UINT32 ulStaAtStackTop = NAS_EMM_NULL; VOS_UINT32 ulCurEmmStat = NAS_EMM_NULL; NAS_EMM_SECU_LOG_INFO("NAS_EMM_MsAuthInitSsWtCnAuthMsgCnDetachAcp entered."); if ( NAS_EMM_NULL_PTR == pMsgStru) { NAS_EMM_SECU_LOG_ERR("NAS_EMM_MsAuthInitSsWtCnAuthMsgCnDetachAcp:input ptr null!"); return NAS_LMM_ERR_CODE_PTR_NULL; } /* 栈顶的状态如果不为TAU_INIT态,则丢弃 */ ulStaAtStackTop = NAS_LMM_FSM_GetStaAtStackTop(NAS_LMM_PARALLEL_FSM_EMM); if ((ulStaAtStackTop != NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_DEREG_INIT,EMM_SS_DETACH_WAIT_CN_DETACH_CNF)) && (ulStaAtStackTop != NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_REG,EMM_SS_REG_IMSI_DETACH_WATI_CN_DETACH_CNF))) { NAS_EMM_SECU_LOG_ERR("NAS_EMM_MsAuthInitSsWtCnAuthMsgCnDetachAcp:not dereg_init+wait_cn_detach_cnf and not reg+wait_imsi_detach_cnf state!"); return NAS_LMM_MSG_DISCARD; } /* 如果当前没有紧急承载,则丢弃 */ if ((NAS_LMM_GetEmmInfoRegStatus() != NAS_LMM_REG_STATUS_EMC_REGED) && (NAS_LMM_GetEmmInfoRegStatus() != NAS_LMM_REG_STATUS_NORM_REGED_AND_EMC_BEAR)) { NAS_EMM_SECU_LOG_ERR("NAS_EMM_MsAuthInitSsWtCnAuthMsgCnDetachAcp:no emergency bearer"); return NAS_LMM_MSG_DISCARD; } /* 停T3420,T3418*/ NAS_LMM_StopStateTimer( TI_NAS_EMM_T3418); NAS_LMM_StopStateTimer( TI_NAS_EMM_T3420); /* AUTH失败次数清零*/ NAS_EMM_GetAuthFailTimes() = 0; /* 状态出栈*/ NAS_EMM_FSM_PopState(); ulCurEmmStat = NAS_LMM_PUB_COMP_EMMSTATE( NAS_EMM_CUR_MAIN_STAT, NAS_EMM_CUR_SUB_STAT); if (ulCurEmmStat == NAS_LMM_PUB_COMP_EMMSTATE( EMM_MS_DEREG_INIT, EMM_SS_DETACH_WAIT_CN_DETACH_CNF)) { return NAS_EMM_MsDrgInitSsWtCnDetCnfMsgCnDetachAcp(ulMsgId, pMsgStru); } else { return NAS_EMM_MsRegImsiDetachWtCnDetCnfMsgCnDetachAcp(ulMsgId, pMsgStru); } }
/***************************************************************************** Function Name : NAS_EMM_MsAuthInitSsWtCnAuthMsgRabmDrbSetupInd Description : 在AuthInit等待CN消息时处理DRB建立消息 Input : ulMsgId,pMsgStru Output : None Return : VOS_UINT32 History : 1.lihong00150010 2012-10-19 Draft Enact *****************************************************************************/ VOS_UINT32 NAS_EMM_MsAuthInitSsWtCnAuthMsgRabmDrbSetupInd ( VOS_UINT32 ulMsgId, VOS_VOID *pMsgStru ) { VOS_UINT32 ulStaAtStackTop = NAS_EMM_NULL; NAS_EMM_SECU_LOG_INFO("NAS_EMM_MsAuthInitSsWtCnAuthMsgRabmDrbSetupInd entered."); if ( NAS_EMM_NULL_PTR == pMsgStru) { NAS_EMM_SECU_LOG_ERR("NAS_EMM_MsAuthInitSsWtCnAuthMsgRabmDrbSetupInd:input ptr null!"); return NAS_LMM_ERR_CODE_PTR_NULL; } (VOS_VOID)ulMsgId; /* 栈顶的状态如果不为SERVICE_INIT态,则丢弃 */ ulStaAtStackTop = NAS_LMM_FSM_GetStaAtStackTop(NAS_LMM_PARALLEL_FSM_EMM); if (ulStaAtStackTop != NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_SER_INIT,EMM_SS_SER_WAIT_CN_SER_CNF)) { NAS_EMM_SECU_LOG_ERR("NAS_EMM_MsAuthInitSsWtCnAuthMsgRabmDrbSetupInd:not service_init+wait_cn_ser_cnf state!"); return NAS_LMM_MSG_DISCARD; } /* 如果当前没有正在建立紧急承载且没有紧急承载,则丢弃 */ if ((VOS_TRUE != NAS_LMM_GetEmmInfoIsEmerPndEsting()) && (NAS_LMM_GetEmmInfoRegStatus() != NAS_LMM_REG_STATUS_EMC_REGED) && (NAS_LMM_GetEmmInfoRegStatus() != NAS_LMM_REG_STATUS_NORM_REGED_AND_EMC_BEAR)) { NAS_EMM_SECU_LOG_ERR("NAS_EMM_MsAuthInitSsWtCnAuthMsgRabmDrbSetupInd:no emergency bearer and not esting emergency bearer"); return NAS_LMM_MSG_DISCARD; } /* 停T3420,T3418*/ NAS_LMM_StopStateTimer( TI_NAS_EMM_T3418); NAS_LMM_StopStateTimer( TI_NAS_EMM_T3420); /* AUTH失败次数清零*/ NAS_EMM_GetAuthFailTimes() = 0; /* 状态出栈*/ NAS_EMM_FSM_PopState(); NAS_EMM_SER_RcvRabmDrbSetupInd(pMsgStru); return NAS_LMM_MSG_HANDLED; }
/***************************************************************************** Function Name : NAS_EMM_MsAuthInitSsWtCnAuthMsgTauAccept Description : 在AuthInit等待CN消息时TAU ACCPET消息 Input : ulMsgId,pMsgStru Output : None Return : VOS_UINT32 History : 1.lihong00150010 2012-10-19 Draft Enact *****************************************************************************/ VOS_UINT32 NAS_EMM_MsAuthInitSsWtCnAuthMsgTauAccept ( VOS_UINT32 ulMsgId, VOS_VOID *pMsgStru ) { VOS_UINT32 ulStaAtStackTop = NAS_EMM_NULL; NAS_EMM_SECU_LOG_INFO("NAS_EMM_MsAuthInitSsWtCnAuthMsgTauAccept entered."); if ( NAS_EMM_NULL_PTR == pMsgStru) { NAS_EMM_SECU_LOG_ERR("NAS_EMM_MsAuthInitSsWtCnAuthMsgTauAccept:input ptr null!"); return NAS_LMM_ERR_CODE_PTR_NULL; } /* 栈顶的状态如果不为TAU_INIT态,则丢弃 */ ulStaAtStackTop = NAS_LMM_FSM_GetStaAtStackTop(NAS_LMM_PARALLEL_FSM_EMM); if (ulStaAtStackTop != NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_TAU_INIT,EMM_SS_TAU_WAIT_CN_TAU_CNF)) { NAS_EMM_SECU_LOG_ERR("NAS_EMM_MsAuthInitSsWtCnAuthMsgTauAccept:not tau_init+wait_cn_tau_cnf state!"); return NAS_LMM_MSG_DISCARD; } /* 如果当前没有正在建立紧急承载且没有紧急承载,则丢弃 */ if ((VOS_TRUE != NAS_LMM_GetEmmInfoIsEmerPndEsting()) && (NAS_LMM_GetEmmInfoRegStatus() != NAS_LMM_REG_STATUS_EMC_REGED) && (NAS_LMM_GetEmmInfoRegStatus() != NAS_LMM_REG_STATUS_NORM_REGED_AND_EMC_BEAR)) { NAS_EMM_SECU_LOG_ERR("NAS_EMM_MsAuthInitSsWtCnAuthMsgTauAccept:no emergency bearer and not esting emergency bearer"); return NAS_LMM_MSG_DISCARD; } /* 停T3420,T3418*/ NAS_LMM_StopStateTimer( TI_NAS_EMM_T3418); NAS_LMM_StopStateTimer( TI_NAS_EMM_T3420); /* AUTH失败次数清零*/ NAS_EMM_GetAuthFailTimes() = 0; /* 状态出栈*/ NAS_EMM_FSM_PopState(); return NAS_EMM_MsTauInitSsWaitCNCnfMsgTAUAcp(ulMsgId, pMsgStru); }
VOS_UINT32 NAS_EMM_PreProcMsgT3412Exp(MsgBlock * pMsg ) { /*VOS_UINT32 ulCurEmmStat = NAS_EMM_NULL;*/ (void)pMsg; NAS_LMM_PUBM_LOG_INFO("NAS_EMM_PreProcMsgT3412Exp enter!"); /*通知GU模t3412超时*/ NAS_EMM_SendTimerStateNotify(TI_NAS_EMM_PTL_T3412, LMM_MMC_TIMER_EXP); /* ulCurEmmStat = NAS_LMM_PUB_COMP_EMMSTATE( NAS_EMM_CUR_MAIN_STAT, NAS_EMM_CUR_SUB_STAT); */ /*当前的状态是NAS_EMM_CONN_ESTING,则说明正在建链过程中收到了周期性TAU超时 设置超时标记,该标记该如何处理呢?两种情况: 1. 在TAU或者service流程中,建链成功,TAU, SERVCIE成功会清该标示,不再发起周期TAU 2. 在TAU或者service流程中,如果建链失败,则转到相应的状态之后,等待RRC重新驻留, 上报系统消息之后,发起TAU之前会判断该标识,确定是否要发起周期TAU */ if(NAS_EMM_CONN_ESTING == NAS_EMM_GetConnState()) { /*设置周期TAU定时器标示*/ NAS_LMM_SetEmmInfoT3412ExpCtrl(NAS_EMM_T3412_EXP_YES_OTHER_STATE); return NAS_LMM_MSG_HANDLED; } /* 如果注册状态不为紧急注册,则需要进入状态机进行处理 */ if (NAS_LMM_REG_STATUS_EMC_REGED != NAS_LMM_GetEmmInfoRegStatus()) { return NAS_LMM_MSG_DISCARD; } /* 如果是紧急注册,本地DETACH */ NAS_EMM_EsmSendStatResult( EMM_ESM_ATTACH_STATUS_DETACHED); NAS_EMM_AdStateConvert( EMM_MS_DEREG, EMM_SS_DEREG_NORMAL_SERVICE, TI_NAS_EMM_STATE_NO_TIMER); /* 本地DETACH释放资源:动态内存、赋初值 */ NAS_LMM_DeregReleaseResource(); /*向MMC发送本地LMM_MMC_DETACH_IND消息*/ NAS_EMM_MmcSendDetIndLocal( MMC_LMM_L_LOCAL_DETACH_OTHERS); #if (FEATURE_PTM == FEATURE_ON) NAS_EMM_LocalDetachErrRecord(EMM_ERR_LOG_LOCAL_DETACH_TYPE_OTHER); #endif return NAS_LMM_MSG_HANDLED; }
/***************************************************************************** Function Name : NAS_EMM_MsAuthInitSsWtCnAuthMsgAttachAccept Description : 在AuthInit等待CN消息时ATTACH ACCPET消息 Input : ulMsgId,pMsgStru Output : None Return : VOS_UINT32 History : 1.lihong00150010 2012-10-19 Draft Enact *****************************************************************************/ VOS_UINT32 NAS_EMM_MsAuthInitSsWtCnAuthMsgAttachAccept ( VOS_UINT32 ulMsgId, VOS_VOID *pMsgStru ) { VOS_UINT32 ulStaAtStackTop = NAS_EMM_NULL; NAS_EMM_SECU_LOG_INFO("NAS_EMM_MsAuthInitSsWtCnAuthMsgAttachAccept entered."); if ( NAS_EMM_NULL_PTR == pMsgStru) { NAS_EMM_SECU_LOG_ERR("NAS_EMM_MsAuthInitSsWtCnAuthMsgAttachAccept:input ptr null!"); return NAS_LMM_ERR_CODE_PTR_NULL; } /* 栈顶的状态如果不为REG_INIT态,则丢弃 */ ulStaAtStackTop = NAS_LMM_FSM_GetStaAtStackTop(NAS_LMM_PARALLEL_FSM_EMM); if (ulStaAtStackTop != NAS_LMM_PUB_COMP_EMMSTATE(EMM_MS_REG_INIT,EMM_SS_ATTACH_WAIT_CN_ATTACH_CNF)) { NAS_EMM_SECU_LOG_ERR("NAS_EMM_MsAuthInitSsWtCnAuthMsgAttachAccept:not reg_init+wait_cn_attach_cnf state!"); return NAS_LMM_MSG_DISCARD; } /* 如果当前不是紧急注册过程中,则丢弃 */ if ((VOS_TRUE != NAS_LMM_GetEmmInfoIsEmerPndEsting()) && (NAS_LMM_GetEmmInfoRegStatus() != NAS_LMM_REG_STATUS_EMC_REGING)) { NAS_EMM_SECU_LOG_ERR("NAS_EMM_MsAuthInitSsWtCnAuthMsgAttachAccept:not emergency attach"); return NAS_LMM_MSG_DISCARD; } /* 停T3420,T3418*/ NAS_LMM_StopStateTimer( TI_NAS_EMM_T3418); NAS_LMM_StopStateTimer( TI_NAS_EMM_T3420); /* AUTH失败次数清零*/ NAS_EMM_GetAuthFailTimes() = 0; /* 状态出栈*/ NAS_EMM_FSM_PopState(); return NAS_EMM_MsRegInitSsWtCnAttCnfMsgCnAttachAcp(ulMsgId, pMsgStru); }
VOS_UINT32 NAS_EMM_MsRegInitSsWtCnAttCnfMsgCnAttachAcp(VOS_UINT32 ulMsgId, VOS_VOID *pMsgStru) { NAS_EMM_CN_ATTACH_ACP_STRU *pRcvEmmMsg; NAS_LMM_NETWORK_INFO_STRU *pMmNetInfo = VOS_NULL_PTR; #if (VOS_OS_VER != VOS_WIN32) static VOS_UINT32 s_ulAttachAcpCnt = 1; #endif (VOS_VOID)ulMsgId; pRcvEmmMsg = (NAS_EMM_CN_ATTACH_ACP_STRU *)pMsgStru; /*打印进入该函数*/ NAS_EMM_ATTACH_LOG_NORM("NAS_EMM_MsRegInitSsWtCnAttCnfMsgCnAttachAcp is entered"); /*检查状态是否匹配,若不匹配,退出*/ if (NAS_EMM_AD_CHK_STAT_INVALID(EMM_MS_REG_INIT,EMM_SS_ATTACH_WAIT_CN_ATTACH_CNF)) { /*打印出错信息*/ NAS_EMM_ATTACH_LOG_WARN("NAS_EMM_MsRegInitSsWtCnAttCnfMsgCnAttachAcp: STATE ERR!"); return NAS_LMM_MSG_DISCARD; } /* 如果ATTACH ACP消息内容不合法,不处理消息,直接丢弃*/ if (NAS_EMM_PARA_INVALID == NAS_EMM_CnAttachAcpMsgChk(pRcvEmmMsg)) { NAS_EMM_ATTACH_LOG_ERR("NAS_EMM_MsRegInitSsWtCnAttCnfMsgCnAttachAcp: NAS_EMM_CN_ATTACH_ACC_STRU para err!"); return NAS_LMM_ERR_CODE_PARA_INVALID; } /*停止定时器T3410*/ NAS_LMM_StopStateTimer( TI_NAS_EMM_T3410); /* 存储ATTACH ACCPET中携带的信元 */ NAS_EMM_SaveAttachAcpIe(pMsgStru); /*清除ATTACH ATTEMPTING COUNTER和TRACKING AREA UPDATING ATTEMPT计数器*/ /*NAS_EMM_GLO_AD_GetAttAtmpCnt() = 0;*/ NAS_EMM_TAU_SaveEmmTAUAttemptCnt(NAS_EMM_TAU_ATTEMPT_CNT_ZERO); /*注册成功后,注册前的TAU/SERVICE/DETACH模块记录的历史信息不应该影响后续流程 清除TAU/service/detach资源 */ NAS_EMM_TAU_ClearResouce(); NAS_EMM_SER_ClearResource(); NAS_EMM_Detach_ClearResourse(); /*联合注册仅EPS ONLY成功*/ if ((MMC_LMM_ATT_TYPE_COMBINED_EPS_IMSI == NAS_EMM_GLO_GetCnAttReqType()) && (EMM_ATTACH_RST_PS == pRcvEmmMsg->ucAttachRst)) { NAS_EMM_ProcEpsOnlySucc(pMsgStru); } else { /*设置EPS UPDATE STAUS为EU1*/ NAS_LMM_GetMmAuxFsmAddr()->ucEmmUpStat = EMM_US_UPDATED_EU1; /*启动定时器TI_NAS_EMM_WAIT_ESM_BEARER_CNF*/ NAS_LMM_StartStateTimer( TI_NAS_EMM_WAIT_ESM_BEARER_CNF); /*修改状态:进入主状态REG_INIT子状态ATTACH_WAIT_ESM_BEARER_CNF*/ NAS_EMM_AdStateConvert( EMM_MS_REG_INIT, EMM_SS_ATTACH_WAIT_ESM_BEARER_CNF, TI_NAS_EMM_WAIT_ESM_BEARER_CNF); } /* lihong00150010 emergency tau&service begin */ /* 参照标杆做法,在收到ATTACH ACCEPT时就更新GUTI, LAST VISIT TAI,EU值, 并写卡或者NV */ pMmNetInfo = NAS_LMM_GetEmmInfoNetInfoAddr(); NAS_EMM_SetLVRTai( &pMmNetInfo->stPresentNetId); /* 判断没有放到函数NAS_LMM_WritePsLoc中来做,是由于紧急注册被拒或者尝试次数 达到5次时还是要删除参数 ,协议只规定是紧急注册成功后才不写卡或者NV项 */ if (NAS_LMM_REG_STATUS_EMC_REGING != NAS_LMM_GetEmmInfoRegStatus()) { /*保存PS LOC信息*/ NAS_LMM_WritePsLoc(NAS_NV_ITEM_UPDATE); } /* lihong00150010 emergency tau&service end */ /* 清除接入技术变化标识,在这里清除不考虑ATTACH失败的原因值 因为要么必然转入了DEREG态,要么MME已经查询完UE无线能力*/ NAS_EMM_ClearUeRadioAccCapChgFlag(); #if (VOS_OS_VER != VOS_WIN32) if(1 == s_ulAttachAcpCnt) { (VOS_VOID)ddmPhaseScoreBoot("UE attach success",__LINE__); s_ulAttachAcpCnt++; } #endif return NAS_LMM_MSG_HANDLED; }
VOS_VOID NAS_EMM_TAU_TAUReqRejectCasue15() { NAS_MM_TA_STRU stCurrentTa; NAS_MM_TA_LIST_STRU *pstTaiList; /* 打印进入该函数, INFO_LEVEL */ NAS_EMM_TAU_LOG_INFO( "Nas_Emm_Tau_TAUReqRejectCasue15 is entered."); NAS_LMM_SetEmmInfoRegDomain(NAS_LMM_REG_DOMAIN_PS); /*设置EU3 ROAMING NOT ALLOWED*/ NAS_LMM_GetMmAuxFsmAddr()->ucEmmUpStat = EMM_US_ROAMING_NOT_ALLOWED_EU3; /* lihong00150010 emergency tau&service begin */ if (NAS_LMM_REG_STATUS_EMC_REGED != NAS_LMM_GetEmmInfoRegStatus()) { /*保存PS LOC信息*/ NAS_LMM_WritePsLoc(NAS_NV_ITEM_UPDATE); } /* lihong00150010 emergency tau&service end */ /*重置TAU计数器*/ NAS_EMM_TAU_SaveEmmTAUAttemptCnt(NAS_EMM_TAU_ATTEMPT_CNT_ZERO); /*Remove current TA from TAI List*/ NAS_EMM_GetCurrentTa(&stCurrentTa); pstTaiList = NAS_LMM_GetEmmInfoNetInfoTaiListAddr(); NAS_LMM_DeleteTaFromTaList(&stCurrentTa, pstTaiList, NAS_MM_MAX_TA_NUM); if (NAS_EMMC_USER_SPEC_PLMN_YES == NAS_EMMC_GetUserSpecPlmnFlag()) { NAS_EMM_AddForbTa(&stCurrentTa,NAS_LMM_GetEmmInfoNetInfoForbTaForRej15Addr()); } else { /*store the current TAI in the list of "forbidden tracking areas for roaming"*/ NAS_EMM_AddForbTa(&stCurrentTa,NAS_LMM_GetEmmInfoNetInfoForbTaForRoamAddr()); NAS_EMMC_SendRrcCellSelectionReq(LRRC_LNAS_FORBTA_CHANGE); } /* lihong00150010 emergency tau&service begin */ if (NAS_EMM_TAU_START_CAUSE_ESM_EMC_PDN_REQ == NAS_EMM_TAU_GetEmmTAUStartCause()) { NAS_EMM_TAU_LOG_INFO("NAS_EMM_TAU_TAUReqRejectCasue15:CAUSE_ESM_EMC_PDN_REQ"); NAS_EMM_EmcPndReqTauAbnormalCommProc( NAS_EMM_MmcSendTauActionResultIndRej, (VOS_VOID*)NAS_EMM_NULL_PTR, EMM_SS_DEREG_LIMITED_SERVICE); } else { /*发送EMM_ESM_STATUS_IND(去注册)*/ NAS_EMM_TAU_SendEsmStatusInd(EMM_ESM_ATTACH_STATUS_ATTACHED); /*转换EMM状态机MS_REG+SS_REG_LIMITED_SERVICE*/ NAS_EMM_TAUSER_FSMTranState(EMM_MS_REG, EMM_SS_REG_LIMITED_SERVICE, TI_NAS_EMM_STATE_NO_TIMER); /****检查冲突标志并做相应的处理********************************************/ /* 上报TAU结果在冲突中处理 */ NAS_EMM_TAU_RelCause1315CollisionProc(NAS_EMM_MmcSendTauActionResultIndRej, (VOS_VOID*)NAS_EMM_NULL_PTR); } /* lihong00150010 emergency tau&service end */ NAS_EMM_WaitNetworkRelInd(); return; }
VOS_VOID NAS_EMM_TAU_TAUReqRejectCasue15() { NAS_MM_TA_STRU stCurrentTa; NAS_MM_TA_LIST_STRU *pstTaiList; MMC_LMM_LTE_NO_SUBSCRIBE_PLMN_LIST_STRU stLteNoSubsPlmnList; /* 打印进入该函数, INFO_LEVEL */ NAS_EMM_TAU_LOG_INFO( "Nas_Emm_Tau_TAUReqRejectCasue15 is entered."); NAS_LMM_SetEmmInfoRegDomain(NAS_LMM_REG_DOMAIN_PS); /*设置EU3 ROAMING NOT ALLOWED*/ NAS_LMM_GetMmAuxFsmAddr()->ucEmmUpStat = EMM_US_ROAMING_NOT_ALLOWED_EU3; /* lihong00150010 emergency tau&service begin */ if (NAS_LMM_REG_STATUS_EMC_REGED != NAS_LMM_GetEmmInfoRegStatus()) { /*保存PS LOC信息*/ NAS_LMM_WritePsLoc(NAS_NV_ITEM_UPDATE); } /* lihong00150010 emergency tau&service end */ /*重置TAU计数器*/ NAS_EMM_TAU_SaveEmmTAUAttemptCnt(NAS_EMM_TAU_ATTEMPT_CNT_ZERO); /*被15拒绝,当前PLMN只有一个*/ stLteNoSubsPlmnList.ulPlmnNum = 1; /*拷贝当前PLMN*/ NAS_LMM_MEM_CPY(&(stLteNoSubsPlmnList.astPlmnId[0]), NAS_LMM_GetEmmInfoPresentPlmnAddr(), sizeof(MMC_LMM_PLMN_ID_STRU)); if((NAS_EMM_BIT_SLCT == NAS_EMM_TAU_GetEmmTauCnEmmExtRejCauseOp()) &&(NAS_EMM_EUTRAN_NOT_ALLOWED == NAS_EMM_TAU_GetEmmTauCnEmmExtRejCause())) { /*被15原因值拒绝而且当前有扩展原因值,指示USIM未在LTE开户,走正常的LTE未开户流程*/ NAS_EMM_SetLteNoSubscribeExtCauseFlag(NAS_EMM_EUTRAN_NOT_ALLOWED); NAS_LMM_LteNoSubscribeWithExtCauseHandle(&stLteNoSubsPlmnList); } else { /*被15原因值拒绝但是没有带扩展原因值,走LTE未开户定制流程*/ NAS_LMM_LteNoSubscribeWithOutExtCauseHandle(&stLteNoSubsPlmnList); } /*Remove current TA from TAI List*/ NAS_EMM_GetCurrentTa(&stCurrentTa); pstTaiList = NAS_LMM_GetEmmInfoNetInfoTaiListAddr(); NAS_LMM_DeleteTaFromTaList(&stCurrentTa, pstTaiList, NAS_MM_MAX_TA_NUM); if (NAS_EMMC_USER_SPEC_PLMN_YES == NAS_EMMC_GetUserSpecPlmnFlag()) { NAS_EMM_AddForbTa(&stCurrentTa,NAS_LMM_GetEmmInfoNetInfoForbTaForRej15Addr()); } else { /*store the current TAI in the list of "forbidden tracking areas for roaming"*/ NAS_EMM_AddForbTa(&stCurrentTa,NAS_LMM_GetEmmInfoNetInfoForbTaForRoamAddr()); NAS_EMMC_SendRrcCellSelectionReq(LRRC_LNAS_FORBTA_CHANGE); } /* lihong00150010 emergency tau&service begin */ if (NAS_EMM_TAU_START_CAUSE_ESM_EMC_PDN_REQ == NAS_EMM_TAU_GetEmmTAUStartCause()) { NAS_EMM_TAU_LOG_INFO("NAS_EMM_TAU_TAUReqRejectCasue15:CAUSE_ESM_EMC_PDN_REQ"); NAS_EMM_EmcPndReqTauAbnormalCommProc( NAS_EMM_MmcSendTauActionResultIndRej, (VOS_VOID*)NAS_EMM_NULL_PTR, EMM_SS_DEREG_LIMITED_SERVICE); } else { /*发送EMM_ESM_STATUS_IND(去注册)*/ NAS_EMM_TAU_SendEsmStatusInd(EMM_ESM_ATTACH_STATUS_ATTACHED); /*转换EMM状态机MS_REG+SS_REG_LIMITED_SERVICE*/ NAS_EMM_TAUSER_FSMTranState(EMM_MS_REG, EMM_SS_REG_LIMITED_SERVICE, TI_NAS_EMM_STATE_NO_TIMER); /****检查冲突标志并做相应的处理********************************************/ /* 上报TAU结果在冲突中处理 */ NAS_EMM_TAU_RelCause1315CollisionProc(NAS_EMM_MmcSendTauActionResultIndRej, (VOS_VOID*)NAS_EMM_NULL_PTR); } /* lihong00150010 emergency tau&service end */ NAS_EMM_WaitNetworkRelInd(); return; }