VOS_UINT32 TAF_APS_RcvApsLocalPdpDeactivateInd_Active( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { VOS_UINT8 ucPdpId; TAF_APS_INTER_PDP_DEACTIVATE_REQ_STRU *pstLocalMsg; APS_PDP_CONTEXT_ENTITY_ST *pstPdpEntity; /* 初始化, 获取消息内容 */ pstLocalMsg = (TAF_APS_INTER_PDP_DEACTIVATE_REQ_STRU *)pstMsg; ucPdpId = pstLocalMsg->ucPdpId; pstPdpEntity = TAF_APS_GetPdpEntInfoAddr(ucPdpId); /* 停止流量统计 */ TAF_APS_StopDsFlowStats(pstPdpEntity->ucNsapi); /* 同步PDP状态和信息至ESM */ #if (FEATURE_ON == FEATURE_LTE) MN_APS_SndEsmPdpInfoInd(pstPdpEntity, SM_ESM_PDP_OPT_DEACTIVATE); #endif /* 向SM发送本地去激活请求 */ if (VOS_TRUE == pstPdpEntity->bitOpTransId) { TAF_APS_SndSmPdpLocalDeactivateReq(ucPdpId); } #if (FEATURE_ON == FEATURE_IPV6) /* 如果是缺省承载且地址类型是IPv6, 需要同步给ND Client */ if ( (TAF_APS_CheckPrimaryPdp(ucPdpId)) && (TAF_APS_CheckPdpAddrTypeIpv6(ucPdpId)) ) { TAF_APS_SndNdPdpDeactInd(TAF_APS_GetPdpEntNsapi(ucPdpId)); } #endif /* 如果SNDCP已经激活, 释放SNDCP资源 */ if (APS_SNDCP_ACT == pstPdpEntity->PdpProcTrack.ucSNDCPActOrNot) { Aps_ReleaseSndcpResource(ucPdpId); } /* 上报ID_EVT_TAF_PS_CALL_PDP_DEACTIVATE_IND事件 */ TAF_APS_SndPdpDeActivateInd(ucPdpId, TAF_APS_MapSmCause(pstLocalMsg->enCause)); /* 释放APS资源 */ Aps_ReleaseApsResource(ucPdpId); /* 配置IP过滤器 */ TAF_APS_IpfConfigUlFilter(ucPdpId); /* 主状态迁移至TAF_APS_STA_INACTIVE */ TAF_APS_SetCurrPdpEntityMainFsmState(TAF_APS_STA_INACTIVE); return VOS_TRUE; }
VOS_UINT32 TAF_APS_RcvAtPsCallOrigReq_Active( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { VOS_UINT8 ucPdpId; TAF_PS_MSG_STRU *pstAppMsg; TAF_PS_CALL_ORIG_REQ_STRU *pstCallOrigReq; #if (FEATURE_ON == FEATURE_IPV6) APS_PDP_CONTEXT_ENTITY_ST *pstPdpEntity; TAF_PDP_TYPE_ENUM_UINT8 enPdpType; #endif /* 初始化, 获取消息内容 */ pstAppMsg = (TAF_PS_MSG_STRU*)pstMsg; pstCallOrigReq = (TAF_PS_CALL_ORIG_REQ_STRU*)(pstAppMsg->aucContent); ucPdpId = TAF_APS_GetCurrFsmEntityPdpId(); /* 如果CID对应的剩余定时器时长为0, 需要上报响应事件 */ if (0 == TAF_APS_GetCallRemainTmrLen(pstCallOrigReq->stDialParaInfo.ucCid)) { TAF_APS_SndCallOrigCnf(&(pstCallOrigReq->stCtrl), pstCallOrigReq->stDialParaInfo.ucCid, TAF_PS_CAUSE_SUCCESS); } TAF_APS_SetCallRemainTmrLen(pstCallOrigReq->stDialParaInfo.ucCid, 0); /* 上报ID_EVT_TAF_PS_CALL_PDP_ACTIVATE_CNF事件 */ TAF_APS_SndPdpActivateCnf(ucPdpId, pstCallOrigReq->stDialParaInfo.ucCid); #if (FEATURE_ON == FEATURE_IPV6) enPdpType = pstCallOrigReq->stDialParaInfo.enPdpType; pstPdpEntity = TAF_APS_GetPdpEntInfoAddr(ucPdpId); if ( ((TAF_PDP_IPV6 == enPdpType) || (TAF_PDP_IPV4V6 == enPdpType)) && (VOS_TRUE == pstPdpEntity->bitOpIpv6RaInfo) ) { /* 上报ID_EVT_TAF_PS_IPV6_INFO_IND事件 */ TAF_APS_SndIpv6RaInfoNotifyInd(&(pstCallOrigReq->stCtrl), pstCallOrigReq->stDialParaInfo.ucCid, pstPdpEntity->ucNsapi, (TAF_PDP_IPV6_RA_INFO_STRU *)&pstPdpEntity->stIpv6RaInfo); } #endif /* 激活成功,启动流量统计 */ TAF_APS_StartDsFlowStats(TAF_APS_GetPdpEntNsapi(ucPdpId)); return VOS_TRUE; }
VOS_VOID TAF_APS_SndLocalAllSecPdpDeactivateInd( VOS_UINT8 ucPdpId, SM_TAF_CAUSE_ENUM_UINT16 enCause ) { VOS_UINT8 i; if (APS_PDP_ACT_PRI == TAF_APS_GetPdpEntActType(ucPdpId)) { for (i = 0; i < TAF_APS_MAX_PDPID; i++) { if ((TAF_APS_GetPdpEntNsapi(ucPdpId) == TAF_APS_GetPdpEntLinkedNsapi(i)) && (APS_PDP_ACT_SEC == TAF_APS_GetPdpEntActType(i)) && (VOS_TRUE == TAF_APS_GetPdpEntUsedFlg(i))) { TAF_APS_SndLocalPdpDeactivateInd(i, enCause); } } } }
VOS_UINT32 TAF_APS_RcvAtSetPdpContextStateReq_Active( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { TAF_PS_MSG_STRU *pstAppMsg; TAF_PS_SET_PDP_STATE_REQ_STRU *pstSetPdpCtxStateReq; #if (FEATURE_ON == FEATURE_IPV6) APS_PDP_CONTEXT_ENTITY_ST *pstPdpEntity; #endif VOS_UINT32 ulBearerActivateFlg; VOS_UINT8 ucCidValue; VOS_UINT8 ucPdpId; /* 初始化, 获取消息内容 */ pstAppMsg = (TAF_PS_MSG_STRU*)pstMsg; pstSetPdpCtxStateReq = (TAF_PS_SET_PDP_STATE_REQ_STRU*)(pstAppMsg->aucContent); ucPdpId = TAF_APS_GetCurrFsmEntityPdpId(); /* 设置激活标记 */ ulBearerActivateFlg = (TAF_CGACT_ACT == pstSetPdpCtxStateReq->stCidListStateInfo.ucState) ? VOS_TRUE : VOS_FALSE; /* 当前先不支持一次性激活多个PDP的场景,一次激活一个,因此找第一个要激活的 CID */ ucCidValue = TAF_APS_GetCidValue(ulBearerActivateFlg, pstSetPdpCtxStateReq->stCidListStateInfo.aucCid); /* PDP激活操作处理 */ if (TAF_CGACT_ACT == pstSetPdpCtxStateReq->stCidListStateInfo.ucState) { /* 如果CID对应的剩余定时器时长为0, 需要上报响应事件 */ if (0 == TAF_APS_GetCallRemainTmrLen(ucCidValue)) { TAF_APS_SndSetPdpCtxStateCnf(&(pstSetPdpCtxStateReq->stCtrl), TAF_PS_CAUSE_SUCCESS); } TAF_APS_SetCallRemainTmrLen(ucCidValue, 0); /* 上报ID_EVT_TAF_PS_CALL_PDP_ACTIVATE_CNF事件 */ TAF_APS_SndPdpActivateCnf(ucPdpId, ucCidValue); #if (FEATURE_ON == FEATURE_IPV6) pstPdpEntity = TAF_APS_GetPdpEntInfoAddr(ucPdpId); if (VOS_TRUE == pstPdpEntity->bitOpIpv6RaInfo) { /* 上报ID_EVT_TAF_PS_IPV6_INFO_IND事件 */ TAF_APS_SndIpv6RaInfoNotifyInd(&(pstSetPdpCtxStateReq->stCtrl), ucCidValue, pstPdpEntity->ucNsapi, (TAF_PDP_IPV6_RA_INFO_STRU *)&pstPdpEntity->stIpv6RaInfo); } #endif /* 激活成功,启动流量统计 */ TAF_APS_StartDsFlowStats(TAF_APS_GetPdpEntNsapi(ucPdpId)); } else { /*------------------------------------------------------------------ 主状态迁移至TAF_APS_STA_MS_DEACTIVATING 子状态迁移至TAF_APS_MS_DEACTIVATING_SUBSTA_INIT 在TAF_APS_MS_DEACTIVATING_SUBSTA_INIT子状态中 处理ID_MSG_TAF_PS_SET_PDP_CONTEXT_STATE_REQ消息 ------------------------------------------------------------------*/ TAF_APS_InitSubFsm(TAF_APS_FSM_MS_DEACTIVATING, TAF_APS_GetMsDeactivatingFsmDescAddr(), TAF_APS_MS_DEACTIVATING_SUBSTA_INIT); } return VOS_TRUE; }