VOS_VOID NAS_EMM_TAU_TAUReqRejectOtherCause ( const NAS_EMM_CN_CAUSE_ENUM_UINT8 ucTAUrejcause ) { /* 打印进入该函数, INFO_LEVEL */ NAS_EMM_TAU_LOG_INFO( "Nas_Emm_Tau_TAUReqRejectCasueOthers is entered."); if( (NAS_LMM_CAUSE_SEMANTICALLY_INCORRECT_MSG == ucTAUrejcause)|| (NAS_LMM_CAUSE_INVALID_MANDATORY_INF == ucTAUrejcause)|| (NAS_LMM_CAUSE_MSG_NONEXIST_NOTIMPLEMENTE == ucTAUrejcause)|| (NAS_LMM_CAUSE_IE_NONEXIST_NOTIMPLEMENTED == ucTAUrejcause)|| (NAS_LMM_CAUSE_PROTOCOL_ERROR == ucTAUrejcause)|| (VOS_TRUE == NAS_MML_IsRoamingRejectNoRetryFlgActived(ucTAUrejcause))) { NAS_EMM_TAU_SaveEmmTAUAttemptCnt(NAS_EMM_TAU_ATTEMPT_CNT_MAX); } else { NAS_EMM_TAU_GetEmmTAUAttemptCnt()++; } NAS_EMM_TAU_ProcAbnormal(); /* 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_TAUReqRejectOtherCause:CAUSE_ESM_EMC_PDN_REQ"); NAS_EMM_EmcPndReqTauAbnormalCommProc( NAS_EMM_MmcSendTauActionResultIndRej, (VOS_VOID*)NAS_EMM_NULL_PTR, EMM_SS_DEREG_NORMAL_SERVICE); } else { NAS_EMM_TAU_RelIndCollisionProc(NAS_EMM_MmcSendTauActionResultIndRej, (VOS_VOID*)NAS_EMM_NULL_PTR); } /* lihong00150010 emergency tau&service end */ #if 0 /* 如果启动了3402,清空TAU计数 */ if(NAS_LMM_TIMER_RUNNING == NAS_LMM_IsPtlTimerRunning(TI_NAS_EMM_PTL_T3402)) { NAS_EMM_TAU_SaveEmmTAUAttemptCnt(NAS_EMM_TAU_ATTEMPT_CNT_ZERO); } #endif /*向MRRC发送NAS_EMM_MRRC_REL_REQ消息*/ NAS_EMM_RelReq(NAS_LMM_NOT_BARRED); return; }
VOS_VOID NAS_EMM_TAU_TAUReqRejectCasue25(VOS_VOID) { /* 打印进入该函数, INFO_LEVEL */ NAS_EMM_TAU_LOG_INFO( "NAS_EMM_TAU_TAUReqRejectCasue25 is entered."); NAS_LMM_SetEmmInfoRegDomain(NAS_LMM_REG_DOMAIN_PS); /*设置EU3 ROAMING NOT ALLOWED*/ NAS_LMM_GetMmAuxFsmAddr()->ucEmmUpStat = EMM_US_ROAMING_NOT_ALLOWED_EU3; /*重置TAU计数器*/ NAS_EMM_TAU_SaveEmmTAUAttemptCnt(NAS_EMM_TAU_ATTEMPT_CNT_ZERO); /* 删除 CSG ID LIST*/ /* CGS 待实现 */ /*发送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_SpecialRelCauseCollisionProc(NAS_EMM_MmcSendTauActionResultIndRej, (VOS_VOID*)NAS_EMM_NULL_PTR); return; }
VOS_VOID NAS_EMM_TAU_TAUReqRejectCasue22() { /* 打印进入该函数, INFO_LEVEL */ NAS_EMM_TAU_LOG_INFO( "NAS_EMM_TAU_TAUReqRejectCasue22 is entered."); /*设置EU2*/ NAS_LMM_GetMmAuxFsmAddr()->ucEmmUpStat = EMM_US_NOT_UPDATED_EU2; /*重置TAU计数器*/ NAS_EMM_TAU_SaveEmmTAUAttemptCnt(NAS_EMM_TAU_ATTEMPT_CNT_ZERO); /* 停止T3346定时器 */ NAS_LMM_StopPtlTimer(TI_NAS_EMM_PTL_T3346); /* 启动T3346定时器 */ NAS_LMM_StartPtlTimer(TI_NAS_EMM_PTL_T3346); /* EMM注册状态没有发生变化,不需要同时ESM注册状态 */ /*发送EMM_ESM_STATUS_IND(去注册)*/ //NAS_EMM_TAU_SendEsmStatusInd(EMM_ESM_ATTACH_STATUS_ATTACHED); NAS_EMM_TAUSER_FSMTranState(EMM_MS_REG, EMM_SS_REG_ATTEMPTING_TO_UPDATE, TI_NAS_EMM_STATE_NO_TIMER); NAS_EMM_TAU_RelIndCollisionProc(NAS_EMM_MmcSendTauActionResultIndRej, (VOS_VOID*)NAS_EMM_NULL_PTR); /*向MRRC发送NAS_EMM_MRRC_REL_REQ消息*/ NAS_EMM_RelReq(NAS_LMM_NOT_BARRED); return; }
VOS_VOID NAS_EMM_TAU_TAUReqRejectCasue12() { NAS_MM_TA_STRU stTa; /* 获取当前TA */ NAS_EMM_GetCurrentTa(&stTa); /* 打印进入该函数, INFO_LEVEL */ NAS_EMM_TAU_LOG_INFO( "Nas_Emm_Tau_TAUReqRejectCasue12 is entered."); /* 删除GUTI后会自动保存EPS_LOC,所以需要先设置STATUS */ /*设置EU3 ROAMING NOT ALLOWED,并设置到NVIM中*/ NAS_LMM_GetMmAuxFsmAddr()->ucEmmUpStat = EMM_US_ROAMING_NOT_ALLOWED_EU3; /*删除GUTI,KSIasme,TAI list,GUTI*/ NAS_EMM_ClearRegInfo(NAS_EMM_NOT_DELETE_RPLMN); /*store the current TAI in the list of "forbidden tracking areas for regional provision of service"*/ NAS_EMM_AddForbTa(&stTa,NAS_LMM_GetEmmInfoNetInfoForbTaForRposAddr()); /* 增加REJ cause 12标记,用于向MMC上报有区域限制的限制服务状态 2011-07-27*/ NAS_LMM_SetNasRejCause12Flag(NAS_LMM_REJ_CAUSE_IS_12); /*重置TAU计数器*/ NAS_EMM_TAU_SaveEmmTAUAttemptCnt(NAS_EMM_TAU_ATTEMPT_CNT_ZERO); /* lihong00150010 emergency tau&service begin */ if (NAS_EMM_TAU_START_CAUSE_ESM_EMC_PDN_REQ == NAS_EMM_TAU_GetEmmTAUStartCause()) { /* 记录ATTACH触发原因值 */ NAS_EMM_GLO_AD_GetAttCau() = EMM_ATTACH_CAUSE_ESM_ATTACH_FOR_INIT_EMC_BERER; NAS_EMM_TAU_SendEsmStatusInd(EMM_ESM_ATTACH_STATUS_EMC_ATTACHING); } else { NAS_EMM_TAU_SendEsmStatusInd(EMM_ESM_ATTACH_STATUS_DETACHED); } /* lihong00150010 emergency tau&service end */ /*转换EMM状态机MS_DEREG+SS_DEREG_LIMITED_SERVICE*/ NAS_EMM_TAUSER_FSMTranState(EMM_MS_DEREG, EMM_SS_DEREG_LIMITED_SERVICE, TI_NAS_EMM_STATE_NO_TIMER); /****检查冲突标志并做相应的处理********************************************/ /* 上报TAU结果在冲突中处理 */ NAS_EMM_TAU_SpecialRelCauseCollisionProc(NAS_EMM_MmcSendTauActionResultIndRej, (VOS_VOID*)NAS_EMM_NULL_PTR); NAS_EMM_WaitNetworkRelInd(); return; }
VOS_VOID NAS_EMM_TAU_TAUReqRejectCasue11() { /* 打印进入该函数, INFO_LEVEL */ NAS_EMM_TAU_LOG_INFO( "Nas_Emm_Tau_TAUReqRejectCasue11 is entered."); /* 删除GUTI后会自动保存EPS_LOC,所以需要先设置STATUS */ /*设置EU3 ROAMING NOT ALLOWED,并设置到NVIM中*/ NAS_LMM_GetMmAuxFsmAddr()->ucEmmUpStat = EMM_US_ROAMING_NOT_ALLOWED_EU3; /*删除GUTI,KSIasme,TAI list,GUTI*/ NAS_EMM_ClearRegInfo(NAS_EMM_NOT_DELETE_RPLMN); /*删除equivalent PLMNs由MMC模块完成*/ /*Reset the TAU attempt counter*/ NAS_EMM_TAU_SaveEmmTAUAttemptCnt(NAS_EMM_TAU_ATTEMPT_CNT_ZERO); /* lihong00150010 emergency tau&service begin */ if (NAS_EMM_TAU_START_CAUSE_ESM_EMC_PDN_REQ == NAS_EMM_TAU_GetEmmTAUStartCause()) { /* 记录ATTACH触发原因值 */ NAS_EMM_GLO_AD_GetAttCau() = EMM_ATTACH_CAUSE_ESM_ATTACH_FOR_INIT_EMC_BERER; NAS_EMM_TAU_SendEsmStatusInd(EMM_ESM_ATTACH_STATUS_EMC_ATTACHING); } else { NAS_EMM_TAU_SendEsmStatusInd(EMM_ESM_ATTACH_STATUS_DETACHED); } /* lihong00150010 emergency tau&service end */ /*为上报服务状态,转换EMM状态机MS_DEREG+SS_DEREG_LIMITED_SERVICE*/ /*在收到MMC搜网指令后将转入DEREG_PLMN_SEARCH态*/ NAS_EMM_TAUSER_FSMTranState(EMM_MS_DEREG, EMM_SS_DEREG_LIMITED_SERVICE, TI_NAS_EMM_STATE_NO_TIMER); /****检查冲突标志并做相应的处理********************************************/ /* 上报TAU结果在冲突中处理 */ NAS_EMM_TAU_SpecialRelCauseCollisionProc(NAS_EMM_MmcSendTauActionResultIndRej, (VOS_VOID*)NAS_EMM_NULL_PTR); NAS_EMM_WaitNetworkRelInd(); return; }
VOS_VOID NAS_EMM_ProcRejCauseVal2(VOS_VOID) { /*清除ATTACH ATTEMPTING COUNTER和TRACKING AREA UPDATING ATTEMPT计数器*/ NAS_EMM_TAU_SaveEmmTAUAttemptCnt(NAS_EMM_TAU_ATTEMPT_CNT_ZERO); /*设置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); return; }
VOS_VOID NAS_EMM_ProcRejCauseVal161722(VOS_VOID ) { /*根据GCF协议36523 9.2.1.2.3章节描述,先清除ATTACH ATTEMPTING COUNTER和 TRACKING AREA UPDATING ATTEMPT计数器,再对TRACKING AREA UPDATING ATTEMPT 计数器加1*/ NAS_EMM_TAU_SaveEmmTAUAttemptCnt(NAS_EMM_TAU_ATTEMPT_CNT_ZERO); /*tracking area updating attempt counter shall be incremented*/ NAS_EMM_TAU_GetEmmTAUAttemptCnt() ++; /*设置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); return; }
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_TAUReqRejectCasue8( ) { MMC_LMM_TAU_TYPE_ENUM_UINT32 enEmmTauType = MMC_LMM_TAU_TYPE_BUTT; /* 打印进入该函数, INFO_LEVEL */ NAS_EMM_TAU_LOG_INFO("Nas_Emm_Tau_TAUReqRejectCasue8 is entered."); enEmmTauType = NAS_EMM_TAU_GetTAUtype(); if ((NAS_EMM_CN_TAU_TYPE_COMBINED_TA_LA_UPDATING != enEmmTauType) && (NAS_EMM_CN_TAU_TYPE_COMBINED_TA_LA_WITH_IMSI != enEmmTauType)) { /* 非联合TAU的处理分支 */ NAS_EMM_TAU_ProcAbnormal(); /* 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_TAUReqRejectCasue8:CAUSE_ESM_EMC_PDN_REQ"); NAS_EMM_EmcPndReqTauAbnormalCommProc( NAS_EMM_MmcSendTauActionResultIndRej, (VOS_VOID*)NAS_EMM_NULL_PTR, EMM_SS_DEREG_NORMAL_SERVICE); } else { /* 上报TAU结果在冲突处理中执行 */ NAS_EMM_TAU_RelIndCollisionProc(NAS_EMM_MmcSendTauActionResultIndRej, (VOS_VOID*)NAS_EMM_NULL_PTR); } /* lihong00150010 emergency tau&service end */ #if 0 /*如果启动了T3402定时器,清零TAU计数*/ if(NAS_LMM_TIMER_RUNNING == NAS_LMM_IsPtlTimerRunning(TI_NAS_EMM_PTL_T3402)) { NAS_EMM_TAU_SaveEmmTAUAttemptCnt(NAS_EMM_TAU_ATTEMPT_CNT_ZERO); } #endif /*向MRRC发送NAS_EMM_MRRC_REL_REQ消息*/ NAS_EMM_RelReq(NAS_LMM_NOT_BARRED); return ; } /* 联合TAU的处理分支 */ /*设置EU3 ROAMING NOT ALLOWED,并设置到NVIM中*/ NAS_LMM_GetMmAuxFsmAddr()->ucEmmUpStat = EMM_US_ROAMING_NOT_ALLOWED_EU3; /*删除GUTI,KSIasme,TAI list,GUTI*/ NAS_EMM_ClearRegInfo(NAS_EMM_DELETE_RPLMN); NAS_LMM_SetPsSimValidity(NAS_LMM_SIM_INVALID); /*USIM无效,直到关机或拔卡*/ /*暂不处理*/ /*删除equivalent PLMNs由MMC模块完成*/ /* lihong00150010 emergency tau&service begin */ if (NAS_EMM_TAU_START_CAUSE_ESM_EMC_PDN_REQ == NAS_EMM_TAU_GetEmmTAUStartCause()) { /* 记录ATTACH触发原因值 */ NAS_EMM_GLO_AD_GetAttCau() = EMM_ATTACH_CAUSE_ESM_ATTACH_FOR_INIT_EMC_BERER; NAS_EMM_TAU_SendEsmStatusInd(EMM_ESM_ATTACH_STATUS_EMC_ATTACHING); } else { NAS_EMM_TAU_SendEsmStatusInd(EMM_ESM_ATTACH_STATUS_DETACHED); } /* lihong00150010 emergency tau&service end */ /*转换EMM状态机MS_DEREG+SS_DEREG_NO_IMSI*/ NAS_EMM_TAUSER_FSMTranState(EMM_MS_DEREG, EMM_SS_DEREG_NO_IMSI, TI_NAS_EMM_STATE_NO_TIMER); /****检查冲突标志并做相应的处理********************************************/ /* 上报TAU结果在冲突中处理 */ NAS_EMM_TAU_SpecialRelCauseCollisionProc(NAS_EMM_MmcSendTauActionResultIndRej, (VOS_VOID*)NAS_EMM_NULL_PTR); /*向LRRC发送LRRC_LMM_NAS_INFO_CHANGE_REQ携带USIM卡状态*/ NAS_EMM_SendUsimStatusToRrc(LRRC_LNAS_USIM_PRESENT_INVALID); /*向MRRC发送NAS_EMM_MRRC_REL_REQ消息*/ NAS_EMM_RelReq(NAS_LMM_NOT_BARRED); return; }
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; }