VOS_VOID NAS_ERABM_RcvRabmEmmRrcConRelInd( VOS_VOID ) { VOS_UINT32 ulEpsbId = NAS_ERABM_NULL; /*打印进入该函数*/ NAS_ERABM_INFO_LOG("NAS_ERABM_RcvRabmEmmRrcConRelInd is entered."); NAS_ERABM_TimerStop( NAS_ERABM_WAIT_RB_RESUME_TIMER); NAS_ERABM_TimerStop( NAS_ERABM_WAIT_RB_REEST_TIMER); NAS_ERABM_SetEmmSrState(NAS_ERABM_SERVICE_STATE_TERMIN); /*停止建立等待定时器*/ NAS_ERABM_TimerStop(NAS_ERABM_WAIT_EPSB_ACT_TIMER); /*清除等待承载建立标识 */ NAS_ERABM_SetWaitEpsBActSign(NAS_ERABM_NOT_WAIT_EPSB_ACT_MSG); /* 如果在正常模式下 */ if (NAS_ERABM_MODE_TYPE_NORMAL == NAS_ERABM_GetMode()) { /* 通知L2释放缓存的数据包 */ /*APPITF_FreeAllofRabmBuf();*/ /* 异系统切换成功后,RRC会上报链路释放清DRB,但此场景不能通知CDS清缓存 */ if (NAS_ERABM_L_MODE_STATUS_NORMAL == NAS_ERABM_GetLModeStatus()) { /* (1)如果当前有上行Pending 标识,即有数据缓存,则给CDS发释放缓存 */ /* (2)存在已激活DRB,则给CDS发释放缓存 */ if((EMM_ERABM_UP_DATA_PENDING == NAS_ERABM_GetUpDataPending()) || ((NAS_ERABM_FAILURE == NAS_ERABM_IsAllActtiveBearerWithoutDrb()) && (NAS_ERABM_NULL != NAS_ERABM_GetActiveEpsBearerNum()))) { /* 通知CDS释放缓存的数据包 */ NAS_ERABM_SndErabmCdsFreeBuffDataInd(); /* 清除上行数据阻塞标志 */ NAS_ERABM_SetUpDataPending(EMM_ERABM_NO_UP_DATA_PENDING); } } } else /*环回模式下不清理缓存,保持原上行数据Pending状态*/ { NAS_ERABM_INFO_LOG("NAS_ERABM_RcvRabmEmmRrcConRelInd: Do not release buffer ."); } /* 释放所有RB */ for (ulEpsbId = NAS_ERABM_MIN_EPSB_ID; ulEpsbId<= NAS_ERABM_MAX_EPSB_ID; ulEpsbId++) { NAS_ERABM_RcvRbRelease(ulEpsbId); } return; }
/***************************************************************************** Function Name : NAS_ERABM_RcvCdsErabmServiceNotify Description : ERABM模块CDS_ERABM_SERVICE_NOTIFY消息分发处理 Input : CDS_ERABM_SERVICE_NOTIFY_STRU *pRcvMsg-----------消息指针 Output : VOS_VOID Return : VOS_VOID History : 1.lihong00150010 2011-12-06 Draft Enact 2.lihong00150010 2012-12-14 Modify:Emergency *****************************************************************************/ VOS_VOID NAS_ERABM_RcvCdsErabmServiceNotify ( const CDS_ERABM_SERVICE_NOTIFY_STRU *pRcvMsg ) { /*打印进入该函数*/ NAS_ERABM_INFO_LOG("NAS_ERABM_RcvCdsErabmServiceNotify is entered."); (VOS_VOID)pRcvMsg; /* 承载没有对应的DRB的场景下,并且定时器没有启动时,向EMM发起请求 */ if (NAS_ERABM_SUCCESS == NAS_ERABM_IsAllActtiveBearerWithoutDrb()) { if(NAS_ERABM_TIMER_STATE_STOPED != NAS_ERABM_IsTimerRunning(NAS_ERABM_WAIT_RB_REEST_TIMER)) { NAS_ERABM_NORM_LOG("NAS_ERABM_RcvCdsErabmServiceNotify:Reest timer started!" ); return ; } /*发送EMM_ERABM_REEST_REQ消息后,设置服务请求启动*/ NAS_ERABM_SetEmmSrState(NAS_ERABM_SERVICE_STATE_INIT); /* lihong00150010 emergency tau&service begin */ if (VOS_TRUE == NAS_ERABM_IsEmcService(pRcvMsg->ucRabId)) { NAS_ERABM_SndRabmEmmReestReq(VOS_TRUE); NAS_ERABM_TimerStart( NAS_ERABM_WAIT_RB_REEST_LENGTH, NAS_ERABM_WAIT_RB_REEST_TIMER, VOS_TRUE); } else { NAS_ERABM_SndRabmEmmReestReq(VOS_FALSE); NAS_ERABM_TimerStart( NAS_ERABM_WAIT_RB_REEST_LENGTH, NAS_ERABM_WAIT_RB_REEST_TIMER, VOS_FALSE); } /* lihong00150010 emergency tau&service end */ } else { NAS_ERABM_NORM_LOG("NAS_ERABM_RcvCdsErabmServiceNotify:Already in Connect state!" ); NAS_ERABM_SetEmmSrState(NAS_ERABM_SERVICE_STATE_TERMIN); /* 通知CDS启动二次过滤 */ NAS_ERABM_SndErabmCdsSndBuffDataInd(CDS_ERABM_SEND_BUFF_DATA_ALLOWED_TYPE_SERVICE_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; } }