/***************************************************************************** Function Name : NAS_ERABM_GetEpsbIdByDrbId Description : 根据DRB号获取EPS承载号 Input : ulRbId-------------------DRB号 Output : pulEpsbId----------------承载号指针 Return : VOS_UINT32 History : 1.lihong00150010 2011-12-06 Draft Enact *****************************************************************************/ VOS_UINT32 NAS_ERABM_GetEpsbIdByDrbId ( VOS_UINT32 ulRbId, VOS_UINT32 *pulEpsbId ) { VOS_UINT32 ulEpsbId = NAS_ERABM_NULL; /*找到RBID对应的EPS承载*/ for (ulEpsbId = NAS_ERABM_MIN_EPSB_ID; ulEpsbId <= NAS_ERABM_MAX_EPSB_ID; ulEpsbId++) { if (NAS_ERABM_EPSB_ACTIVE != NAS_ERABM_GetEpsbStateInfo(ulEpsbId)) { continue; } if (NAS_ERABM_GetEpsbRbIdInfo(ulEpsbId) == ulRbId) { *pulEpsbId = ulEpsbId; return NAS_ERABM_SUCCESS; } } return NAS_ERABM_FAILURE; }
/***************************************************************************** Function Name : NAS_ERABM_RcvRabmEmmSuspendInd Description : ERABM模块收到ID_EMM_ERABM_SUSPEND_IND处理函数 Input : EMM_ERABM_SUSPEND_IND_STRU *pRcvMsg Output : None Return : VOS_UINT32 History : 1.lihong00150010 2011-05-03 Draft Enact *****************************************************************************/ VOS_VOID NAS_ERABM_RcvRabmEmmSuspendInd(const EMM_ERABM_SUSPEND_IND_STRU *pRcvMsg ) { VOS_UINT32 ulEpsbId = NAS_ERABM_NULL; VOS_UINT8 ucTimerIndex = NAS_ERABM_NULL; /* 设置状态为挂起态 */ NAS_ERABM_SetLModeStatus(NAS_ERABM_L_MODE_STATUS_SUSPENDED); /* 停止定时器 */ for (ucTimerIndex = 0; ucTimerIndex < NAS_NAS_ERABM_TIMER_NAME_BUTT; ucTimerIndex++) { NAS_ERABM_TimerStop(ucTimerIndex); } /* 如果是切换和CCO类型的挂起,则不删除DRB信息,只将DRB的状态设为NAS_ERABM_RB_SUSPENDED, 因为L-GU切换或者CCO失败回退成功时,RRC并不上报LRRC_LRABM_RAB_IND消息,而 只上报LRRC_LRABM_STATUS_IND消息恢复数传;其他类型的挂起,则删除DRB信息*/ if ((EMM_ERABM_SYS_CHNG_TYPE_HO == pRcvMsg->enSysChngType) || (EMM_ERABM_SYS_CHNG_TYPE_CCO == pRcvMsg->enSysChngType)) { /* 将DRB状态设为NAS_ERABM_RB_SUSPENDED */ for (ulEpsbId = NAS_ERABM_MIN_EPSB_ID; ulEpsbId<= NAS_ERABM_MAX_EPSB_ID; ulEpsbId++) { /* 添加保护,防止出现RbState被误设置为挂起态 */ if(NAS_ERABM_ILL_RB_ID != NAS_ERABM_GetEpsbRbIdInfo(ulEpsbId)) { NAS_ERABM_SetRbStateInfo(ulEpsbId, NAS_ERABM_RB_SUSPENDED); } } } #if 0 /* 设置用户面模式为NULL */ if (PS_SUCC != UP_SetRanMode(RAN_MODE_NULL)) { NAS_ERABM_ERR_LOG("NAS_ERABM_RcvRabmEmmSuspendInd: Update Ran Mode Failed."); } #endif /*清除等待EPS承载激活标识*/ NAS_ERABM_SetWaitEpsBActSign(NAS_ERABM_NOT_WAIT_EPSB_ACT_MSG); /*SERVICE流程停止*/ NAS_ERABM_SetEmmSrState(NAS_ERABM_SERVICE_STATE_TERMIN); /* 通知L2释放缓存的数据包 */ /*APPITF_FreeAllofRabmBuf();*/ /* 清除上行数据阻塞标志*/ NAS_ERABM_SetUpDataPending(EMM_ERABM_NO_UP_DATA_PENDING); /* 通知ETC挂起 */ NAS_ERABM_SndRabmTcSuspendInd(); /* 回复EMM挂起成功 */ NAS_ERABM_SndRabmEmmSuspendRsp(EMM_ERABM_RSLT_TYPE_SUCC); }
CDS_ERABM_TRANSFER_RESULT_ENUM_UINT32 CDS_ERABM_GetDrbId ( VOS_UINT8 ucEpsbId, VOS_UINT8 *pucDrbId ) { /* 上行收到数据包增加统计 */ NAS_ERABM_AddUlReceivePackageNum(); /* 输入参数合法性检测 */ if (VOS_NULL_PTR == pucDrbId) { NAS_ERABM_ERR_LOG("CDS_ERABM_GetDrbId:pucDrbId is NULL!"); /* 上行丢弃数据包增加统计 */ NAS_ERABM_AddUlDiscardPackageNum(); return PS_FAIL; } if ((ucEpsbId < NAS_ERABM_MIN_EPSB_ID) || (ucEpsbId > NAS_ERABM_MAX_EPSB_ID)) { NAS_ERABM_ERR_LOG("CDS_ERABM_GetDrbId:EpsbId is illegal!"); /* 上行丢弃数据包增加统计 */ NAS_ERABM_AddUlDiscardPackageNum(); return CDS_ERABM_TRANSFER_RESULT_FAIL; } if (NAS_ERABM_RB_CONNECTED == NAS_ERABM_GetRbStateInfo(ucEpsbId)) { *pucDrbId = (VOS_UINT8)NAS_ERABM_GetEpsbRbIdInfo(ucEpsbId); /* 增加上行发送总数据包数 */ NAS_ERABM_AddUlSendPackageNum(); /* 增加承载上行发送总数据包数 */ NAS_ERABM_AddBearerSendPackageNum((VOS_UINT32)ucEpsbId); return CDS_ERABM_TRANSFER_RESULT_SUCC; } else if(NAS_ERABM_RB_SUSPENDED == NAS_ERABM_GetRbStateInfo(ucEpsbId)) { /* 设置上行数据阻塞标志*/ NAS_ERABM_SetUpDataPending(EMM_ERABM_UP_DATA_PENDING); NAS_ERABM_LOG1("CDS_ERABM_GetDrbId:DRB_SUSPENDED, set data pending = ",NAS_ERABM_GetUpDataPending()); *pucDrbId = (VOS_UINT8)NAS_ERABM_GetEpsbRbIdInfo(ucEpsbId); /* 增加上行Suspend总数据包数 */ NAS_ERABM_AddUlSuspendPackageNum(); /* 增加承载上行Suspend总数据包数 */ NAS_ERABM_AddBearerSuspendPackageNum((VOS_UINT32)ucEpsbId); return CDS_ERABM_TRANSFER_RESULT_DRB_SUSPEND; } else { /* 判断是否处于连接态 */ if (NAS_ERABM_SUCCESS == NAS_ERABM_IsAllActtiveBearerWithoutDrb()) { /* 设置上行数据阻塞标志*/ NAS_ERABM_SetUpDataPending(EMM_ERABM_UP_DATA_PENDING); NAS_ERABM_LOG1("CDS_ERABM_GetDrbId:AllActtiveBearerWithoutDrb, set data pending = ",NAS_ERABM_GetUpDataPending()); /* 增加上行IDLE总数据包数 */ NAS_ERABM_AddUlIdlePackageNum(); /* 增加承载上行IDLE总数据包数 */ NAS_ERABM_AddBearerIdlePackageNum((VOS_UINT32)ucEpsbId); return CDS_ERABM_TRANSFER_RESULT_IDLE; } /* 对于当前处于连接态,但承载对应的DRB不存在这种暂态,暂时先返回 CDS_ERABM_TRANSFER_RESULT_FAIL,由CDS释放内存,后续优化时再返回 CDS_ERABM_TRANSFER_RESULT_DRB_NOT_EXIST,由CDS负责缓存数据包。*/ /* 上行丢弃数据包增加统计 */ NAS_ERABM_AddUlDiscardPackageNum(); /* 承载上行丢弃数据包增加统计 */ NAS_ERABM_AddBearerDiscardPackageNum((VOS_UINT32)ucEpsbId); return APP_ERABM_TRANSFER_RESULT_FAIL; } }