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 ;
}
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_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.");
    }
}
/*lint -e961*/
VOS_VOID  NAS_ERABM_TaskEntry( MsgBlock* pMsg )
{
    PS_MSG_HEADER_STRU       *pHeader = VOS_NULL_PTR;              /*定义消息头指针*/

    /* 判断入口参数是否合法*/
    if (VOS_NULL_PTR == pMsg)
    {
        /*报告错误消息*/
        NAS_ERABM_WARN_LOG("NAS_ERABM_TaskEntry:ERROR: No Msg!");
        return;
    }

    pHeader = (PS_MSG_HEADER_STRU *)pMsg;          /* 获取消息头指针*/

    NAS_ERABM_PrintRabmRevMsg(pHeader,NAS_COMM_GET_ESM_PRINT_BUF());

    /*判断接收到的消息,进行分发处理*/
    switch (pHeader->ulSenderPid)
    {
        /*如果是SM消息,调用SM分发函数*/
        case PS_PID_ESM:
            NAS_ERABM_EsmMsgDistr(pMsg);
            break;

        /*如果是EMM消息,调用EMM分发函数*/
        case PS_PID_MM:
            NAS_ERABM_EmmMsgDistr(pMsg);
            break;

        /*如果是RRC消息,调用RRC分发函数*/
        case PS_PID_ERRC:
            NAS_ERABM_RrcMsgDistr(pMsg);
            break;

        /*如果是Timer消息,调用Timer溢出分发函数*/
        case VOS_PID_TIMER:
            NAS_ERABM_TimerMsgDistr(pMsg);
            break;

        /*如果是APP消息,调用APP分发函数*/
        case PS_PID_APP:
            NAS_ERABM_AppMsgDistr(pMsg);
            break;

        case PS_PID_TC:
            NAS_ERABM_TcMsgDistr(pMsg);
            break;
        case UEPS_PID_CDS:
            NAS_ERABM_CdsMsgDistr(pMsg);
            break;
        /*发送对象错误,报警*/
        default:
            NAS_ERABM_LOG1("NAS_ERABM_TaskEntry:NORM: Error SenderPid :",(VOS_INT32)pHeader->ulSenderPid);
            break;
    }
}
/*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_SetEmmSrState
 Description     : 设置Service流程发起标识
 Input           : None
 Output          : None
 Return          : VOS_VOID

 History         :
    1.sunbing49683      2010-9-16  Draft Enact

*****************************************************************************/
VOS_VOID  NAS_ERABM_SetEmmSrState( NAS_ERABM_SERVICE_STATE_ENUM_UINT32 enSrState )
{

    VOS_INT32     intLockLevel;

    if(enSrState >= NAS_ERABM_SERVICE_STATE_BUTT )
    {
        NAS_ERABM_WARN_LOG("NAS_ERABM_SetEmmSrState: Para is err.");
        return;
    }

    intLockLevel = VOS_SplIMP();

    g_enERabmSrState = enSrState;

    VOS_Splx(intLockLevel);

}
/*****************************************************************************
 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.");
    }
}
/*lint -e961*/
VOS_VOID NAS_ERABM_TcMsgDistr( VOS_VOID *pRcvMsg )
{
    PS_MSG_HEADER_STRU         *pEmmMsg = VOS_NULL_PTR;

    pEmmMsg = (PS_MSG_HEADER_STRU*)pRcvMsg;

    /*打印进入该函数*/
    NAS_ERABM_INFO_LOG("NAS_ERABM_TcMsgDistr is entered.");

    /*根据消息名,调用相应的消息处理函数*/
    switch (pEmmMsg->ulMsgName)
    {
        /*如果收到的是ID_ETC_ERABM_ACTIVATE_TEST_MODE消息*/
        case ID_ETC_ERABM_ACTIVATE_TEST_MODE:
            NAS_ERABM_RcvRabmTcActTestMode();
            break;

        /*如果收到的是ID_ETC_ERABM_DEACTIVATE_TEST_MODE消息*/
        case ID_ETC_ERABM_DEACTIVATE_TEST_MODE:
            NAS_ERABM_RcvRabmTcDeactTestMode();
            break;

        /*如果收到的是ID_ETC_ERABM_REL_REQ消息*/
        case ID_ETC_ERABM_REL_REQ:
            NAS_ERABM_RcvRabmTcRelReq();
            break;

        /*如果收到的是ID_ETC_ERABM_SUSPEND_RSP消息*/
        case ID_ETC_ERABM_SUSPEND_RSP:
            NAS_ERABM_NORM_LOG("NAS_ERABM_TcMsgDistr:receive ID_ETC_ERABM_SUSPEND_RSP!");
            break;

        /*如果收到的是ID_ETC_ERABM_RESUME_RSP消息*/
        case ID_ETC_ERABM_RESUME_RSP:
            NAS_ERABM_NORM_LOG("NAS_ERABM_TcMsgDistr:receive ID_ETC_ERABM_RESUME_RSP!");
            break;

        default:
            NAS_ERABM_WARN_LOG("NAS_ERABM_TcMsgDistr:WARNING:TC->RABM Message name non-existent!");
            break;
    }
}
VOS_VOID NAS_ERABM_EmmMsgDistr( VOS_VOID *pRcvMsg )
{
    PS_MSG_HEADER_STRU         *pEmmMsg = VOS_NULL_PTR;

    pEmmMsg = (PS_MSG_HEADER_STRU*)pRcvMsg;

    /*打印进入该函数*/
    NAS_ERABM_INFO_LOG("NAS_ERABM_EmmMsgDistr is entered.");

    /*根据消息名,调用相应的消息处理函数*/
    switch (pEmmMsg->ulMsgName)
    {
        /*如果收到的是EMM_ERABM_REEST_IND消息,调用NAS_ERABM_RcvRabmEmmReest_Ind函数*/
        case ID_EMM_ERABM_REEST_IND:
            NAS_ERABM_RcvRabmEmmReestInd((EMM_ERABM_REEST_IND_STRU*)pRcvMsg);
            break;

        /*如果收到的是EMM_ERABM_REL_IND消息,调用NAS_ERABM_RcvRabmEmmRelInd函数*/
        case ID_EMM_ERABM_REL_IND:
            NAS_ERABM_RcvRabmEmmRelInd();
            break;

        case ID_EMM_ERABM_RRC_CON_REL_IND:
            NAS_ERABM_RcvRabmEmmRrcConRelInd();
            break;

        case ID_EMM_ERABM_SUSPEND_IND:
            NAS_ERABM_RcvRabmEmmSuspendInd( (EMM_ERABM_SUSPEND_IND_STRU *) pRcvMsg );
            break;

        case ID_EMM_ERABM_RESUME_IND:
            NAS_ERABM_RcvRabmEmmResumeInd( (EMM_ERABM_RESUME_IND_STRU *) pRcvMsg );
            break;

        default:
            NAS_ERABM_WARN_LOG("NAS_ERABM_EmmMsgDistr:WARNING:EMM->RABM Message name non-existent!");
            break;
    }
}
Ejemplo n.º 10
0
VOS_VOID NAS_ERABM_CdsMsgDistr( VOS_VOID *pRcvMsg )
{
    PS_MSG_HEADER_STRU                 *pSmMsg;

    pSmMsg = (PS_MSG_HEADER_STRU*)pRcvMsg;

    /*打印进入该函数*/
    NAS_ERABM_INFO_LOG("NAS_ERABM_CdsMsgDistr is entered.");

    /*根据消息名,调用相应的消息处理函数*/
    switch (pSmMsg->ulMsgName)
    {
        /*如果收到的是CDS_ERABM_SERVICE_NOTIFY消息,调用NAS_ERABM_RcvCdsErabmServiceNotify函数*/
        case ID_CDS_ERABM_SERVICE_NOTIFY:
            NAS_ERABM_RcvCdsErabmServiceNotify((CDS_ERABM_SERVICE_NOTIFY_STRU *) pRcvMsg);
            break;

        default:
            NAS_ERABM_WARN_LOG("NAS_ERABM_CdsMsgDistr:WARNING:CDS->ERABM Message name non-existent!");
            break;
    }

    return;
}
VOS_VOID NAS_ERABM_PrintRabmRevMsg
(
    const PS_MSG_HEADER_STRU           *pstMsg,
    VOS_CHAR                           *pcBuff
)
{
    VOS_INT32                           ilOutPutLenHead     = 0;
    VOS_INT32                           ilOutPutLen         = 0;
    VOS_UINT16                          usTotalLen          = 0;

    NAS_COMM_nsprintf(pcBuff,
                     usTotalLen,
                     "NAS RABM Receive Message:",
                     &ilOutPutLen);

    if ( 0 == ilOutPutLen )
    {
        NAS_ERABM_WARN_LOG("NAS_ERABM_PrintRabmRevMsg, Print receive msg header exception.");
        return ;
    }

    usTotalLen += (VOS_UINT16)ilOutPutLen;

    /* 打印各个PID的消息 */
    switch ( pstMsg->ulSenderPid )
    {
        case PS_PID_ESM:
            NAS_COMM_nsprintf(pcBuff,
                             usTotalLen,
                             "ESM-->RABM\t",
                            &ilOutPutLenHead);

            usTotalLen += (VOS_UINT16)ilOutPutLenHead;

            ilOutPutLen = NAS_COMM_PrintEsmRabmMsg(pcBuff,
                                              usTotalLen,
                                              pstMsg);

            break;

        case PS_PID_MM:
            NAS_COMM_nsprintf(pcBuff,
                             usTotalLen,
                             "MM-->RABM\t",
                            &ilOutPutLenHead);

            usTotalLen += (VOS_UINT16)ilOutPutLenHead;

            ilOutPutLen = NAS_COMM_PrintMmRabmMsg(pcBuff,
                                             usTotalLen,
                                             pstMsg->ulMsgName);

            break;

        case PS_PID_ERRC:
            NAS_COMM_nsprintf(pcBuff,
                             usTotalLen,
                             "RRC-->RABM\t",
                            &ilOutPutLenHead);

            usTotalLen += (VOS_UINT16)ilOutPutLenHead;

            ilOutPutLen = NAS_ERABM_PrintRabmRrcMsg(pcBuff,
                                              usTotalLen,
                                              pstMsg);

            break;

        case PS_PID_OM  :
            NAS_COMM_nsprintf(pcBuff,
                             usTotalLen,
                             "APP(OM)-->RABM\t",
                            &ilOutPutLenHead);

            usTotalLen += (VOS_UINT16)ilOutPutLenHead;

            ilOutPutLen = NAS_ERABM_PrintRabmAppMsg(pcBuff,
                                              usTotalLen,
                                              pstMsg->ulMsgName);
            break;

        case PS_PID_TC  :
            NAS_COMM_nsprintf(pcBuff,
                             usTotalLen,
                             "TC-->RABM\t",
                            &ilOutPutLenHead);

            usTotalLen += (VOS_UINT16)ilOutPutLenHead;

            ilOutPutLen = NAS_COMM_PrintRabmTcMsg(pcBuff,
                                             usTotalLen,
                                             pstMsg->ulMsgName);
            break;


        case VOS_PID_TIMER  :
            NAS_COMM_nsprintf(pcBuff,
                             usTotalLen,
                             "TIMER-->RABM\t",
                            &ilOutPutLenHead);

            usTotalLen += (VOS_UINT16)ilOutPutLenHead;

            ilOutPutLen = NAS_ERABM_PrintRabmTimer(pcBuff,
                                            usTotalLen,
                                           ((REL_TIMER_MSG *)(VOS_VOID *) pstMsg)->ulPara);
            break;

        case UEPS_PID_CDS  :
            NAS_COMM_nsprintf(  pcBuff,
                                usTotalLen,
                                "CDS-->RABM\t",
                                &ilOutPutLenHead);

            usTotalLen += (VOS_UINT16)ilOutPutLenHead;

            ilOutPutLen = NAS_ERABM_PrintRabmCdsMsg(    pcBuff,
                                                        usTotalLen,
                                                        pstMsg->ulMsgName);
            break;
        default:
            NAS_ERABM_LOG2("NAS_ERABM_PrintRabmRevMsg,Invalid Pid, MsgId: ",
                          pstMsg->ulSenderPid,
                          pstMsg->ulMsgName);

            return ;
    }

    if ( 0 == ilOutPutLen )
    {
        NAS_ERABM_LOG2("NAS_ERABM_PrintRabmRevMsg, print return zero length.SenderPid, MsgId: ",
                      pstMsg->ulSenderPid,
                      pstMsg->ulMsgName);
        return;
    }

    usTotalLen += (VOS_UINT16)ilOutPutLen;

    NAS_COMM_Print(pcBuff, usTotalLen);

    return ;

}
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;
    }
}
VOS_VOID NAS_ERABM_PrintRabmSendMsg
(
    const PS_MSG_HEADER_STRU           *pstMsg,
    VOS_CHAR                           *pcBuff
)

