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_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); }
VOS_VOID NAS_ERABM_ClearRabmResource( VOS_VOID ) { VOS_UINT8 ucTimerIndex = NAS_ERABM_NULL; VOS_UINT32 ulLoop = NAS_ERABM_NULL; VOS_UINT32 ulEpsbId = NAS_ERABM_NULL; APP_ESM_IP_ADDR_STRU *pstPdnAddr = VOS_NULL_PTR; /*打印进入该函数*/ NAS_ERABM_INFO_LOG("NAS_ERABM_ClearRabmResource is entered."); /* 停止已经启动的定时器 */ for (ucTimerIndex = 0; ucTimerIndex < NAS_NAS_ERABM_TIMER_NAME_BUTT; ucTimerIndex++) { NAS_ERABM_TimerStop(ucTimerIndex); } /* 如果存在激活承载,则通知CDS释放缓存的数据包,加上此判断是为了避免重复 通知CDS释放缓存数据包 */ if (0 != NAS_ERABM_GetActiveEpsBearerNum()) { /* 通知CDS释放缓存的数据包 */ NAS_ERABM_SndErabmCdsFreeBuffDataInd(); } /*初始化RABM实体*/ NAS_ERABM_MEM_SET((VOS_VOID*)NAS_ERABM_Entity(), NAS_ERABM_NULL, sizeof(NAS_ERABM_ENTITY_STRU)); /* 初始化RABM统计信息 */ NAS_ERABM_DebugInit(); /*设置SERVICE流程没有启动状态*/ NAS_ERABM_SetEmmSrState(NAS_ERABM_SERVICE_STATE_TERMIN); /*设置RABM没有等待EPS承载激活消息*/ NAS_ERABM_SetWaitEpsBActSign(NAS_ERABM_NOT_WAIT_EPSB_ACT_MSG); /*设置RRC请求建立RB的个数为0*/ NAS_ERABM_SetRbNumInfo(0); /*设置唯一激活且没有TFT的承载号为NAS_ERABM_ILL_EPSB_ID*/ NAS_ERABM_GetOnlyActiveAndNoUlTftEpsbId() = NAS_ERABM_ILL_EPSB_ID; /*设置不存在上行数据阻塞*/ NAS_ERABM_SetUpDataPending(EMM_ERABM_NO_UP_DATA_PENDING); /*初始化EPS承载列表*/ for (ulEpsbId = NAS_ERABM_MIN_EPSB_ID; ulEpsbId <= NAS_ERABM_MAX_EPSB_ID; ulEpsbId++) { pstPdnAddr = NAS_ERABM_GetEpsbPdnAddr(ulEpsbId); NAS_ERABM_SetEpsbIdInfo(ulEpsbId, ulEpsbId); NAS_ERABM_SetEpsbRbIdInfo(ulEpsbId, NAS_ERABM_ILL_RB_ID); NAS_ERABM_SetRbStateInfo(ulEpsbId, NAS_ERABM_RB_DISCONNECTED); NAS_ERABM_MEM_SET(pstPdnAddr, NAS_ERABM_NULL, sizeof(APP_ESM_IP_ADDR_STRU)); NAS_ERABM_ClearEpsbResource(ulEpsbId); } /*初始化RB建立临时表信息*/ for (ulLoop = 0; ulLoop < NAS_ERABM_MAX_EPSB_NUM; ulLoop++) { NAS_ERABM_SetRbSetupEpsbIdInfo(ulLoop, NAS_ERABM_ILL_EPSB_ID); NAS_ERABM_SetRbSetupRbIdInfo(ulLoop, NAS_ERABM_ILL_RB_ID); } /*初始化RABM灌包相关信息*/ NAS_ERABM_StAppDataBitIpv4(NAS_ERABM_OP_FALSE); NAS_ERABM_StAppDataBitIpv6(NAS_ERABM_OP_FALSE); NAS_ERABM_SetAppDataRmtPortIpv4(NAS_ERABM_NULL); NAS_ERABM_SetAppDataRmtPortIpv6(NAS_ERABM_NULL); NAS_ERABM_SetAppDataOperateType(APP_ERABM_DATA_TRANS_OPERATE_BUTT); NAS_ERABM_MEM_SET(NAS_ERABM_GetAppDataRemoteIpv4Addr(), NAS_ERABM_NULL,\ sizeof(NAS_ERABM_GetAppDataRemoteIpv4Addr())/sizeof(VOS_UINT8)); NAS_ERABM_MEM_SET(NAS_ERABM_GetAppDataRemoteIpv6Addr(), NAS_ERABM_NULL,\ sizeof(NAS_ERABM_GetAppDataRemoteIpv6Addr())/sizeof(VOS_UINT8)); NAS_ERABM_MEM_SET(NAS_ERABM_GET_IP_HEADER_BUFFER(), NAS_ERABM_NULL, NAS_ERABM_IP_HEADER_BUFFER_LEN); NAS_ERABM_MEM_SET( NAS_ERABM_GetIpv4SegBuffAddr(), NAS_ERABM_NULL, sizeof(NAS_ERABM_IPV4_SEGMENT_BUFF_STRU)); /* 清空下行FILTER配置 */ NAS_ERABM_MEM_SET( NAS_ERABM_IPF_GET_DL_FILTER_PTR(0), NAS_ERABM_NULL, (NAS_ERABM_IPF_MAX_DL_FILTER * sizeof(IPF_FILTER_CONFIG_S))); NAS_ERABM_IPF_SET_DL_FILTER_NUM(0); /* 初始化上行NDIS Filter有效 */ NAS_ERABM_SetUlNdisFilterValidFlag(NAS_ERABM_UL_NDIS_FILTER_INVALID); }
VOS_VOID NAS_ERABM_Init(VOS_VOID) { VOS_UINT8 ucTimerIndex = 0; VOS_UINT32 ulEpsbId = 0; VOS_UINT32 ulLoop = 0; APP_ESM_IP_ADDR_STRU *pstPdnAddr = VOS_NULL_PTR; /*打印进入该函数*/ NAS_ERABM_INFO_LOG("NAS_ERABM START INIT..."); /*初始化RABM实体*/ NAS_ERABM_MEM_SET((VOS_VOID*)NAS_ERABM_Entity(), NAS_ERABM_NULL, sizeof(NAS_ERABM_ENTITY_STRU)); /* 初始化RABM统计信息 */ NAS_ERABM_DebugInit(); /*设置SERVICE流程没有启动状态*/ NAS_ERABM_SetEmmSrState(NAS_ERABM_SERVICE_STATE_TERMIN); /*设置RABM没有等待EPS承载激活消息*/ NAS_ERABM_SetWaitEpsBActSign(NAS_ERABM_NOT_WAIT_EPSB_ACT_MSG); /*设置L MODE的状态为SUSPENDED*/ NAS_ERABM_SetLModeStatus(NAS_ERABM_L_MODE_STATUS_SUSPENDED); /*设置RRC请求建立RB的个数为0*/ NAS_ERABM_SetRbNumInfo(0); /*设置唯一激活且没有TFT的承载号为NAS_ERABM_ILL_EPSB_ID*/ NAS_ERABM_GetOnlyActiveAndNoUlTftEpsbId() = NAS_ERABM_ILL_EPSB_ID; /*设置不存在上行数据阻塞*/ NAS_ERABM_SetUpDataPending(EMM_ERABM_NO_UP_DATA_PENDING); /*初始化定时器信息*/ for ( ucTimerIndex = 0; ucTimerIndex < NAS_NAS_ERABM_TIMER_NAME_BUTT; ucTimerIndex++ ) { NAS_ERABM_TimerStop(ucTimerIndex); } /*初始化EPS承载列表*/ for (ulEpsbId = NAS_ERABM_MIN_EPSB_ID; ulEpsbId <= NAS_ERABM_MAX_EPSB_ID; ulEpsbId++) { pstPdnAddr = NAS_ERABM_GetEpsbPdnAddr(ulEpsbId); NAS_ERABM_SetEpsbIdInfo(ulEpsbId, ulEpsbId); NAS_ERABM_SetEpsbRbIdInfo(ulEpsbId, NAS_ERABM_ILL_RB_ID); NAS_ERABM_SetRbStateInfo(ulEpsbId, NAS_ERABM_RB_DISCONNECTED); NAS_ERABM_MEM_SET(pstPdnAddr, NAS_ERABM_NULL, sizeof(APP_ESM_IP_ADDR_STRU)); NAS_ERABM_ClearEpsbResource(ulEpsbId); } /*初始化RB建立临时表信息*/ for (ulLoop = 0; ulLoop < NAS_ERABM_MAX_EPSB_NUM; ulLoop++) { NAS_ERABM_SetRbSetupEpsbIdInfo(ulLoop, NAS_ERABM_ILL_EPSB_ID); NAS_ERABM_SetRbSetupRbIdInfo(ulLoop, NAS_ERABM_ILL_RB_ID); } /*初始化RABM灌包相关信息*/ NAS_ERABM_StAppDataBitIpv4(NAS_ERABM_OP_FALSE); NAS_ERABM_StAppDataBitIpv6(NAS_ERABM_OP_FALSE); NAS_ERABM_SetAppDataRmtPortIpv4(NAS_ERABM_NULL); NAS_ERABM_SetAppDataRmtPortIpv6(NAS_ERABM_NULL); NAS_ERABM_SetAppDataOperateType(APP_ERABM_DATA_TRANS_OPERATE_BUTT); NAS_ERABM_MEM_SET(NAS_ERABM_GetAppDataRemoteIpv4Addr(), NAS_ERABM_NULL,\ sizeof(NAS_ERABM_GetAppDataRemoteIpv4Addr())/sizeof(VOS_UINT8)); NAS_ERABM_MEM_SET(NAS_ERABM_GetAppDataRemoteIpv6Addr(), NAS_ERABM_NULL,\ sizeof(NAS_ERABM_GetAppDataRemoteIpv6Addr())/sizeof(VOS_UINT8)); NAS_ERABM_MEM_SET(NAS_ERABM_GET_IP_HEADER_BUFFER(), NAS_ERABM_NULL, NAS_ERABM_IP_HEADER_BUFFER_LEN); NAS_ERABM_MEM_SET( NAS_ERABM_GetIpv4SegBuffAddr(), NAS_ERABM_NULL, sizeof(NAS_ERABM_IPV4_SEGMENT_BUFF_STRU)); #if 0 /* 初始化下行IP需要使用的IP Filter定义 */ NAS_ERABM_IpfDefDlFilter(); #endif /* 初始化上行NDIS Filter有效 */ NAS_ERABM_SetUlNdisFilterValidFlag(NAS_ERABM_UL_NDIS_FILTER_INVALID); /* 初始化上行NDIS需要使用的IP Filter定义 */ NAS_ERABM_IpfUlNdisFilterInit(); /* 初始化IPF统计信息 */ NAS_ERABM_IpfOmInit(); }