VOS_VOID TAF_APS_SndDhcpDnsIpv6Req( VOS_UINT8 ucPdpId ) { APS_DHCP_DNS_IPV6_REQ_STRU *pstDnsIpv6Req = VOS_NULL_PTR; APS_PDP_CONTEXT_ENTITY_ST *pstPdpEntity; /* 获取消息内容 */ pstPdpEntity = TAF_APS_GetPdpEntInfoAddr(ucPdpId); pstDnsIpv6Req = (APS_DHCP_DNS_IPV6_REQ_STRU *)PS_ALLOC_MSG_WITH_HEADER_LEN(WUEPS_PID_TAF, sizeof(APS_DHCP_DNS_IPV6_REQ_STRU)); if (VOS_NULL_PTR == pstDnsIpv6Req) { TAF_ERROR_LOG(WUEPS_PID_TAF, "TAF_APS_SndDhcpDnsIpv6Req: Memory alloc failed"); return; } PS_MEM_SET((VOS_UINT8*)pstDnsIpv6Req + VOS_MSG_HEAD_LENGTH, 0, sizeof(APS_DHCP_DNS_IPV6_REQ_STRU) - VOS_MSG_HEAD_LENGTH); /* 填写参数 */ pstDnsIpv6Req->ulReceiverPid = UEPS_PID_DHCP; pstDnsIpv6Req->enMsgId = ID_APS_DHCP_GET_DNS_IPV6_REQ; pstDnsIpv6Req->usOpId = 0; pstDnsIpv6Req->ucRabId = pstPdpEntity->ucNsapi; PS_MEM_CPY((VOS_CHAR *)pstDnsIpv6Req->aucIdentifierId, (VOS_CHAR *)pstPdpEntity->PdpAddr.aucIpV6Addr + TAF_APS_DHCP_IPV6_IFID_LEN, TAF_APS_DHCP_IPV6_IFID_LEN); PS_SEND_MSG(WUEPS_PID_TAF, pstDnsIpv6Req); return; }
VOS_VOID TAF_APS_SndXccAnswerDataCallReq( VOS_UINT8 ucPdpId ) { APS_XCC_ANSWER_DATA_CALL_REQ_STRU *pstAnswerReq = VOS_NULL_PTR; APS_PDP_CONTEXT_ENTITY_ST *pstPdpEntity; pstPdpEntity = TAF_APS_GetPdpEntInfoAddr(ucPdpId); pstAnswerReq = (APS_XCC_ANSWER_DATA_CALL_REQ_STRU *)PS_ALLOC_MSG_WITH_HEADER_LEN(WUEPS_PID_TAF, sizeof(APS_XCC_ANSWER_DATA_CALL_REQ_STRU)); if (VOS_NULL_PTR == pstAnswerReq) { TAF_ERROR_LOG(WUEPS_PID_TAF, "TAF_APS_SndXccAnswerDataCallReq: Memory alloc failed"); return; } PS_MEM_SET((VOS_UINT8*)pstAnswerReq + VOS_MSG_HEAD_LENGTH, 0, sizeof(APS_XCC_ANSWER_DATA_CALL_REQ_STRU) - VOS_MSG_HEAD_LENGTH); /* 填写参数 */ pstAnswerReq->ulReceiverPid = UEPS_PID_XCC; pstAnswerReq->enMsgId = ID_APS_XCC_ANSWER_DATA_CALL_REQ; pstAnswerReq->ucCallId = pstPdpEntity->stCdataInfo.ucCallId; PS_SEND_MSG(WUEPS_PID_TAF, pstAnswerReq); return; }
VOS_UINT32 TAF_APS_RcvL4aPdpModifyInd_Active( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { VOS_UINT8 ucPdpId; APS_L4A_PDP_MODIFY_IND_STRU *pstPdpModify; APS_PDP_CONTEXT_ENTITY_ST *pstPdpEntity; pstPdpModify = (APS_L4A_PDP_MODIFY_IND_STRU*)pstMsg; /* 初始化, 获取PDP ID */ ucPdpId = TAF_APS_GetCurrFsmEntityPdpId(); pstPdpEntity = TAF_APS_GetPdpEntInfoAddr(ucPdpId); /* 如果不是默认承载,则上报,默认承载不上报 */ if (TAF_APS_DEFAULT_CID != pstPdpModify->ucCid) { if (VOS_TRUE == pstPdpModify->bitOpEpsQos) { pstPdpEntity->bitOpEpsQos = VOS_TRUE; PS_MEM_CPY((VOS_UINT8 *)&pstPdpEntity->stEpsQos, (VOS_UINT8 *)&pstPdpModify->stEpsQosInfo, sizeof(APS_L4A_EPS_QOS_STRU)); } /* 上报ID_EVT_TAF_PS_CALL_PDP_MODIFIED_IND事件 */ TAF_APS_SndPdpModifyInd(ucPdpId); } return VOS_TRUE; }
VOS_VOID TAF_APS_SndDhcpDeactInd( VOS_UINT8 ucPdpId ) { APS_DHCP_DEACT_IND_STRU *pstDnsDeactInd = VOS_NULL_PTR; APS_PDP_CONTEXT_ENTITY_ST *pstPdpEntity; VOS_UINT8 ucCid; /* 获取消息内容 */ ucCid = TAF_APS_GetPdpEntCurrCid(ucPdpId); pstPdpEntity = TAF_APS_GetPdpEntInfoAddr(ucPdpId); pstDnsDeactInd = (APS_DHCP_DEACT_IND_STRU *)PS_ALLOC_MSG_WITH_HEADER_LEN(WUEPS_PID_TAF, sizeof(APS_DHCP_DEACT_IND_STRU)); if (VOS_NULL_PTR == pstDnsDeactInd) { TAF_ERROR_LOG(WUEPS_PID_TAF, "TAF_APS_SndDhcpDnsReqReq: Memory alloc failed"); return; } PS_MEM_SET((VOS_UINT8*)pstDnsDeactInd + VOS_MSG_HEAD_LENGTH, 0, sizeof(APS_DHCP_DEACT_IND_STRU) - VOS_MSG_HEAD_LENGTH); /* 填写参数 */ pstDnsDeactInd->ulReceiverPid = UEPS_PID_DHCP; pstDnsDeactInd->enMsgId = ID_APS_DHCP_DEACT_IND; pstDnsDeactInd->usOpId = 0; pstDnsDeactInd->ucRabId = pstPdpEntity->ucNsapi; pstDnsDeactInd->enPdnType = TAF_APS_GetPdpEntDialPdpType(ucPdpId, ucCid); PS_SEND_MSG(WUEPS_PID_TAF, pstDnsDeactInd); return; }
VOS_UINT32 TAF_APS_RcvEsmSmEpsBearerInfoInd_Active( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { VOS_UINT8 ucPdpId; APS_PDP_CONTEXT_ENTITY_ST *pstPdpEntity; TAF_APS_EPS_BEARER_INFO_IND_STRU *pstBearerInfo; pstBearerInfo = (TAF_APS_EPS_BEARER_INFO_IND_STRU*)pstMsg; ucPdpId = TAF_APS_GetCurrFsmEntityPdpId(); /* 获取该PDPID的PDP实体内容地址 */ pstPdpEntity = TAF_APS_GetPdpEntInfoAddr(ucPdpId); /* 根据EPS承载的操作类型(Activate, Deactivate, Modify), 调用相应的处理函数 */ if (SM_ESM_PDP_OPT_MODIFY == pstBearerInfo->enPdpOption) { MN_APS_ProcEsmBearerInfoIndOptModify(pstPdpEntity, pstBearerInfo); } else if (SM_ESM_PDP_OPT_DEACTIVATE == pstBearerInfo->enPdpOption) { MN_APS_ProcEsmBearerInfoIndOptDeactivate(pstPdpEntity, pstBearerInfo); } else { TAF_WARNING_LOG(WUEPS_PID_TAF,"TAF_APS_RcvEsmSmEpsBearerInfoInd_Inactive: Wrong option."); } return VOS_TRUE; }
VOS_VOID TAF_APS_SndXccOrigDataCallReq( VOS_UINT8 ucPdpId, VOS_UINT8 ucHrpdHandOff1xFlg ) { APS_XCC_ORIG_DATA_CALL_REQ_STRU *pstOrigReq = VOS_NULL_PTR; APS_PDP_CONTEXT_ENTITY_ST *pstPdpEntity = VOS_NULL_PTR; TAF_APS_CDATA_HRPD_EPDSZID_CTX_STRU *pstHrpdActInfo = VOS_NULL_PTR; pstPdpEntity = TAF_APS_GetPdpEntInfoAddr(ucPdpId); pstOrigReq = (APS_XCC_ORIG_DATA_CALL_REQ_STRU *)PS_ALLOC_MSG_WITH_HEADER_LEN(WUEPS_PID_TAF, sizeof(APS_XCC_ORIG_DATA_CALL_REQ_STRU)); if (VOS_NULL_PTR == pstOrigReq) { TAF_ERROR_LOG(WUEPS_PID_TAF, "TAF_APS_SndXccOrigDataCallReq: Memory alloc failed"); return; } PS_MEM_SET((VOS_UINT8*)pstOrigReq + VOS_MSG_HEAD_LENGTH, 0, sizeof(APS_XCC_ORIG_DATA_CALL_REQ_STRU) - VOS_MSG_HEAD_LENGTH); /* 填写参数 */ pstOrigReq->ulReceiverPid = UEPS_PID_XCC; pstOrigReq->enMsgId = ID_APS_XCC_ORIG_DATA_CALL_REQ; pstOrigReq->enSo = pstPdpEntity->stCdataInfo.enSo; pstOrigReq->ucCallId = pstPdpEntity->stCdataInfo.ucCallId; pstOrigReq->ucDrsFlg = pstPdpEntity->stCdataInfo.ucDrsFlg; pstOrigReq->ucIsDormDataCall = pstPdpEntity->stCdataInfo.ucIsDormDataCall; pstOrigReq->ucReOrigCount = pstPdpEntity->stCdataInfo.ucReOrigCount; pstOrigReq->ucIsL2ErrReOrig = pstPdpEntity->stCdataInfo.ucIsL2ErrReOrig; pstOrigReq->ucSrId = pstPdpEntity->stCdataInfo.ucSrId; /* TODO:QOS */ /* num filed默认值为DTMF编码格式的: #777 */ pstOrigReq->stDialNumInfo.enDigitMode = XCC_APS_DIGIT_MODE_DTMF; pstOrigReq->stDialNumInfo.ucDigitNum = 4; pstOrigReq->stDialNumInfo.aucDigit[0] = 0x0c; pstOrigReq->stDialNumInfo.aucDigit[1] = 0x07; pstOrigReq->stDialNumInfo.aucDigit[2] = 0x07; pstOrigReq->stDialNumInfo.aucDigit[3] = 0x07; if (VOS_TRUE == ucHrpdHandOff1xFlg) { pstHrpdActInfo = TAF_APS_GetHrpdEpdszidInfo(); pstOrigReq->ulIsPrevHrpdMode = VOS_TRUE; pstOrigReq->stPrevHrpdActInfo.usSid = pstHrpdActInfo->usSid; pstOrigReq->stPrevHrpdActInfo.usNid = pstHrpdActInfo->usNid; pstOrigReq->stPrevHrpdActInfo.usPzid = pstHrpdActInfo->ucPzid; } PS_SEND_MSG(WUEPS_PID_TAF, pstOrigReq); return; }
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_UINT32 TAF_APS_CheckPdpServiceActivated( VOS_UINT8 ucPdpId ) { APS_PDP_CONTEXT_ENTITY_ST *pstPdpEntity; /* 获取该PDPID的PDP实体内容地址 */ pstPdpEntity = TAF_APS_GetPdpEntInfoAddr(ucPdpId); /* 检查NSAPI标记, 如果已经未标记, 代表当前的APS实体未激活 */ if (VOS_FALSE == pstPdpEntity->PdpNsapiFlag) { return VOS_FALSE; } return VOS_TRUE; }
VOS_UINT32 TAF_APS_RcvL4aPdpDeactivateInd_Active( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { VOS_UINT8 ucPdpId; APS_PDP_CONTEXT_ENTITY_ST *pstPdpEntity; APS_L4A_PDP_DEACTIVATE_IND_STRU *pstL4aPdpDeactivateInd; /* 获取消息内容 */ pstL4aPdpDeactivateInd = (APS_L4A_PDP_DEACTIVATE_IND_STRU*)pstMsg; /* 获取当前状态机的APS索引 */ ucPdpId = TAF_APS_GetCurrFsmEntityPdpId(); /* 获取该索引的APS实体内容地址 */ pstPdpEntity = TAF_APS_GetPdpEntInfoAddr(ucPdpId); /* 停止流量统计 */ TAF_APS_StopDsFlowStats(pstPdpEntity->ucNsapi); /* 如果不是默认承载,则上报,默认承载不上报 */ if (TAF_APS_DEFAULT_CID != pstPdpEntity->stClientInfo.ucCid) { /* 上报ID_EVT_TAF_PS_CALL_PDP_DEACTIVATE_IND事件上报 */ TAF_APS_SndPdpDeActivateInd(ucPdpId, TAF_APS_MapL4aCause(pstL4aPdpDeactivateInd->ulEsmCause)); } /* 如果SNDCP已经激活, 释放SNDCP资源 */ if (APS_SNDCP_ACT == pstPdpEntity->PdpProcTrack.ucSNDCPActOrNot) { Aps_ReleaseSndcpResource(ucPdpId); } /* 释放APS资源 */ Aps_ReleaseApsResource(ucPdpId); /* 主状态迁移至TAF_APS_STA_INACTIVE */ TAF_APS_SetCurrPdpEntityMainFsmState(TAF_APS_STA_INACTIVE); return VOS_TRUE; }
VOS_UINT32 TAF_APS_RcvSndcpActivateRsp_Active( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { VOS_UINT32 ulResult; VOS_UINT8 ucPdpId; APS_PDP_CONTEXT_ENTITY_ST *pstPdpEntity; APS_SNDCP_ACTIVATE_RSP_ST *pstSnActivateRsp; /* 初始化, 获取消息内容 */ ulResult = VOS_OK; pstSnActivateRsp = &((APS_SNDCP_ACTIVATE_RSP_MSG*)pstMsg)->ApsSnActRsp; ucPdpId = TAF_APS_GetCurrFsmEntityPdpId(); pstPdpEntity = TAF_APS_GetPdpEntInfoAddr(ucPdpId); /* 检查消息参数 */ ulResult = Aps_SnMsgModSnActRspParaCheck(pstSnActivateRsp); if (APS_PARA_VALID != ulResult) { TAF_WARNING_LOG(WUEPS_PID_TAF, "TAF_APS_RcvSndcpActivateRsp_Active: Check para failed!"); /* 上报ID_EVT_TAF_PS_CALL_PDP_DEACTIVATE_IND事件 */ TAF_APS_SndPdpDeActivateInd(ucPdpId, TAF_PS_CAUSE_SM_NW_PROTOCOL_ERR_UNSPECIFIED); /* 发送内部消息, 触发PDP去激活流程 */ TAF_APS_SndInterPdpDeactivateReq(ucPdpId, SM_TAF_CAUSE_SM_NW_PROTOCOL_ERR_UNSPECIFIED); return VOS_TRUE; } /* 收到SN_ACT_RSP后修改APS实体参数, 包括XID参数, TRANSMODE */ Aps_SnActRspChngEntity(pstSnActivateRsp, ucPdpId); /* 设置RABM的传输模式 */ TAF_APS_SndRabmSetTransModeMsg(pstSnActivateRsp->ucNsapi, pstPdpEntity->GprsPara.TransMode); return VOS_TRUE; }
VOS_UINT32 TAF_APS_RcvMmcServiceStatusInd_Active( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { MMC_APS_SERVICE_STATUS_IND_STRU *pstMmcServiceStatusInd; #if (FEATURE_ON == FEATURE_IPV6) APS_PDP_CONTEXT_ENTITY_ST *pstPdpEntity; #endif VOS_UINT8 ucPdpId; /* 获取消息内容 */ pstMmcServiceStatusInd = (MMC_APS_SERVICE_STATUS_IND_STRU*)pstMsg; /* 获取当前状态机的APS实体索引 */ ucPdpId = TAF_APS_GetCurrFsmEntityPdpId(); #if (FEATURE_ON == FEATURE_IPV6) /* 获取该PDPID的PDP实体内容地址 */ pstPdpEntity = TAF_APS_GetPdpEntInfoAddr(ucPdpId); #endif /* 更新接入技术 */ TAF_APS_SetCurrPdpEntityRatType(pstMmcServiceStatusInd->enRatType); /* 更新PS域SIM卡状态 */ TAF_APS_SetCurrPdpEntitySimRegStatus(pstMmcServiceStatusInd->ulPsSimRegStatus); #if (FEATURE_ON == FEATURE_IPV6) /* 如果地址类型是IPv6, 需要同步给ND Client */ if ( (MMC_APS_RAT_TYPE_NULL != pstMmcServiceStatusInd->enRatType) && (TAF_APS_CheckPrimaryPdp(ucPdpId)) && (TAF_APS_CheckPdpAddrTypeIpv6(ucPdpId)) ) { if (VOS_TRUE != pstPdpEntity->ulNdClientActiveFlg) { TAF_APS_SndNdPdpActInd(pstPdpEntity->ucNsapi, pstPdpEntity->PdpAddr.aucIpV6Addr); pstPdpEntity->ulNdClientActiveFlg = VOS_TRUE; } } #endif switch (pstMmcServiceStatusInd->enRatType) { /* 当前模为GSM时, 不依靠该消息激活SNDCP */ case MMC_APS_RAT_TYPE_GSM: break; /* 当前模为WCDMA/LTE时, 需要去激活SNDCP */ case MMC_APS_RAT_TYPE_WCDMA: case MMC_APS_RAT_TYPE_LTE: if (APS_SNDCP_ACT == TAF_APS_GetPdpEntSndcpActFlg(ucPdpId)) { Aps_RabmMsgDeActSndcp(ucPdpId); } break; case MMC_APS_RAT_TYPE_NULL: default: break; } return VOS_TRUE; }
VOS_UINT32 TAF_APS_RcvSmPdpModifyInd_Active( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { VOS_UINT32 ulResult; VOS_UINT8 ucPdpId; MMC_APS_RAT_TYPE_ENUM_UINT32 enCurrRatType; APS_MDFIND_PARA_ST stParam; SMREG_PDP_MODIFY_IND_STRU *pstSmPdpModifyInd; #if (FEATURE_ON == FEATURE_LTE) APS_PDP_CONTEXT_ENTITY_ST *pstPdpEntity; #endif /* 获取消息内容 */ pstSmPdpModifyInd = (SMREG_PDP_MODIFY_IND_STRU *)pstMsg; ucPdpId = TAF_APS_GetCurrFsmEntityPdpId(); enCurrRatType = TAF_APS_GetCurrPdpEntityRatType(); #if (FEATURE_ON == FEATURE_LTE) pstPdpEntity = TAF_APS_GetPdpEntInfoAddr(ucPdpId); #endif ulResult = Aps_PdpMdfIndParaCheck(pstSmPdpModifyInd, &stParam); if (APS_PARA_INVALID == ulResult) { TAF_WARNING_LOG(WUEPS_PID_TAF, "TAF_APS_RcvSmPdpModifyInd_Active: Check para failed! "); /* 上报ID_EVT_TAF_PS_CALL_PDP_DEACTIVATE_IND事件 */ TAF_APS_SndPdpDeActivateInd(ucPdpId, TAF_PS_CAUSE_SM_NW_PROTOCOL_ERR_UNSPECIFIED); /* 发送内部消息, 触发PDP去激活流程 */ TAF_APS_SndInterPdpDeactivateReq(ucPdpId, SM_TAF_CAUSE_SM_NW_PROTOCOL_ERR_UNSPECIFIED); return VOS_TRUE; } /* 检查QOS是否满足MIN */ if (APS_PARA_VALID == Aps_CheckQosSatisify(ucPdpId, &stParam.NewQos)) { /* 满足MINQOS */ Aps_PdpMdfIndQosSatisfy(ucPdpId, &stParam, pstSmPdpModifyInd); #if (FEATURE_ON == FEATURE_LTE) /* 同步PDP信息至ESM */ MN_APS_SndEsmPdpInfoInd(pstPdpEntity, SM_ESM_PDP_OPT_MODIFY); #endif /* 如果当前模为GSM, 迁移状态 */ if (MMC_APS_RAT_TYPE_GSM == enCurrRatType) { /*------------------------------------------------------------------ 加载TAF_APS_STA_MS_MODIFYING状态机 加载后子状态切换为TAF_APS_MS_MODIFYING_SUBSTA_INIT 在TAF_APS_MS_MODIFYING_SUBSTA_INIT子状态中 处理D_PMC_SMREG_PDP_MODIFY_IND消息 ------------------------------------------------------------------*/ TAF_APS_InitSubFsm(TAF_APS_FSM_MS_MODIFYING, TAF_APS_GetMsModifyingFsmDescAddr(), TAF_APS_MS_MODIFYING_SUBSTA_INIT); } } else { /* 上报ID_EVT_TAF_PS_CALL_PDP_DEACTIVATE_IND事件 */ TAF_APS_SndPdpDeActivateInd(ucPdpId, TAF_PS_CAUSE_SM_NW_QOS_NOT_ACCEPTED); /* 发送内部消息, 触发PDP去激活流程 */ TAF_APS_SndInterPdpDeactivateReq(ucPdpId, SM_TAF_CAUSE_SM_NW_QOS_NOT_ACCEPTED); } return VOS_TRUE; }
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; }
VOS_UINT32 TAF_APS_RcvEsmSmEpsBearerInfoInd_Inactive( VOS_UINT32 ulEventType, struct MsgCB *pstMsg ) { TAF_APS_EPS_BEARER_INFO_IND_STRU *pstBearerInfo; APS_PDP_CONTEXT_ENTITY_ST *pstPdpEntity; #if (FEATURE_ON == FEATURE_IPV6) MMC_APS_RAT_TYPE_ENUM_UINT32 enCurrRatType; #endif VOS_UINT8 ucPdpId; pstBearerInfo = (TAF_APS_EPS_BEARER_INFO_IND_STRU*)pstMsg; #if (FEATURE_ON == FEATURE_IPV6) /* 获取当前网络模式*/ enCurrRatType = TAF_APS_GetCurrPdpEntityRatType(); #endif ucPdpId = TAF_APS_GetCurrFsmEntityPdpId(); /* 获取该PDPID的PDP实体内容地址 */ pstPdpEntity = TAF_APS_GetPdpEntInfoAddr(ucPdpId); /* 根据EPS承载的操作类型(Activate, Deactivate, Modify), 调用相应的处理函数 */ if (SM_ESM_PDP_OPT_ACTIVATE == pstBearerInfo->enPdpOption) { MN_APS_ProcEsmBearerInfoIndOptActivate(pstPdpEntity, pstBearerInfo); if (TAF_APS_DEFAULT_CID == TAF_APS_GetCidFromLteBitCid(pstBearerInfo->ulBitCid)) { TAF_APS_SndInterAttachBearerActivateInd(); } #if (FEATURE_ON == FEATURE_IMS) /* 处理IMS专有承载 */ TAF_APS_ProcImsBearerInfoIndOptActivate(pstPdpEntity, pstBearerInfo); #endif #if (FEATURE_ON == FEATURE_IPV6) /* 如果地址类型是IPv6, 需要同步给ND Client */ if ( (MMC_APS_RAT_TYPE_NULL != enCurrRatType) && (TAF_APS_CheckPrimaryPdp(ucPdpId)) && (TAF_APS_CheckPdpAddrTypeIpv6(ucPdpId)) ) { TAF_APS_SndNdPdpActInd(pstPdpEntity->ucNsapi, pstPdpEntity->PdpAddr.aucIpV6Addr); pstPdpEntity->ulNdClientActiveFlg = VOS_TRUE; } #endif } else { TAF_WARNING_LOG(WUEPS_PID_TAF,"TAF_APS_RcvEsmSmEpsBearerInfoInd_Inactive: Wrong option."); } /* 主状态迁移至TAF_APS_STA_ACTIVE */ TAF_APS_SetCurrPdpEntityMainFsmState(TAF_APS_STA_ACTIVE); return VOS_TRUE; }