VOS_VOID NAS_RABM_RcvSmBearerDeactivateInd( SM_RABM_BEARER_DEACTIVATE_IND_STRU *pstSmBearerDeactivateInd ) { VOS_UINT8 ucEntId; /* 获取PS域RABM实体指针 */ ucEntId = (VOS_UINT8)(pstSmBearerDeactivateInd->ulNsapi - RABM_NSAPI_OFFSET); if (NAS_MML_NET_RAT_TYPE_GSM == NAS_RABM_GetCurrentSysMode()) { /* G实体状态置为RABM_2G_NULL */ RABM_SetGState((RABM_NSAPI_ENUM)ucEntId, RABM_2G_NULL); /* 清除G实体信息 */ NAS_RABM_ClearRabmGPsEnt(ucEntId); } else { /* W实体状态置为RABM_NULL */ RABM_SetWState(ucEntId, RABM_NULL); /* 清除G实体信息 */ NAS_RABM_ClearRabmWPsEnt(ucEntId); } /* 删除RAB_MAP实体 */ RABM_DelRabMap((VOS_UINT8)pstSmBearerDeactivateInd->ulNsapi); }
VOS_VOID NAS_RabmSmPdpDeactivateIndMsg( VOS_VOID *pMsg ) { VOS_UINT8 ucLoop; RABM_NSAPI_ENUM NsapiIndex; RABMSM_DEACTIVATE_IND_STRU *pstPdpDeactiveIndMsg; pstPdpDeactiveIndMsg = ( RABMSM_DEACTIVATE_IND_STRU * )pMsg; if ( pstPdpDeactiveIndMsg->ulDeactiveNum > RABM_2G_MAX_ENT_NUM ) { RABM_LOG_WARNING( "NAS_RabmSmPdpDeactivateIndMsg:WARNING:The DeactiveNum item of the Entry Parameter is BEYOND range!" ); return; } for ( ucLoop = 0; ucLoop < pstPdpDeactiveIndMsg->ulDeactiveNum; ucLoop++ )/*遍历消息中指示的需去激活的NSAPI的个数*/ { if ( ( pstPdpDeactiveIndMsg->aulNsapiList[ucLoop] < RABM_MIN_NSAPI_NUMBER ) || ( pstPdpDeactiveIndMsg->aulNsapiList[ucLoop] > RABM_MAX_NSAPI_NUMBER ) ) { /*打印警告信息---消息中的NSAPI不在范围之内:*/ RABM_LOG1_WARNING( "NAS_RabmSmPdpDeactivateIndMsg:WARNING:The NSAPI item of the Entry Parameter is BEYOND range!: NSAPI:", (VOS_INT32)(pstPdpDeactiveIndMsg->aulNsapiList[ucLoop]) ); continue; } NsapiIndex = ( RABM_NSAPI_ENUM )( pstPdpDeactiveIndMsg->aulNsapiList[ucLoop] - RABM_2G_NSAPI_OFFSET ); switch ( gastRabm2GEntity[NsapiIndex].State ) /*该NSAPI所对应的状态*/ { case RABM_2G_NULL: /*打印流程信息---状态不变:*/ RABM_LOG1_NORMAL( "STATE RABM_2G_NULL state keep the same: NSAPI:", (VOS_INT32)(pstPdpDeactiveIndMsg->aulNsapiList[ucLoop]) ); break; case RABM_NSAPI_OK_TRANSMODE_NO: if ( RABM_ACT_REQ_T1_ON == gaRabmActReqT1Switch[NsapiIndex] ) /*若打开了Rabm.act.req.T1定时器*/ { /*关闭Rabm.act.req.T1定时器:*/ NAS_RabmStopTimer( ( RABM_TIMER_NAME_ENUM )NsapiIndex, RABM_TIMER_PARA_ACT_REQ_T1 ); } /*将该NSAPI的状态置为RABM_2G_NULL:*/ RABM_SetGState(NsapiIndex, RABM_2G_NULL); /*打印流程信息---状态切换:*/ RABM_LOG1_NORMAL( "STATE RABM_NSAPI_OK_TRANSMODE_NO state CHANGE TO RABM_2G_NULL state: NSAPI:", (VOS_INT32)(pstPdpDeactiveIndMsg->aulNsapiList[ucLoop]) ); /*清空QoS:*/ gastRabm2GEntity[NsapiIndex].stQos.ulQosLength = 0; PS_MEM_SET(gastRabm2GEntity[NsapiIndex].stQos.aucQosValue, 0x00, sizeof(gastRabm2GEntity[NsapiIndex].stQos.aucQosValue)); break; case RABM_ROUT_AREA_UPDATE: if ( RABM_NO == NAS_RabmQueryRAUState( NsapiIndex ) ) { if ( RABM_ROUTING_AREA_UPDATE_T1_ON == gRabmRAT1Switch ) /*若打开了rout.area.update.T1定时器*/ { /*关闭rout.area.update.T1定时器:*/ NAS_RabmStopTimer( RABM_TIMER_NAME_COMMON, RABM_TIMER_PARA_ROUT_AREA_UPDATE_T1 ); } else { if ( RABM_3G_TO_2G_T3_ON == gRabm3GTo2GT3Switch ) /*若打开了Rabm.sys.3To2.T3定时器*/ { /*关闭Rabm.sys.3To2.T3定时器:*/ NAS_RabmStopTimer( RABM_TIMER_NAME_COMMON, RABM_TIMER_PARA_3_TO_2_T3 ); } } } /*打印流程信息---状态切换:*/ RABM_LOG1_NORMAL( "STATE RABM_ROUT_AREA_UPDATE state CHANGE TO RABM_2G_NULL state: NSAPI:", (VOS_INT32)(pstPdpDeactiveIndMsg->aulNsapiList[ucLoop]) ); /*将该NSAPI的状态置为RABM_2G_NULL:*/ RABM_SetGState(NsapiIndex, RABM_2G_NULL); /*清空QoS:*/ gastRabm2GEntity[NsapiIndex].stQos.ulQosLength = 0; PS_MEM_SET(gastRabm2GEntity[NsapiIndex].stQos.aucQosValue, 0x00, sizeof(gastRabm2GEntity[NsapiIndex].stQos.aucQosValue)); break; case RABM_DATA_TRANS_READY: /*no break here*/ case RABM_DATA_TRANS_STOP: /*打印流程信息---状态切换:*/ if ( RABM_DATA_TRANS_READY == gastRabm2GEntity[NsapiIndex].State ) { RABM_LOG1_NORMAL( "STATE RABM_DATA_TRANS_READY state CHANGE TO RABM_2G_NULL state: NSAPI:", (VOS_INT32)(pstPdpDeactiveIndMsg->aulNsapiList[ucLoop]) ); } else { RABM_LOG1_NORMAL( "STATE RABM_DATA_TRANS_STOP state CHANGE TO RABM_2G_NULL state: NSAPI:", (VOS_INT32)(pstPdpDeactiveIndMsg->aulNsapiList[ucLoop]) ); } /*将该NSAPI的状态置为RABM_2G_NULL:*/ RABM_SetGState(NsapiIndex, RABM_2G_NULL); /*清空QoS:*/ gastRabm2GEntity[NsapiIndex].stQos.ulQosLength = 0; PS_MEM_SET(gastRabm2GEntity[NsapiIndex].stQos.aucQosValue, 0x00, sizeof(gastRabm2GEntity[NsapiIndex].stQos.aucQosValue)); break; default: /*打印出错信息---该NSAPI所对应的状态字段出错:*/ RABM_LOG1_ERROR( "NAS_RabmSmPdpDeactivateIndMsg:ERROR:This NSAPI's state is WRONG!: NSAPI:", (VOS_INT32)(pstPdpDeactiveIndMsg->aulNsapiList[ucLoop]) ); /*将该NSAPI的状态置为RABM_2G_NULL:*/ RABM_SetGState(NsapiIndex, RABM_2G_NULL); /*打印警告信息---将该状态出错的NSAPI的状态置为RABM_2G_NULL:*/ RABM_LOG1_WARNING( "NAS_RabmSmPdpDeactivateIndMsg:WARNING:Set this NSAPI's state to RABM_2G_NULL!: NSAPI:", (VOS_INT32)(pstPdpDeactiveIndMsg->aulNsapiList[ucLoop]) ); /*清空QoS:*/ gastRabm2GEntity[NsapiIndex].stQos.ulQosLength = 0; PS_MEM_SET(gastRabm2GEntity[NsapiIndex].stQos.aucQosValue, 0x00, sizeof(gastRabm2GEntity[NsapiIndex].stQos.aucQosValue)); break; } /*删除RAB_MAP实体*/ RABM_DelRabMap((VOS_UINT8)(pstPdpDeactiveIndMsg->aulNsapiList[ucLoop])); } return; }