VOS_VOID NAS_ERABM_SndErabmCdsRabReleaseInd( VOS_UINT32 ulEpsbId ) { #if (VOS_OS_VER != VOS_WIN32) CDS_ERABM_RAB_RELEASE_IND_STRU *pstRabReleaseInd = VOS_NULL_PTR; /*分配空间和检测是否分配成功*/ pstRabReleaseInd = (VOS_VOID*)NAS_ERABM_ALLOC_MSG(sizeof(CDS_ERABM_RAB_RELEASE_IND_STRU)); if (VOS_NULL_PTR == pstRabReleaseInd) { NAS_ERABM_ERR_LOG("NAS_ERABM_SndErabmCdsRabReleaseInd:ERROR:Alloc msg fail!" ); return; } /*清空*/ NAS_ERABM_MEM_SET( NAS_ERABM_GET_MSG_ENTITY(pstRabReleaseInd), NAS_ERABM_NULL, NAS_ERABM_GET_MSG_LENGTH(pstRabReleaseInd)); /*赋值 EpsbId*/ pstRabReleaseInd->ucRabId = (VOS_UINT8)ulEpsbId; /*填写消息头*/ NAS_ERABM_WRITE_CDS_MSG_HEAD(pstRabReleaseInd,ID_QOS_FC_ERABM_RAB_RELEASE_IND); /* 调用消息发送函数*/ NAS_ERABM_SND_MSG(pstRabReleaseInd); #endif }
VOS_VOID NAS_ERABM_SndErabmCdsFreeBuffDataInd( VOS_VOID ) { ERABM_CDS_FREE_BUFF_DATA_IND_STRU *pstFreeBuffDataInd = VOS_NULL_PTR; /*分配空间和检测是否分配成功*/ pstFreeBuffDataInd = (VOS_VOID*)NAS_ERABM_ALLOC_MSG(sizeof(ERABM_CDS_FREE_BUFF_DATA_IND_STRU)); if (VOS_NULL_PTR == pstFreeBuffDataInd) { NAS_ERABM_ERR_LOG("NAS_ERABM_SndErabmCdsSndBuffDataInd:ERROR:Alloc msg fail!" ); return; } /*清空*/ NAS_ERABM_MEM_SET( NAS_ERABM_GET_MSG_ENTITY(pstFreeBuffDataInd), NAS_ERABM_NULL, NAS_ERABM_GET_MSG_LENGTH(pstFreeBuffDataInd)); /*填写消息头*/ NAS_ERABM_WRITE_CDS_MSG_HEAD(pstFreeBuffDataInd,ID_ERABM_CDS_FREE_BUFF_DATA_IND); /* 调用消息发送函数*/ NAS_ERABM_SND_MSG(pstFreeBuffDataInd); }
VOS_VOID NAS_ERABM_RcvRabmTcDeactTestMode( VOS_VOID ) { if (NAS_ERABM_L_MODE_STATUS_NORMAL != NAS_ERABM_GetLModeStatus()) { NAS_ERABM_WARN_LOG("NAS_ERABM_RcvRabmTcDeactTestMode:Rabm is already suspended!"); return ; } /* 环回模式B下停止环回缓存定时器 */ if (NAS_ERABM_MODE_TYPE_LB == NAS_ERABM_GetMode()) { NAS_ERABM_TimerStop(NAS_ERABM_WAIT_TC_FREE_BUFFER_TIMER); } /* 将模式设为正常模式 */ NAS_ERABM_SetMode(NAS_ERABM_MODE_TYPE_NORMAL); if (0 != NAS_ERABM_GetActiveEpsBearerNum()) { NAS_ERABM_SetUlNdisFilterValidFlag(NAS_ERABM_UL_NDIS_FILTER_VALID); } else { NAS_ERABM_SetUlNdisFilterValidFlag(NAS_ERABM_UL_NDIS_FILTER_INVALID); } if(PS_FAIL == NAS_ERABM_IpfConfigUlFilter()) { NAS_ERABM_ERR_LOG("NAS_ERABM_RcvRabmTcActTestMode: Update IP Filter Failed."); } }
VOS_UINT32 CDS_ERABM_GetDefaultEpsbId ( VOS_UINT8 ucDrbId, VOS_UINT8 *pucDeftEpsbId ) { VOS_UINT32 ulEpsbId = NAS_ERABM_NULL; if (VOS_NULL_PTR == pucDeftEpsbId) { NAS_ERABM_ERR_LOG("CDS_ERABM_GetDefaultEpsbId:pucEpsbId is NULL!"); return PS_FAIL; } /* 获取DRB关联承载号 */ if (NAS_ERABM_SUCCESS != NAS_ERABM_GetEpsbIdByDrbId( ucDrbId, &ulEpsbId)) { NAS_ERABM_WARN_LOG("CDS_ERABM_GetDefaultEpsbId:NAS_ERABM_GetEpsbIdByDrbId failed!"); return PS_FAIL; } /* 判断承载类型是否为缺省 */ if (PS_TRUE == NAS_ESM_IsDefaultEpsBearerType(NAS_ERABM_GetEpsbBearerType(ulEpsbId))) { *pucDeftEpsbId = (VOS_UINT8)ulEpsbId; } else { *pucDeftEpsbId = (VOS_UINT8)NAS_ERABM_GetEpsbLinkedEpsbId(ulEpsbId); } return PS_SUCC ; }
/***************************************************************************** Function Name : NAS_ERABM_SndRabmEmmResumeRsp Description : ESM模块回复ID_EMM_ERABM_RESUME_RSP消息 Input : EMM_ERABM_RSLT_TYPE_ENUM_UINT32 enRslt Output : None Return : VOS_VOID History : 1.lihong00150010 2011-05-03 Draft Enact *****************************************************************************/ VOS_VOID NAS_ERABM_SndRabmEmmResumeRsp ( EMM_ERABM_RSLT_TYPE_ENUM_UINT32 enRslt ) { EMM_ERABM_RESUME_RSP_STRU *pstRabmEmmResumeRsp = VOS_NULL_PTR; /*分配空间并检验分配是否成功*/ pstRabmEmmResumeRsp = (VOS_VOID*)NAS_ERABM_ALLOC_MSG(sizeof(EMM_ERABM_RESUME_RSP_STRU)); /*检测是否分配成功*/ if (VOS_NULL_PTR == pstRabmEmmResumeRsp) { /*打印异常信息*/ NAS_ERABM_ERR_LOG("NAS_ERABM_SndRabmEmmResumeRsp:ERROR:Alloc Msg fail!"); return ; } /*清空*/ NAS_ERABM_MEM_SET( NAS_ERABM_GET_MSG_ENTITY(pstRabmEmmResumeRsp), 0, NAS_ERABM_GET_MSG_LENGTH(pstRabmEmmResumeRsp)); /*填写消息头*/ NAS_ERABM_WRITE_EMM_MSG_HEAD(pstRabmEmmResumeRsp, ID_EMM_ERABM_RESUME_RSP); /*填写响应结果*/ pstRabmEmmResumeRsp->enRslt= enRslt; /*调用消息发送函数 */ NAS_ERABM_SND_MSG(pstRabmEmmResumeRsp); }
VOS_UINT32 CDS_ERABM_GetEpsbId ( VOS_UINT8 ucDrbId, VOS_UINT8 *pucEpsbId ) { VOS_UINT32 ulEpsbId = NAS_ERABM_NULL; if (VOS_NULL_PTR == pucEpsbId) { NAS_ERABM_ERR_LOG("CDS_ERABM_GetEpsbId:pucEpsbId is NULL!"); return PS_FAIL; } /* 获取DRB关联承载号 */ if (NAS_ERABM_SUCCESS != NAS_ERABM_GetEpsbIdByDrbId( ucDrbId, &ulEpsbId)) { NAS_ERABM_WARN_LOG("CDS_ERABM_GetEpsbId:NAS_ERABM_GetEpsbIdByDrbId failed!"); return PS_FAIL; } *pucEpsbId = (VOS_UINT8)ulEpsbId; return PS_SUCC; }
VOS_VOID NAS_ERABM_SndOmErabmTimerStatus( NAS_ERABM_TIMER_RUN_STA_ENUM_UINT32 enTimerStatus, NAS_ERABM_TIMER_NAME_ENUM_UINT8 enTimerId, VOS_UINT32 ulTimerRemainLen ) { NAS_ERABM_TIMER_INFO_STRU *pstMsg = VOS_NULL_PTR; pstMsg = (NAS_ERABM_TIMER_INFO_STRU*)NAS_ERABM_MEM_ALLOC(sizeof(NAS_ERABM_TIMER_INFO_STRU)); if (VOS_NULL_PTR == pstMsg) { NAS_ERABM_ERR_LOG("NAS_ERABM_SndOmErabmTimerStatus: mem alloc fail!."); return; } pstMsg->stMsgHeader.ulReceiverCpuId = VOS_LOCAL_CPUID; pstMsg->stMsgHeader.ulSenderPid = PS_PID_RABM; pstMsg->stMsgHeader.ulReceiverPid = PS_PID_RABM; pstMsg->stMsgHeader.ulLength = sizeof(NAS_ERABM_TIMER_INFO_STRU) - 20; pstMsg->stMsgHeader.ulMsgName = enTimerId + PS_MSG_ID_ERABM_TO_ERABM_OM_BASE; pstMsg->enTimerStatus = enTimerStatus; pstMsg->enTimerId = enTimerId; pstMsg->ulTimerRemainLen = ulTimerRemainLen; (VOS_VOID)LTE_MsgHook((VOS_VOID*)pstMsg); NAS_ERABM_MEM_FREE(pstMsg); }
VOS_VOID NAS_ERABM_SndRabmEmmReestReq ( VOS_UINT32 ulIsEmcType ) { EMM_ERABM_REEST_REQ_STRU *pstReestReq = VOS_NULL_PTR; /*分配空间和检测是否分配成功*/ pstReestReq = (VOS_VOID*)NAS_ERABM_ALLOC_MSG( sizeof(EMM_ERABM_REEST_REQ_STRU)); if ( VOS_NULL_PTR == pstReestReq ) { NAS_ERABM_ERR_LOG("NAS_ERABM_SndRabmEmmReestReq:ERROR:Alloc msg fail!" ); return; } /*清空*/ NAS_ERABM_MEM_SET(NAS_ERABM_GET_MSG_ENTITY(pstReestReq), NAS_ERABM_NULL,\ NAS_ERABM_GET_MSG_LENGTH(pstReestReq)); /*填写消息头*/ NAS_ERABM_WRITE_EMM_MSG_HEAD(pstReestReq, ID_EMM_ERABM_REEST_REQ); /* lihong00150010 emergency tau&service begin */ pstReestReq->ulIsEmcType = ulIsEmcType; /* lihong00150010 emergency tau&service end */ /* 调用消息发送函数 */ NAS_ERABM_SND_MSG(pstReestReq); }
/*lint -e961*/ VOS_VOID NAS_ERABM_SndErabmCdsSndBuffDataInd ( CDS_ERABM_SEND_BUFF_DATA_ALLOWED_TYPE_ENUM_UINT32 enSndBuffDataAllowedType ) { ERABM_CDS_SEND_BUFF_DATA_IND_STRU *pstSndBuffDataInd = VOS_NULL_PTR; /*分配空间和检测是否分配成功*/ pstSndBuffDataInd = (VOS_VOID*)NAS_ERABM_ALLOC_MSG(sizeof(ERABM_CDS_SEND_BUFF_DATA_IND_STRU)); if (VOS_NULL_PTR == pstSndBuffDataInd) { NAS_ERABM_ERR_LOG("NAS_ERABM_SndErabmCdsSndBuffDataInd:ERROR:Alloc msg fail!" ); return; } /*清空*/ NAS_ERABM_MEM_SET( NAS_ERABM_GET_MSG_ENTITY(pstSndBuffDataInd), NAS_ERABM_NULL, NAS_ERABM_GET_MSG_LENGTH(pstSndBuffDataInd)); /*填写消息头*/ NAS_ERABM_WRITE_CDS_MSG_HEAD(pstSndBuffDataInd,ID_ERABM_CDS_SEND_BUFF_DATA_IND); pstSndBuffDataInd->enSndBuffDataAllowedType = enSndBuffDataAllowedType; /* 调用消息发送函数*/ NAS_ERABM_SND_MSG(pstSndBuffDataInd); }
/***************************************************************************** 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); }
/***************************************************************************** Function Name : NAS_ERABM_RcvRabmEmmResumeInd Description : SM模块收到ID_EMM_ERABM_RESUME_IND处理函数 Input : EMM_ERABM_RESUME_IND_STRU *pRcvMsg Output : None Return : VOS_UINT32 History : 1.lihong00150010 2011-05-03 Draft Enact *****************************************************************************/ VOS_VOID NAS_ERABM_RcvRabmEmmResumeInd(const EMM_ERABM_RESUME_IND_STRU *pRcvMsg ) { (VOS_VOID)pRcvMsg; /* 设置状态为正常态 */ NAS_ERABM_SetLModeStatus(NAS_ERABM_L_MODE_STATUS_NORMAL); #if 0 /* 设置用户面模式为NULL */ if (PS_SUCC != UP_SetRanMode(RAN_MODE_LTE)) { NAS_ERABM_ERR_LOG("NAS_ERABM_RcvRabmEmmResumeInd: Update Ran Mode Failed."); } /*设置LTE模流控参数*/ R_ITF_SetLFlowLev(); #endif /*根据TFT和承载信息更新IP Filter到硬件加速器*/ if(PS_FAIL == NAS_ERABM_IpfConfigUlFilter()) { NAS_ERABM_ERR_LOG("NAS_ERABM_EsmMsgDistr: IPF Update IP Filter Failed."); } /*根据TFT和承载信息更新IP Filter到CDS*/ if(PS_FAIL == NAS_ERABM_CdsConfigUlFilter()) { NAS_ERABM_ERR_LOG("NAS_ERABM_EsmMsgDistr: CDS Update IP Filter Failed."); } #if 0 /* 配置下行TFT信息 */ if(PS_FAIL == NAS_ERABM_IpfConfigDlFilter()) { NAS_ERABM_ERR_LOG("NAS_ERABM_RcvRabmEmmResumeInd: Update DL IP Filter Failed."); } #endif /* 通知ETC解挂 */ NAS_ERABM_SndRabmTcResumeInd(); /* 回复EMM解挂成功 */ NAS_ERABM_SndRabmEmmResumeRsp(EMM_ERABM_RSLT_TYPE_SUCC); }
/*lint -e960*/ VOS_VOID NAS_ERABM_SndIpRabmDataInd ( VOS_UINT8 ucEpsbId, const VOS_UINT8 *pucIpMsg, VOS_UINT32 ulIpMsgLen ) { IP_RABM_DATA_IND_STRU *pstDataInd = VOS_NULL_PTR; VOS_UINT32 ulTmpLength = NAS_ERABM_NULL; /*根据空口消息的长度分配空间*/ if( NAS_ERABM_NULL == ulIpMsgLen) { NAS_ERABM_WARN_LOG("NAS_ERABM_SndIpRabmDataInd: WARNING: Msg Length is zero"); return ; } else if(ulIpMsgLen > NAS_ERABM_MIN_SND_MSG_LEN) { ulTmpLength = ulIpMsgLen - NAS_ERABM_MIN_SND_MSG_LEN ; pstDataInd = (VOS_VOID*)NAS_ERABM_ALLOC_MSG(sizeof(IP_RABM_DATA_IND_STRU) + ulTmpLength); } else/*如果长度小于NAS_ERABM_MIN_SND_MSG_LEN,分配的空间等于NAS_ERABM_MIN_SND_MSG_LEN*/ { pstDataInd = (VOS_VOID*)NAS_ERABM_ALLOC_MSG(sizeof(IP_RABM_DATA_IND_STRU)); } if (VOS_NULL_PTR == pstDataInd) { NAS_ERABM_ERR_LOG("NAS_ERABM_SndIpRabmDataInd:ERROR:Alloc msg fail!" ); return; } /*清空*/ NAS_ERABM_MEM_SET( NAS_ERABM_GET_MSG_ENTITY(pstDataInd), NAS_ERABM_NULL, NAS_ERABM_GET_MSG_LENGTH(pstDataInd)); /*填写消息头*/ NAS_ERABM_WRITE_IP_MSG_HEAD(pstDataInd, ID_IP_RABM_DATA_IND); /* 填写消息内容 */ pstDataInd->ucEpsbId = ucEpsbId; pstDataInd->stIpMsg.ulIpMsgSize = ulIpMsgLen; /*lint -e669*/ NAS_ERABM_MEM_CPY( pstDataInd->stIpMsg.aucIpMsg, pucIpMsg, ulIpMsgLen); /*lint +e669*/ /* 调用消息发送函数*/ NAS_ERABM_SND_MSG(pstDataInd); }
/***************************************************************************** Function Name : NAS_ERABM_RcvRabmTcRelReq Description : 收到TC模块REL REQ消息处理函数 Input : None Output : None Return : VOS_VOID History : 1.lihong00150010 2009-10-16 Draft Enact *****************************************************************************/ VOS_VOID NAS_ERABM_RcvRabmTcRelReq( VOS_VOID ) { VOS_UINT32 ulLoop = NAS_ERABM_NULL; /*打印进入该函数*/ NAS_ERABM_INFO_LOG("NAS_ERABM_RcvRabmTcRelReq is entered."); /* 通知CDS RAB RELEASE */ for (ulLoop = NAS_ERABM_MIN_EPSB_ID; ulLoop <= NAS_ERABM_MAX_EPSB_ID; ulLoop++) { if (NAS_ERABM_EPSB_ACTIVE == NAS_ERABM_GetEpsbStateInfo(ulLoop)) { /* 给CDS发送CDS_ERABM_RAB_RELEASE_IND */ NAS_ERABM_SndErabmCdsRabReleaseInd(ulLoop); } } /*释放所有资源,回到开机初始化后的状态*/ NAS_ERABM_ClearRabmResource(); /*根据TFT和承载信息更新IP Filter到硬件加速器*/ if(PS_FAIL == NAS_ERABM_IpfConfigUlFilter()) { NAS_ERABM_ERR_LOG("NAS_ERABM_EsmMsgDistr: IPF Update IP Filter Failed."); } /*根据TFT和承载信息更新IP Filter到CDS*/ if(PS_FAIL == NAS_ERABM_CdsConfigUlFilter()) { NAS_ERABM_ERR_LOG("NAS_ERABM_EsmMsgDistr: CDS Update IP Filter Failed."); } #if 0 /* 配置下行TFT信息 */ if(PS_FAIL == NAS_ERABM_IpfConfigDlFilter()) { NAS_ERABM_ERR_LOG("NAS_ERABM_RcvRabmEmmResumeInd: Update DL IP Filter Failed."); } #endif }
/***************************************************************************** Function Name : NAS_ERABM_RcvRabmTcActTestMode Description : 收到TC模块ACTIVATE TEST MODE消息处理函数 Input : None Output : None Return : VOS_VOID History : 1.lihong00150010 2009-10-16 Draft Enact *****************************************************************************/ VOS_VOID NAS_ERABM_RcvRabmTcActTestMode( VOS_VOID ) { if (NAS_ERABM_L_MODE_STATUS_NORMAL != NAS_ERABM_GetLModeStatus()) { NAS_ERABM_WARN_LOG("NAS_ERABM_RcvRabmTcActTestMode:Rabm is already suspended!"); return ; } /* 将模式设为环回模式 */ NAS_ERABM_SetMode(NAS_ERABM_MODE_TYPE_LB); NAS_ERABM_SetUlNdisFilterValidFlag(NAS_ERABM_UL_NDIS_FILTER_INVALID); if(PS_FAIL == NAS_ERABM_IpfConfigUlFilter()) { NAS_ERABM_ERR_LOG("NAS_ERABM_RcvRabmTcActTestMode: Update IP Filter Failed."); } }
/***************************************************************************** Function Name : NAS_ERABM_IsEmcService Description : 判断是否是紧急业务数据包 Input : ulEpsbId----------------承载号 Output : None Return : VOS_UINT32 History : 1.lihong00150010 2012-12-14 Draft Enact *****************************************************************************/ VOS_UINT32 NAS_ERABM_IsEmcService ( VOS_UINT8 ucEpsbId ) { if ((ucEpsbId < NAS_ERABM_MIN_EPSB_ID) || (ucEpsbId > NAS_ERABM_MAX_EPSB_ID)) { NAS_ERABM_ERR_LOG("NAS_ERABM_IsEmcService:EpsbId is illegal!"); return VOS_FALSE; } if (ESM_ERABM_BEARER_TYPE_EMERGENCY == NAS_ERABM_GetEpsbBearerType(ucEpsbId)) { return VOS_TRUE; } return VOS_FALSE; }
VOS_VOID NAS_ERABM_SndErabmCdsRabCreatInd( VOS_UINT32 ulEpsbId ) { #if (VOS_OS_VER != VOS_WIN32) CDS_ERABM_RAB_CREATE_IND_STRU *pstRabCreatInd = VOS_NULL_PTR; /*分配空间和检测是否分配成功*/ pstRabCreatInd = (VOS_VOID*)NAS_ERABM_ALLOC_MSG(sizeof(CDS_ERABM_RAB_CREATE_IND_STRU)); if (VOS_NULL_PTR == pstRabCreatInd) { NAS_ERABM_ERR_LOG("NAS_ERABM_SndErabmCdsRabCreatInd:ERROR:Alloc msg fail!" ); return; } /*清空*/ NAS_ERABM_MEM_SET( NAS_ERABM_GET_MSG_ENTITY(pstRabCreatInd), NAS_ERABM_NULL, NAS_ERABM_GET_MSG_LENGTH(pstRabCreatInd)); /* 赋值QCI */ pstRabCreatInd->enQci = NAS_ERABM_GetEpsbQCI(ulEpsbId); /*赋值 EpsbId及关联EPsbId */ pstRabCreatInd->ucRabId = (VOS_UINT8)ulEpsbId; if (ESM_ERABM_BEARER_TYPE_DEDICATED == NAS_ERABM_GetEpsbBearerType(ulEpsbId)) { pstRabCreatInd->ucLinkRabId = (VOS_UINT8)NAS_ERABM_GetEpsbLinkedEpsbId(ulEpsbId); } else { pstRabCreatInd->ucLinkRabId = pstRabCreatInd->ucRabId; } /*填写消息头*/ NAS_ERABM_WRITE_CDS_MSG_HEAD(pstRabCreatInd,ID_QOS_FC_ERABM_RAB_CREATE_IND); /* 调用消息发送函数*/ NAS_ERABM_SND_MSG(pstRabCreatInd); #endif }
VOS_VOID NAS_ERABM_SndRabmEmmRelReq( VOS_VOID) { EMM_ERABM_REL_REQ_STRU *pstRelReq = VOS_NULL_PTR; /*分配空间和检测是否分配成功*/ pstRelReq = (VOS_VOID*)NAS_ERABM_ALLOC_MSG(sizeof(EMM_ERABM_REL_REQ_STRU)); if ( VOS_NULL_PTR == pstRelReq ) { NAS_ERABM_ERR_LOG("NAS_ERABM_SndRabmEmmRelReq:ERROR:Alloc msg fail!" ); return; } NAS_ERABM_MEM_SET(NAS_ERABM_GET_MSG_ENTITY(pstRelReq), NAS_ERABM_NULL,\ NAS_ERABM_GET_MSG_LENGTH(pstRelReq)); /*填写消息头*/ NAS_ERABM_WRITE_EMM_MSG_HEAD(pstRelReq, ID_EMM_ERABM_REL_REQ); /* 调用消息发送函数*/ NAS_ERABM_SND_MSG(pstRelReq); }
VOS_VOID NAS_ERABM_SndRabmEmmDrbSetupInd( VOS_VOID ) { EMM_ERABM_DRB_SETUP_IND_STRU *pstDrbSetInd = VOS_NULL_PTR; /*分配空间和检测是否分配成功*/ pstDrbSetInd = (VOS_VOID*)NAS_ERABM_ALLOC_MSG( sizeof(EMM_ERABM_DRB_SETUP_IND_STRU)); if ( VOS_NULL_PTR == pstDrbSetInd ) { NAS_ERABM_ERR_LOG("NAS_ERABM_SndRabmEmmDrbSetupInd:ERROR:Alloc msg fail!" ); return; } /*清空*/ NAS_ERABM_MEM_SET(NAS_ERABM_GET_MSG_ENTITY(pstDrbSetInd), NAS_ERABM_NULL,\ NAS_ERABM_GET_MSG_LENGTH(pstDrbSetInd)); /*填写消息头*/ NAS_ERABM_WRITE_EMM_MSG_HEAD(pstDrbSetInd, ID_EMM_ERABM_DRB_SETUP_IND); /* 调用消息发送函数*/ NAS_ERABM_SND_MSG(pstDrbSetInd); }
/***************************************************************************** Function Name : NAS_ERABM_SndRabmTcResumeInd Description : ERABM模块向ETC发送ID_ETC_ERABM_RESUME_IND消息 Input : None Output : None Return : VOS_VOID History : 1.lihong00150010 2011-05-03 Draft Enact *****************************************************************************/ VOS_VOID NAS_ERABM_SndRabmTcResumeInd( VOS_VOID ) { ETC_ERABM_RESUME_IND_STRU *pstRabmTcResumeInd = VOS_NULL_PTR; /*分配空间并检验分配是否成功*/ pstRabmTcResumeInd = (VOS_VOID*)NAS_ERABM_ALLOC_MSG(sizeof(ETC_ERABM_RESUME_IND_STRU)); /*检测是否分配成功*/ if (VOS_NULL_PTR == pstRabmTcResumeInd) { /*打印异常信息*/ NAS_ERABM_ERR_LOG("NAS_ERABM_SndRabmTcResumeInd:ERROR:Alloc Msg fail!"); return ; } /*清空*/ NAS_ERABM_MEM_SET( NAS_ERABM_GET_MSG_ENTITY(pstRabmTcResumeInd), 0, NAS_ERABM_GET_MSG_LENGTH(pstRabmTcResumeInd)); /*填写消息头*/ NAS_ERABM_WRITE_TC_MSG_HEAD(pstRabmTcResumeInd, ID_ETC_ERABM_RESUME_IND); /*调用消息发送函数 */ NAS_ERABM_SND_MSG(pstRabmTcResumeInd); }
VOS_VOID NAS_ERABM_TimerStop( NAS_ERABM_TIMER_NAME_ENUM_UINT8 enTimerName ) { NAS_ERABM_START_TIMER_STRU *pstTimerInfo = VOS_NULL_PTR; VOS_UINT32 ulTimerRemainLen; /*如果ucTimerName对应的定时器处于启动状态,则停止;否则,忽略*/ pstTimerInfo = NAS_ERABM_GetRbTimer(enTimerName); if ( VOS_NULL_PTR == pstTimerInfo ) { NAS_ERABM_WARN_LOG("NAS_ERABM_TimerStop: pstStateTimer NULL."); return ; } if (VOS_NULL_PTR != pstTimerInfo->stHTimer) { /* 获取当前定时器的剩余时间 */ if (VOS_OK != VOS_GetRelTmRemainTime(&(pstTimerInfo->stHTimer), &ulTimerRemainLen )) { ulTimerRemainLen = 0; } /*关闭失败,则报警返回*/ if (VOS_OK != PS_STOP_REL_TIMER(&(pstTimerInfo->stHTimer))) { NAS_ERABM_ERR_LOG("NAS_ERABM_TimerStop: stop reltimer fail "); return; } /*更新定时器超时次数*/ pstTimerInfo->ucExpireTimes = 0; /*钩出当前的定时器信息 */ NAS_ERABM_SndOmErabmTimerStatus(NAS_ERABM_TIMER_STOPED, enTimerName, ulTimerRemainLen); /*根据定时器的不同类型,打印相应信息*/ switch (enTimerName) { case NAS_ERABM_WAIT_EPSB_ACT_TIMER: NAS_ERABM_NORM_LOG("NAS_ERABM_TimerStop:NORM:RABM TimerStop: NAS_ERABM_RB_WAIT_EPSB_ACT_TIMER"); break; case NAS_ERABM_WAIT_RB_REEST_TIMER: NAS_ERABM_NORM_LOG("NAS_ERABM_TimerStop:NORM:RABM TimerStop: NAS_ERABM_WAIT_RB_REEST_TIMER"); break; case NAS_ERABM_WAIT_RB_RESUME_TIMER: NAS_ERABM_NORM_LOG("NAS_ERABM_TimerStop:NORM:RABM TimerStop: NAS_ERABM_WAIT_RB_RESUME_TIMER"); break; case NAS_ERABM_WAIT_TC_FREE_BUFFER_TIMER: NAS_ERABM_NORM_LOG("NAS_ERABM_TimerStop:NORM:RABM TimerStop: NAS_ERABM_WAIT_TC_FREE_BUFFER_TIMER"); break; default: NAS_ERABM_ERR_LOG("NAS_ERABM_TimerStop:ERROR: stop unreasonable reltimer."); break; } } }
VOS_VOID NAS_ERABM_TimerStart ( VOS_UINT32 ulTimerLen, NAS_ERABM_TIMER_NAME_ENUM_UINT8 enTimerName, VOS_UINT32 ulTimerPara ) { NAS_ERABM_START_TIMER_STRU *pstTimerInfo = VOS_NULL_PTR; /*打印进入该函数*/ NAS_ERABM_INFO_LOG("NAS_ERABM_TimerStart is entered."); /*获取RABM实体中的定时器结构地址指针*/ pstTimerInfo = NAS_ERABM_GetRbTimer(enTimerName); if ( VOS_NULL_PTR == pstTimerInfo ) { NAS_ERABM_WARN_LOG("NAS_ERABM_TimerStart: pstStateTimer NULL."); return ; } /*判断定时器是否打开,打开则关闭*/ if (VOS_NULL_PTR != pstTimerInfo->stHTimer) { if (VOS_OK != PS_STOP_REL_TIMER(&(pstTimerInfo->stHTimer))) { NAS_ERABM_ERR_LOG("NAS_ERABM_TimerStart: start reltimer error1 "); return; } NAS_ERABM_LOG1("(TimerType) Timer not close!", (VOS_INT32)enTimerName); } if(NAS_ERABM_NULL == ulTimerLen) { NAS_ERABM_WARN_LOG("NAS_ERABM_TimerStart:WARN: TimerLen = 0"); return; } /* lihong00150010 emergency tau&service begin */ /*设定定时器LENGTH和NAME,打开失败则报警返回*/ if (VOS_OK != PS_START_REL_TIMER(&(pstTimerInfo->stHTimer),PS_PID_RABM, ulTimerLen,(VOS_UINT32)enTimerName, ulTimerPara, VOS_RELTIMER_NOLOOP)) { NAS_ERABM_WARN_LOG("NAS_ERABM_TimerStart:WARN: start reltimer error2"); return; } /* lihong00150010 emergency tau&service end */ /*钩出当前的定时器信息 */ NAS_ERABM_SndOmErabmTimerStatus(NAS_ERABM_TIMER_RUNNING, enTimerName, ulTimerLen); /*更新定时器开启信息和定时器类别*/ pstTimerInfo->enName = enTimerName; /*根据定时器的不同类型,打印相应信息*/ switch (enTimerName) { case NAS_ERABM_WAIT_EPSB_ACT_TIMER: NAS_ERABM_NORM_LOG("NAS_ERABM_TimerStart:NORM:RABM TimerStart: NAS_ERABM_RB_WAIT_EPSB_ACT_TIMER"); break; case NAS_ERABM_WAIT_RB_REEST_TIMER: NAS_ERABM_NORM_LOG("NAS_ERABM_TimerStart:NORM:RABM TimerStart: NAS_ERABM_WAIT_RB_REEST_TIMER"); break; case NAS_ERABM_WAIT_RB_RESUME_TIMER: NAS_ERABM_NORM_LOG("NAS_ERABM_TimerStart:NORM:RABM TimerStart: NAS_ERABM_WAIT_RB_RESUME_TIMER"); break; case NAS_ERABM_WAIT_TC_FREE_BUFFER_TIMER: NAS_ERABM_NORM_LOG("NAS_ERABM_TimerStart:NORM:RABM TimerStart: NAS_ERABM_WAIT_TC_FREE_BUFFER_TIMER"); break; default: NAS_ERABM_ERR_LOG("NAS_ERABM_TimerStart:ERROR: start unreasonable reltimer."); break; } }
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; } }
VOS_UINT32 CDS_ERABM_GetIpFragEpsbId ( VOS_UINT8 *pucEpsbId, TTF_MEM_ST *pstIpFrag, VOS_UINT32 ulIpFragLen ) { VOS_UINT8 *pucIpv4Data = VOS_NULL_PTR; VOS_UINT8 *pstDataAddr = VOS_NULL_PTR; VOS_UINT8 *pucIpv6Data = VOS_NULL_PTR; TTF_MEM_ST *pstIpFragTmp= pstIpFrag; VOS_UINT8 ucIpVersion = NAS_ERABM_NULL; VOS_UINT8 ucRslt = NAS_ERABM_NULL; VOS_UINT8 ucBearerIdTmp = NAS_ERABM_NULL; /* 输入参数合法性检测 */ if (VOS_NULL_PTR == pucEpsbId) { NAS_ERABM_ERR_LOG("CDS_ERABM_GetIpFragEpsbId:pucEpsbId is NULL!"); return PS_FAIL; } if (VOS_NULL_PTR == pstIpFragTmp) { NAS_ERABM_ERR_LOG("CDS_ERABM_GetIpFragEpsbId:pstIpFrag is NULL!"); return PS_FAIL; } if (NAS_ERABM_NULL == ulIpFragLen) { NAS_ERABM_ERR_LOG("CDS_ERABM_GetIpFragEpsbId:ulIpFragLen is zero!"); return PS_FAIL; } pstDataAddr = pstIpFragTmp->pData; /* 根据IP包头获取IP类型 */ ucIpVersion = NAS_ERABM_GetIpVersion(pstDataAddr); if (NAS_ERABM_IP_VERSION_4 == ucIpVersion) { /* 译码IPV4包头,存储源IPV4地址、目的IPV4地址,identifier */ pucIpv4Data = NAS_ERABM_GET_IP_HEADER_BUFFER(); NAS_ERABM_DecodeIpV4Data(pstDataAddr, (NAS_ERABM_IPV4_HEADER_STRU *)pucIpv4Data); /* 遍历所有缺省承载,查找源IP地址匹配的承载 */ ucRslt = NAS_ERABM_GetSrcIpv4MatchedDeftBearerId((NAS_ERABM_IPV4_HEADER_STRU *)pucIpv4Data, &ucBearerIdTmp); if (NAS_ERABM_SUCCESS == ucRslt) { *pucEpsbId = ucBearerIdTmp; return PS_SUCC; } *pucEpsbId = NAS_ERABM_IPF_INVALID_BEARER_ID; return PS_FAIL; } else { /* 译码IPV6包头,存储源IPV6地址 */ pucIpv6Data = NAS_ERABM_GET_IP_HEADER_BUFFER(); NAS_ERABM_DecodeIpV6Data(pstDataAddr, (NAS_ERABM_IPV6_HEADER_STRU *)pucIpv6Data); /* 遍历所有缺省承载,查找源IP地址匹配的承载 */ ucRslt = NAS_ERABM_GetSrcIpv6MatchedDeftBearerId( (NAS_ERABM_IPV6_HEADER_STRU *)pucIpv6Data, &ucBearerIdTmp); if (NAS_ERABM_SUCCESS == ucRslt) { *pucEpsbId = ucBearerIdTmp; return PS_SUCC; } *pucEpsbId = NAS_ERABM_IPF_INVALID_BEARER_ID; return PS_FAIL; } }