VOS_VOID NAS_EMM_ProcRejCauseVal14() { NAS_EMM_AttDataUpdate(NAS_EMM_NOT_DELETE_RPLMN); if (EMM_ATTACH_CAUSE_ESM_ATTACH_FOR_INIT_EMC_BERER == NAS_EMM_GLO_AD_GetAttCau()) { /* 通知ESM紧接着EMM还要做紧急注册,ESM不需要清除动态表中的紧急PDN建立记录 */ NAS_EMM_AttSendEsmResult(EMM_ESM_ATTACH_STATUS_EMC_ATTACHING); } else { /*向ESM发送ATTACH结果*/ NAS_EMM_AttSendEsmResult(EMM_ESM_ATTACH_STATUS_DETACHED); } /*修改状态:进入主状态DEREG子状态DEREG_LIMITED_SERVICE*/ NAS_EMM_AdStateConvert( EMM_MS_DEREG, EMM_SS_DEREG_LIMITED_SERVICE, TI_NAS_EMM_STATE_NO_TIMER); /* 向MMC发送结果 */ NAS_EMM_AppSendAttRej(); NAS_EMM_WaitNetworkRelInd(); if (EMM_ATTACH_CAUSE_ESM_EMC_ATTACH == NAS_EMM_GLO_AD_GetAttCau()) { /* 通知IMSA再尝试CS域 */ } return; }
VOS_VOID NAS_EMM_ProcRejCauseValOther(NAS_EMM_CN_CAUSE_ENUM_UINT8 ucRejCauseVal) { if((NAS_LMM_CAUSE_SEMANTICALLY_INCORRECT_MSG == ucRejCauseVal) || (NAS_LMM_CAUSE_INVALID_MANDATORY_INF == ucRejCauseVal) || (NAS_LMM_CAUSE_MSG_NONEXIST_NOTIMPLEMENTE == ucRejCauseVal) || (NAS_LMM_CAUSE_IE_NONEXIST_NOTIMPLEMENTED == ucRejCauseVal) || (NAS_LMM_CAUSE_PROTOCOL_ERROR == ucRejCauseVal)|| (VOS_TRUE == NAS_MML_IsRoamingRejectNoRetryFlgActived(ucRejCauseVal))) { NAS_EMM_GLO_AD_GetAttAtmpCnt() = 5; } else if(NAS_LMM_CAUSE_ESM_FAILURE == ucRejCauseVal) { /* 美国AT&T定制需求,在AT&T的PLMN上收到#19时,计数需特殊处理 */ if((NAS_EMM_YES == NAS_EMM_IsDamConfitionSatisfied()) ||(NAS_EMM_YES == NAS_EMM_GetEmmInfoRej19AtmptCntFlag())) { NAS_EMM_DamAttachRej19CountProc(); } else if(NAS_LMM_ESM_CAUSE_PDN_CONNECTION_DOES_NOT_EXIST == NAS_EMM_GLO_AD_GetAttRejEsmCau()) { /*CL multimode 当EMM原因值为#19且ESM原因值为#54时attach尝试次数加1 2014-02-14*/ /* 清除之前保存的attach原因值 */ NAS_LMM_ClearEmmInfoMmcAttachReason(); NAS_EMM_GLO_AD_GetAttAtmpCnt() ++; } else { NAS_EMM_GLO_AD_GetAttAtmpCnt() = 5; } } else { NAS_EMM_GLO_AD_GetAttAtmpCnt() ++; } if (EMM_ATTACH_CAUSE_ESM_ATTACH_FOR_INIT_EMC_BERER == NAS_EMM_GLO_AD_GetAttCau()) { /* 通知ESM紧接着EMM还要做紧急注册,ESM不需要清除动态表中的紧急PDN建立记录 */ NAS_EMM_AttSendEsmResult(EMM_ESM_ATTACH_STATUS_EMC_ATTACHING); } else { /*向ESM发送ATTACH结果*/ NAS_EMM_AttSendEsmResult(EMM_ESM_ATTACH_STATUS_DETACHED); } NAS_EMM_ProcRejCauOtherAbnormal(); /*向MRRC发送NAS_EMM_MRRC_REL_REQ消息*/ NAS_EMM_RelReq( NAS_LMM_NOT_BARRED); if (EMM_ATTACH_CAUSE_ESM_EMC_ATTACH == NAS_EMM_GLO_AD_GetAttCau()) { /* 通知IMSA再尝试CS域 */ } return; }
VOS_VOID NAS_EMM_ProcRejCauseValOther(NAS_EMM_CN_CAUSE_ENUM_UINT8 ucRejCauseVal) { if((NAS_LMM_CAUSE_SEMANTICALLY_INCORRECT_MSG == ucRejCauseVal) || (NAS_LMM_CAUSE_INVALID_MANDATORY_INF == ucRejCauseVal) || (NAS_LMM_CAUSE_MSG_NONEXIST_NOTIMPLEMENTE == ucRejCauseVal) || (NAS_LMM_CAUSE_IE_NONEXIST_NOTIMPLEMENTED == ucRejCauseVal) || (NAS_LMM_CAUSE_PROTOCOL_ERROR == ucRejCauseVal)) { NAS_EMM_GLO_AD_GetAttAtmpCnt() = 5; } else if(NAS_LMM_CAUSE_ESM_FAILURE == ucRejCauseVal) { /*CL multimode 当EMM原因值为#19且ESM原因值为#54时attach尝试次数加1 2014-02-14*/ if(NAS_LMM_ESM_CAUSE_PDN_CONNECTION_DOES_NOT_EXIST == NAS_EMM_GLO_AD_GetAttRejEsmCau()) { /* 清除之前保存的attach原因值 */ NAS_LMM_ClearEmmInfoMmcAttachReason(); NAS_EMM_GLO_AD_GetAttAtmpCnt() ++; } else { NAS_EMM_GLO_AD_GetAttAtmpCnt() = 5; } } else { NAS_EMM_GLO_AD_GetAttAtmpCnt() ++; } if (EMM_ATTACH_CAUSE_ESM_ATTACH_FOR_INIT_EMC_BERER == NAS_EMM_GLO_AD_GetAttCau()) { /* 通知ESM紧接着EMM还要做紧急注册,ESM不需要清除动态表中的紧急PDN建立记录 */ NAS_EMM_AttSendEsmResult(EMM_ESM_ATTACH_STATUS_EMC_ATTACHING); } else { /*向ESM发送ATTACH结果*/ NAS_EMM_AttSendEsmResult(EMM_ESM_ATTACH_STATUS_DETACHED); } NAS_EMM_ProcRejCauOtherAbnormal(); /*向MRRC发送NAS_EMM_MRRC_REL_REQ消息*/ NAS_EMM_RelReq( NAS_LMM_NOT_BARRED); if (EMM_ATTACH_CAUSE_ESM_EMC_ATTACH == NAS_EMM_GLO_AD_GetAttCau()) { /* 通知IMSA再尝试CS域 */ } return; }
VOS_VOID NAS_EMM_ProcRejCauseVal15() { NAS_MM_TA_STRU stTa; /* 获取当前TA */ NAS_EMM_GetCurrentTa(&stTa); NAS_EMM_AttDataUpdate(NAS_EMM_NOT_DELETE_RPLMN); if (NAS_EMMC_USER_SPEC_PLMN_YES == NAS_EMMC_GetUserSpecPlmnFlag()) { NAS_EMM_AddForbTa(&stTa,NAS_LMM_GetEmmInfoNetInfoForbTaForRej15Addr()); } else { NAS_EMM_AddForbTa(&stTa,NAS_LMM_GetEmmInfoNetInfoForbTaForRoamAddr()); NAS_EMMC_SendRrcCellSelectionReq(LRRC_LNAS_FORBTA_CHANGE); } if (EMM_ATTACH_CAUSE_ESM_ATTACH_FOR_INIT_EMC_BERER == NAS_EMM_GLO_AD_GetAttCau()) { /* 通知ESM紧接着EMM还要做紧急注册,ESM不需要清除动态表中的紧急PDN建立记录 */ NAS_EMM_AttSendEsmResult(EMM_ESM_ATTACH_STATUS_EMC_ATTACHING); } else { /*向ESM发送ATTACH结果*/ NAS_EMM_AttSendEsmResult(EMM_ESM_ATTACH_STATUS_DETACHED); } /*修改状态:进入主状态DEREG子状态DEREG_LIMITED_SERVICE*/ NAS_EMM_AdStateConvert( EMM_MS_DEREG, EMM_SS_DEREG_LIMITED_SERVICE, TI_NAS_EMM_STATE_NO_TIMER); /* 向MMC发送结果 */ NAS_EMM_AppSendAttRej(); NAS_EMM_WaitNetworkRelInd(); if (EMM_ATTACH_CAUSE_ESM_EMC_ATTACH == NAS_EMM_GLO_AD_GetAttCau()) { /* 通知IMSA再尝试CS域 */ } return; }
VOS_VOID NAS_EMM_ProcRejCauseVal12() { NAS_MM_TA_STRU stTa; /* 获取当前TA */ NAS_EMM_GetCurrentTa(&stTa); NAS_EMM_AttDataUpdate(NAS_EMM_NOT_DELETE_RPLMN); NAS_EMM_AddForbTa(&stTa,NAS_LMM_GetEmmInfoNetInfoForbTaForRposAddr()); /* 增加REJ cause 12标记,用于向MMC上报有区域限制的限制服务状态 2011-07-27*/ NAS_LMM_SetNasRejCause12Flag(NAS_LMM_REJ_CAUSE_IS_12); if (EMM_ATTACH_CAUSE_ESM_ATTACH_FOR_INIT_EMC_BERER == NAS_EMM_GLO_AD_GetAttCau()) { /* 通知ESM紧接着EMM还要做紧急注册,ESM不需要清除动态表中的紧急PDN建立记录 */ NAS_EMM_AttSendEsmResult(EMM_ESM_ATTACH_STATUS_EMC_ATTACHING); } else { /*向ESM发送ATTACH结果*/ NAS_EMM_AttSendEsmResult(EMM_ESM_ATTACH_STATUS_DETACHED); } /*修改状态:进入主状态DEREG子状态DEREG_LIMITED_SERVICE*/ NAS_EMM_AdStateConvert( EMM_MS_DEREG, EMM_SS_DEREG_LIMITED_SERVICE, TI_NAS_EMM_STATE_NO_TIMER); /* 向MMC发送结果 */ NAS_EMM_AppSendAttRej(); NAS_EMM_WaitNetworkRelInd(); if (EMM_ATTACH_CAUSE_ESM_EMC_ATTACH == NAS_EMM_GLO_AD_GetAttCau()) { /* 通知IMSA再尝试CS域 */ } return; }
VOS_VOID NAS_EMM_ProcRejCauseVal3678() { NAS_EMM_AttDataUpdate(NAS_EMM_DELETE_RPLMN); NAS_LMM_SetPsSimValidity(NAS_LMM_SIM_INVALID); if (EMM_ATTACH_CAUSE_ESM_ATTACH_FOR_INIT_EMC_BERER == NAS_EMM_GLO_AD_GetAttCau()) { /* 通知ESM紧接着EMM还要做紧急注册,ESM不需要清除动态表中的紧急PDN建立记录 */ NAS_EMM_AttSendEsmResult(EMM_ESM_ATTACH_STATUS_EMC_ATTACHING); } else { /*向ESM发送ATTACH结果*/ NAS_EMM_AttSendEsmResult(EMM_ESM_ATTACH_STATUS_DETACHED); } /*修改状态:进入主状态DEREG子状态DEREG_LIMITED_SERVICE*/ NAS_EMM_AdStateConvert( EMM_MS_DEREG, EMM_SS_DEREG_NO_IMSI, TI_NAS_EMM_STATE_NO_TIMER); /* 向MMC发送结果 */ NAS_EMM_AppSendAttRej(); /*向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); if (EMM_ATTACH_CAUSE_ESM_EMC_ATTACH == NAS_EMM_GLO_AD_GetAttCau()) { /* 通知IMSA再尝试CS域 */ } /* 清除之前记录的attach原因值 */ NAS_LMM_ClearEmmInfoMmcAttachReason(); return; }
VOS_VOID NAS_EMM_ProcEpsOnlyNoCause( VOS_VOID) { NAS_EMM_ProcRejCauseVal161722(); #if 0 /*向ESM发送ATTACH结果*/ NAS_EMM_AttSendEsmResult(EMM_ESM_ATTACH_STATUS_DETACHED); NAS_EMM_GLO_AD_GetAttAtmpCnt() ++; NAS_EMM_AttProcEpsOnlyRejValueOther(); #endif return; }
VOS_VOID NAS_EMM_ProcRejCauseVal5() { /*向ESM发送ATTACH结果*/ NAS_EMM_AttSendEsmResult(EMM_ESM_ATTACH_STATUS_DETACHED); /*修改状态:进入主状态DEREG子状态DEREG_LIMITED_SERVICE*/ NAS_EMM_AdStateConvert( EMM_MS_DEREG, EMM_SS_DEREG_NO_IMSI, TI_NAS_EMM_STATE_NO_TIMER); /* 向MMC发送结果 */ NAS_EMM_AppSendAttRej(); /*向MRRC发送NAS_EMM_MRRC_REL_REQ消息*/ NAS_EMM_RelReq( NAS_LMM_NOT_BARRED); /* 通知IMSA不再尝试CS域 */ return; }
VOS_VOID NAS_EMM_ProcEpsOnlyWithCause ( VOS_VOID *pstRcvMsg ) { NAS_EMM_CN_ATTACH_ACP_STRU *pstAttAcp; pstAttAcp = (NAS_EMM_CN_ATTACH_ACP_STRU *)pstRcvMsg; NAS_EMM_GLO_AD_GetAttRejCau() = pstAttAcp->ucEMMCause; switch (pstAttAcp->ucEMMCause) { case NAS_LMM_CAUSE_IMSI_UNKNOWN_IN_HSS: NAS_EMM_ProcRejCauseVal2(); break; case NAS_LMM_CAUSE_CS_NOT_AVAIL: NAS_EMM_ProcRejCauseVal18(); break; default: NAS_EMM_ProcRejCauseVal161722(); break; #if 0 case NAS_LMM_CAUSE_MSC_UNREACHABLE: case NAS_LMM_CAUSE_NETWORK_FAILURE: case NAS_LMM_CAUSE_PROCEDURE_CONGESTION: NAS_EMM_ProcRejCauseVal161722(); break; default : /*向ESM发送ATTACH结果*/ NAS_EMM_AttSendEsmResult(EMM_ESM_ATTACH_STATUS_DETACHED); /*NAS_EMM_GLO_AD_GetConnRelCau() = EMM_CONN_REL_CAUSE_EPS_ONLY_REJVAL_OTHER;*/ NAS_EMM_ProcEpsOnlyOtherCause(pstAttAcp->ucEMMCause); break; #endif } return; }
VOS_VOID NAS_EMM_ProcRejCauseVal15() { NAS_MM_TA_STRU stTa; MMC_LMM_LTE_NO_SUBSCRIBE_PLMN_LIST_STRU stLteNoSubsPlmnList; /* 获取当前TA */ NAS_EMM_GetCurrentTa(&stTa); NAS_EMM_AttDataUpdate(NAS_EMM_NOT_DELETE_RPLMN); if (NAS_EMMC_USER_SPEC_PLMN_YES == NAS_EMMC_GetUserSpecPlmnFlag()) { NAS_EMM_AddForbTa(&stTa,NAS_LMM_GetEmmInfoNetInfoForbTaForRej15Addr()); } else { NAS_EMM_AddForbTa(&stTa,NAS_LMM_GetEmmInfoNetInfoForbTaForRoamAddr()); NAS_EMMC_SendRrcCellSelectionReq(LRRC_LNAS_FORBTA_CHANGE); } if (EMM_ATTACH_CAUSE_ESM_ATTACH_FOR_INIT_EMC_BERER == NAS_EMM_GLO_AD_GetAttCau()) { /* 通知ESM紧接着EMM还要做紧急注册,ESM不需要清除动态表中的紧急PDN建立记录 */ NAS_EMM_AttSendEsmResult(EMM_ESM_ATTACH_STATUS_EMC_ATTACHING); } else { /*向ESM发送ATTACH结果*/ NAS_EMM_AttSendEsmResult(EMM_ESM_ATTACH_STATUS_DETACHED); } /*修改状态:进入主状态DEREG子状态DEREG_LIMITED_SERVICE*/ NAS_EMM_AdStateConvert( EMM_MS_DEREG, EMM_SS_DEREG_LIMITED_SERVICE, TI_NAS_EMM_STATE_NO_TIMER); /* 向MMC发送结果 */ NAS_EMM_AppSendAttRej(); /*被15拒绝,当前PLMN只有一个*/ stLteNoSubsPlmnList.ulPlmnNum = 1; /*拷贝当前PLMN*/ NAS_LMM_MEM_CPY(&(stLteNoSubsPlmnList.astPlmnId[0]), NAS_LMM_GetEmmInfoPresentPlmnAddr(), sizeof(MMC_LMM_PLMN_ID_STRU)); /*如果网络侧带了扩展原因值,而且当前对应值是EUTRAN NOT ALLOW,则走正常的协议流程*/ if((NAS_EMM_BIT_SLCT == NAS_EMM_GLO_AD_OP_GetAttRejEmmExtCau()) &&(NAS_EMM_EUTRAN_NOT_ALLOWED == NAS_EMM_GLO_AD_GetAttRejEmmExtCau())) { /*被15原因值拒绝而且当前有扩展原因值,指示USIM未在LTE开户,走正常的LTE未开户流程*/ NAS_EMM_SetLteNoSubscribeExtCauseFlag(NAS_EMM_EUTRAN_NOT_ALLOWED); NAS_LMM_LteNoSubscribeWithExtCauseHandle(&stLteNoSubsPlmnList); } else { /*被15原因值拒绝但是没有带扩展原因值,走LTE未开户定制流程*/ NAS_LMM_LteNoSubscribeWithOutExtCauseHandle(&stLteNoSubsPlmnList); } NAS_EMM_WaitNetworkRelInd(); if (EMM_ATTACH_CAUSE_ESM_EMC_ATTACH == NAS_EMM_GLO_AD_GetAttCau()) { /* 通知IMSA再尝试CS域 */ } return; }