{
    VOS_INT32                           ilOutPutLenHead     = 0;
    VOS_INT32                           ilOutPutLen         = 0;
    VOS_UINT16                          usTotalLen          = 0;

    NAS_COMM_nsprintf(pcBuff,
                     usTotalLen,
                     "NAS RABM Send Message:",
                     &ilOutPutLen);

    if ( 0 == ilOutPutLen )
    {
        NAS_ERABM_WARN_LOG("NAS_ERABM_PrintRabmSendMsg, Print send msg header exception.");
        return ;
    }

    usTotalLen += (VOS_UINT16)ilOutPutLen;


    /* 打印各个PID的消息 */
    switch ( pstMsg->ulReceiverPid )
    {
        case PS_PID_ESM :
            NAS_COMM_nsprintf(pcBuff,
                             usTotalLen,
                             "RABM-->ESM\t",
                            &ilOutPutLenHead);

            usTotalLen += (VOS_UINT16)ilOutPutLenHead;

            ilOutPutLen = NAS_COMM_PrintEsmRabmMsg(pcBuff,
                                              usTotalLen,
                                              pstMsg);
            break;

        case PS_PID_MM :
            NAS_COMM_nsprintf(pcBuff,
                             usTotalLen,
                             "RABM-->MM\t",
                            &ilOutPutLenHead);

            usTotalLen += (VOS_UINT16)ilOutPutLenHead;

            ilOutPutLen = NAS_COMM_PrintMmRabmMsg(
                                             pcBuff,
                                             usTotalLen,
                                             pstMsg->ulMsgName);
            break;

        case PS_PID_ERRC :
            NAS_COMM_nsprintf(pcBuff,
                             usTotalLen,
                             "RABM-->RRC\t",
                            &ilOutPutLenHead);

            usTotalLen += (VOS_UINT16)ilOutPutLenHead;

            ilOutPutLen = NAS_ERABM_PrintRabmRrcMsg(pcBuff,
                                              usTotalLen,
                                              pstMsg);
            break;

        case PS_PID_OM  :
            NAS_COMM_nsprintf(pcBuff,
                             usTotalLen,
                             "RABM-->APP(OM)\t",
                            &ilOutPutLenHead);

            usTotalLen += (VOS_UINT16)ilOutPutLenHead;

            ilOutPutLen = NAS_ERABM_PrintRabmAppMsg(pcBuff,
                                              usTotalLen,
                                              pstMsg->ulMsgName);
            break;

        case PS_PID_TC  :
            NAS_COMM_nsprintf(pcBuff,
                             usTotalLen,
                             "RABM-->TC\t",
                            &ilOutPutLenHead);

            usTotalLen += (VOS_UINT16)ilOutPutLenHead;

            ilOutPutLen = NAS_COMM_PrintRabmTcMsg(pcBuff,
                                              usTotalLen,
                                              pstMsg->ulMsgName);
            break;
        case UEPS_PID_CDS  :
            NAS_COMM_nsprintf(  pcBuff,
                                usTotalLen,
                                "RABM-->CDS\t",
                                &ilOutPutLenHead);

            usTotalLen += (VOS_UINT16)ilOutPutLenHead;

            ilOutPutLen = NAS_ERABM_PrintRabmCdsMsg(    pcBuff,
                                                        usTotalLen,
                                                        pstMsg->ulMsgName);
            break;
        default:
            NAS_ERABM_LOG2("NAS_ERABM_PrintRabmSendMsg,Invalid Pid, MsgId: ",
                          pstMsg->ulReceiverPid,
                          pstMsg->ulMsgName);
            return ;
    }

    if ( 0 == ilOutPutLen )
    {
        NAS_ERABM_LOG2("NAS_ERABM_PrintRabmSendMsg, print return zero length. ReceiverPid, MsgId: ",
                      pstMsg->ulReceiverPid,
                      pstMsg->ulMsgName);
        return;
    }

    usTotalLen += (VOS_UINT16)ilOutPutLen;

    NAS_COMM_Print(pcBuff,usTotalLen);

    return ;

}
/*lint -e961*/
VOS_VOID  NAS_ERABM_RcvRabmEmmReestInd(const EMM_ERABM_REEST_IND_STRU *pRcvMsg )
{
    if (NAS_ERABM_L_MODE_STATUS_NORMAL != NAS_ERABM_GetLModeStatus())
    {
        NAS_ERABM_WARN_LOG("NAS_ERABM_RcvRabmEmmReestInd:Rabm is already suspended!");
        return ;
    }

    switch(pRcvMsg->enReEstState)
    {
        /*case EMM_ERABM_REEST_STATE_SUCC:*/
        case EMM_ERABM_REEST_STATE_FAIL:

            /*打印进入该函数*/
            NAS_ERABM_LOG1("NAS_ERABM_RcvRabmEmmReestInd: receive Emm Reset result: .",
                          pRcvMsg->enReEstState);
            /*SERVICE流程结束*,停止定时器*/
            NAS_ERABM_TimerStop(NAS_ERABM_WAIT_RB_REEST_TIMER);
            NAS_ERABM_SetEmmSrState(NAS_ERABM_SERVICE_STATE_TERMIN);
            /* 如果在正常模式下 */
            if (NAS_ERABM_MODE_TYPE_NORMAL == NAS_ERABM_GetMode())
            {
                /* 通知L2释放缓存的数据包 */
                /*APPITF_FreeAllofRabmBuf();*/

                /* 通知CDS释放缓存的数据包 */
                NAS_ERABM_SndErabmCdsFreeBuffDataInd();

                /* 清除上行数据阻塞标志*/
                NAS_ERABM_SetUpDataPending(EMM_ERABM_NO_UP_DATA_PENDING);
            }
            else if (NAS_ERABM_TIMER_STATE_STOPED == NAS_ERABM_IsTimerRunning(NAS_ERABM_WAIT_TC_FREE_BUFFER_TIMER))
            /*环回模式下不清理缓存,保持原上行数据Pending状态*/
            {
                NAS_ERABM_INFO_LOG("NAS_ERABM_RcvRabmEmmReestInd: NAS_ERABM_WAIT_TC_FREE_BUFFER_TIMER start.");
                /* lihong00150010 emergency tau&service begin */
                NAS_ERABM_TimerStart(   NAS_ERABM_WAIT_TC_FREE_BUFFER_LENGTH,
                                        NAS_ERABM_WAIT_TC_FREE_BUFFER_TIMER,
                                        NAS_ERABM_WAIT_TC_FREE_BUFFER_TIMER);
            }   /* lihong00150010 emergency tau&service end */
            else
            {
                NAS_ERABM_INFO_LOG("NAS_ERABM_RcvRabmEmmReestInd: NAS_ERABM_WAIT_TC_FREE_BUFFER_TIMER is running.");
            }
            break;

        case EMM_ERABM_REEST_STATE_INITIATE:

            /*打印进入该函数*/
            NAS_ERABM_INFO_LOG("NAS_ERABM_RcvRabmEmmReestInd: receive EMM_ERABM_REEST_STATE_INITIATE .");
            /*SERVICE流程启动,启动定时器*/
            if (NAS_ERABM_SERVICE_STATE_TERMIN == NAS_ERABM_GetEmmSrState())
            {/* lihong00150010 emergency tau&service begin */
                NAS_ERABM_TimerStart(   NAS_ERABM_WAIT_RB_REEST_LENGTH,
                                        NAS_ERABM_WAIT_RB_REEST_TIMER,
                                        VOS_FALSE);
                NAS_ERABM_SetEmmSrState(NAS_ERABM_SERVICE_STATE_INIT);
            }/* lihong00150010 emergency tau&service end */
            break;

        default:
            NAS_ERABM_WARN_LOG("NAS_ERABM_RcvRabmEmmReestInd:WARNNING: EstState illegal!");
            break;
    }
}