VOS_VOID NAS_RABM_RcvSmBearerActivateInd( SM_RABM_BEARER_ACTIVATE_IND_STRU *pstSmBearerActivateInd ) { RABM_ENTITY_PS_STRU *pstPsEnt; VOS_UINT8 ucEntId; /* 获取PS域RABM实体指针 */ ucEntId = (VOS_UINT8)(pstSmBearerActivateInd->ulNsapi - RABM_NSAPI_OFFSET); pstPsEnt = NAS_RABM_GetWPsEntAddr(ucEntId); /* 更新QOS */ pstPsEnt->QoS.ulQosLength = pstSmBearerActivateInd->stQos.ulLength; PS_MEM_CPY(pstPsEnt->QoS.aucQosValue, pstSmBearerActivateInd->stQos.aucQosValue, NAS_RABM_MAX_QOS_LEN); /* 更新PPP标识 */ pstPsEnt->ucPppFlg = RABM_SM_IP_PROT; /* 创建RAB_MAP实体 */ NAS_RABM_CreateRabMapEntity((VOS_UINT8)pstSmBearerActivateInd->ulNsapi, (VOS_UINT8)pstSmBearerActivateInd->ulLinkdNsapi, (VOS_UINT8)pstSmBearerActivateInd->ulNsapi); /* 更新RABM状态至挂起状态 */ RABM_SetWState(ucEntId, RABM_DATA_TRANSFER_STOP); return; }
VOS_VOID NAS_RabmSmPdpActivateIndMsg( VOS_VOID *pMsg ) { RABMSM_ACTIVATE_IND_STRU *pstPdpActivateIndMsg; RABM_NSAPI_ENUM NsapiIndex; QCI_TYPE_ENUM_UINT8 enQci; pstPdpActivateIndMsg = ( RABMSM_ACTIVATE_IND_STRU * )pMsg; if ( ( pstPdpActivateIndMsg->ulNsapi < RABM_MIN_NSAPI_NUMBER ) || ( pstPdpActivateIndMsg->ulNsapi > RABM_MAX_NSAPI_NUMBER ) ) { /*打印警告信息---入口消息非法:*/ RABM_LOG_WARNING( "NAS_RabmSmPdpActivateIndMsg:WARNING:The NSAPI item of the Entry Parameter is BEYOND range!" ); return; } if ( ( RABMSM_ACT_MSG_1 != pstPdpActivateIndMsg->ulActMsgType ) && ( RABMSM_ACT_MSG_2 != pstPdpActivateIndMsg->ulActMsgType ) ) { /*打印警告信息---入口消息中消息的标识非法:*/ RABM_LOG1_WARNING( "NAS_RabmSmPdpActivateIndMsg:WARNING:The MsgType item of the Entry Parameter is ERROR!: NSAPI:", (VOS_INT32)(pstPdpActivateIndMsg->ulNsapi) ); return; } NsapiIndex = ( RABM_NSAPI_ENUM )( pstPdpActivateIndMsg->ulNsapi - RABM_2G_NSAPI_OFFSET ); switch ( gastRabm2GEntity[NsapiIndex].State ) /*该NSAPI所对应的状态*/ { case RABM_2G_NULL: if ( RABMSM_ACT_MSG_1 == pstPdpActivateIndMsg->ulActMsgType ) { /*打印流程信息---收到第一条PDP激活消息:*/ RABM_LOG1_NORMAL( "NAS_RabmSmPdpActivateIndMsg:NORMAL:RECEIVE The FIRST PdpActivateInd Msg: NSAPI:", (VOS_INT32)(pstPdpActivateIndMsg->ulNsapi) ); /*获取ucPppFlg:*/ if( RABM_SM_PPP_PROT == pstPdpActivateIndMsg->ulPppFlag ) { gastRabm2GEntity[NsapiIndex].ucPppFlg = RABM_SM_PPP_PROT; } else { gastRabm2GEntity[NsapiIndex].ucPppFlg = RABM_SM_IP_PROT; } return; } if ((RABMSM_ACT_MSG_2 == pstPdpActivateIndMsg->ulActMsgType) && (VOS_TRUE == NAS_RABM_GetDataSuspendFlg())) { /*打印流程信息---状态切换:*/ RABM_LOG1_NORMAL( "STATE RABM_2G_NULL state CHANGE TO RABM_DATA_TRANS_STOP state: NSAPI:", (VOS_INT32)(pstPdpActivateIndMsg->ulNsapi) ); /*将该NSAPI的状态置为RABM_DATA_TRANS_STOP:*/ RABM_SetGState(NsapiIndex, RABM_DATA_TRANS_STOP); } else { /*启动Rabm.act.req.T1定时器:*/ NAS_RabmStartTimer( ( RABM_TIMER_NAME_ENUM )NsapiIndex, RABM_TIMER_PARA_ACT_REQ_T1 ); /*打印流程信息---启动了Rabm.act.req.T1定时器:*/ RABM_LOG1_NORMAL( "NAS_RabmSmPdpActivateIndMsg:NORMAL:Start Rabm.act.req.T1 Timer SUCCESS: NSAPI:", (VOS_INT32)(pstPdpActivateIndMsg->ulNsapi) ); /*将该NSAPI的状态置为RABM_NSAPI_OK_TRANSMODE_NO:*/ RABM_SetGState(NsapiIndex, RABM_NSAPI_OK_TRANSMODE_NO); /*打印流程信息---状态切换:*/ RABM_LOG1_NORMAL( "STATE RABM_2G_NULL state CHANGE TO RABM_NSAPI_OK_TRANSMODE_NO state: NSAPI:", (VOS_INT32)(pstPdpActivateIndMsg->ulNsapi) ); } gastRabm2GEntity[NsapiIndex].stQos.ulQosLength = pstPdpActivateIndMsg->Qos.ulLength; PS_MEM_CPY(gastRabm2GEntity[NsapiIndex].stQos.aucQosValue, pstPdpActivateIndMsg->Qos.aucQosValue, NAS_RABM_MAX_QOS_LEN); /*创建RAB_MAP映射实体*/ NAS_RABM_CreateRabMapEntity((VOS_UINT8)(pstPdpActivateIndMsg->ulNsapi), (VOS_UINT8)(pstPdpActivateIndMsg->ulLinkdNsapi), (VOS_UINT8)(pstPdpActivateIndMsg->ulNsapi)); /* 给CDS发送消息通知CDS QOS信息 */ enQci = NAS_RABM_GetQciFromQos(gastRabm2GEntity[NsapiIndex].stQos.ulQosLength, gastRabm2GEntity[NsapiIndex].stQos.aucQosValue); NAS_RABM_SndCdsQosFcRabCreateInd(NsapiIndex + RABM_NSAPI_OFFSET, enQci); break; case RABM_NSAPI_OK_TRANSMODE_NO: case RABM_DATA_TRANS_READY: case RABM_ROUT_AREA_UPDATE: case RABM_DATA_TRANS_STOP: /*激活此四种非空状态下的NSAPI,则只进行QoS的更新,故处理方式一样*/ if ( RABMSM_ACT_MSG_1 == pstPdpActivateIndMsg->ulActMsgType ) { /*打印流程信息---收到第一条PDP激活消息:*/ RABM_LOG1_NORMAL( "NAS_RabmSmPdpActivateIndMsg:NORMAL:RECEIVE The FIRST PdpActivateInd Msg: NSAPI:", (VOS_INT32)(pstPdpActivateIndMsg->ulNsapi) ); return; } /*打印流程信息---此时该NSAPI已激活,故更新Qos:*/ RABM_LOG1_NORMAL( "NAS_RabmSmPdpActivateIndMsg:NORMAL:This NSAPI has been Activated,so UPDATE the QoS: NSAPI:", (VOS_INT32)(pstPdpActivateIndMsg->ulNsapi) ); gastRabm2GEntity[NsapiIndex].stQos.ulQosLength = pstPdpActivateIndMsg->Qos.ulLength; PS_MEM_CPY(gastRabm2GEntity[NsapiIndex].stQos.aucQosValue, pstPdpActivateIndMsg->Qos.aucQosValue, NAS_RABM_MAX_QOS_LEN); break; default: /*打印出错信息---该NSAPI的状态字段出错:*/ RABM_LOG1_ERROR( "NAS_RabmSmPdpActivateIndMsg:ERROR:This NSAPI's state is WRONG!: NSAPI:", (VOS_INT32)(pstPdpActivateIndMsg->ulNsapi) ); break; } return; }