VOS_VOID CDS_ImsaSetImsBearerReqMsgProc(MsgBlock *pstMsg) { IMSA_CDS_SET_IMS_BEARER_REQ_STRU *pstReqMsg; CDS_ENTITY_STRU *pstCdsEntity; CDS_INFO_LOG(UEPS_PID_CDS,"Enter CDS_ImsaSetImsBearerReqMsgProc."); pstReqMsg = (IMSA_CDS_SET_IMS_BEARER_REQ_STRU *)((VOS_UINT32)pstMsg); if (pstReqMsg->ulImsBearerNum > IMSA_CDS_MAX_IMS_BEARER_NUM) { CDS_ERROR_LOG1(UEPS_PID_CDS,"CDS_ImsaSetImsBearerReqMsgProc : IMS Bearer Number Error.",pstReqMsg->ulImsBearerNum); CDS_SendImsaSetImsBearerCnfMsg(PS_FAIL); return; } /*默认按MODEM_0处理*/ pstCdsEntity = CDS_GetCdsEntity(MODEM_ID_0); if (VOS_NULL_PTR == pstCdsEntity) { CDS_ERROR_LOG(UEPS_PID_CDS,"CDS_ImsaSetImsBearerReqMsgProc : Get CDS Entity Fail."); CDS_SendImsaSetImsBearerCnfMsg(PS_FAIL); return; } /*注册IMS NIC回调函数*/ if (PS_SUCC != IMS_NIC_RegUlDataSendCb((IMS_NIC_SEND_UL_DATA_FUNC)CDS_RxDataFromImsNIC, pstCdsEntity->usModemId)) { CDS_ERROR_LOG(UEPS_PID_CDS,"CDS_ImsaSetImsBearerReqMsgProc : IMS_NIC_RegUlDataSendCb Fail."); CDS_SendImsaSetImsBearerCnfMsg(PS_FAIL); return; } /*更新CDS实体信息*/ pstCdsEntity->ulImsBearerNum = pstReqMsg->ulImsBearerNum; PS_MEM_CPY(pstCdsEntity->astImsBearerInfo, pstReqMsg->astImsBearerArray, pstReqMsg->ulImsBearerNum * sizeof(IMSA_CDS_IMS_BEARER_STRU)); pstCdsEntity->stImsPortInfo.usMinImsPort = pstReqMsg->stImsPortInfo.usMinImsPort; pstCdsEntity->stImsPortInfo.usMaxImsPort = pstReqMsg->stImsPortInfo.usMaxImsPort; /*发送成功消息*/ CDS_SendImsaSetImsBearerCnfMsg(PS_SUCC); CDS_INFO_LOG(UEPS_PID_CDS,"Leave CDS_ImsaSetImsBearerReqMsgProc Succ."); return; }
VOS_VOID CDS_ShowCdsEntityInfo(VOS_UINT16 usModemId) { char strRanMode[][20] = {"NULL","LTE","GU","无效接入模式"}; char strLBState[][20] = {"正常模式","环回模式"}; CDS_ENTITY_STRU *pstCdsEntity; VOS_UINT32 ulCnt; pstCdsEntity = CDS_GetCdsEntity(usModemId); if (VOS_NULL_PTR == pstCdsEntity) { vos_printf("ModemId非法。输入ModemId=%d\n",usModemId); return; } vos_printf("显示Modem%d的CDS实体状态 \r\n",usModemId); vos_printf("当前接入模式 : %s\r\n",strRanMode[pstCdsEntity->enRanMode]); vos_printf("上行SR触发标志 : %d\r\n",pstCdsEntity->ulServiceReqFlg); vos_printf("上行缓存队列缓存个数 : %d\r\n",LUP_QueCnt(pstCdsEntity->pstUlDataQue)); vos_printf("上行缓存数据保护定时器 : 0x%x\r\n",pstCdsEntity->astTimer[CDS_TMR_ID_UL_DATA_PROCTECT].pstTmrHdr); vos_printf("下行10ms周期性定时器 : 0x%x\r\n",pstCdsEntity->astTimer[CDS_TMR_ID_DL_10MS_PERIODIC_TMR].pstTmrHdr); vos_printf("环回模式状态 : %s\r\n",strLBState[pstCdsEntity->ulTestModeFlg]); vos_printf("环回模式类型 : %d\r\n",pstCdsEntity->ulLoopBackMode); vos_printf("环回模式B定时器时长 : %d\r\n",pstCdsEntity->astTimer[CDS_TMR_ID_LB_MODE_B_TMR].ulTmrLen); vos_printf("环回队列当前缓存SDU : %d\r\n",LUP_QueCnt(pstCdsEntity->pstLBModeBQue)); vos_printf("上行数据包直接丢弃开关 : %d\r\n",pstCdsEntity->ulULPktDiscardFlg); vos_printf("下行数据包直接丢弃开关 : %d\r\n",pstCdsEntity->ulDLPktDiscardFlg); vos_printf("\r\n"); vos_printf("显示Modem%d的IMS承载信息 \r\n",usModemId); vos_printf("IMS端口号范围 :%d - %d\r\n",pstCdsEntity->stImsPortInfo.usMinImsPort, pstCdsEntity->stImsPortInfo.usMaxImsPort); vos_printf("IMS承载总数 : %d\r\n",pstCdsEntity->ulImsBearerNum); for (ulCnt = 0; ulCnt < pstCdsEntity->ulImsBearerNum; ulCnt ++) { vos_printf("IMS承载ID : %d\r\n",pstCdsEntity->astImsBearerInfo[ulCnt].ucEpsbId); vos_printf("IMS承载类型 : %d\r\n",pstCdsEntity->astImsBearerInfo[ulCnt].enBearerType); } vos_printf("\r\n"); return; }
VOS_VOID CDS_UlProcImsData(MODEM_ID_ENUM_UINT16 enModemId) { VOS_UINT32 ulCnt; TTF_MEM_ST *pstIpPkt; VOS_INT32 lLock; CDS_ENTITY_STRU *pstCdsEntity; VOS_UINT16 usResult; pstCdsEntity = CDS_GetCdsEntity(enModemId); if (VOS_NULL_PTR == pstCdsEntity) { return; } for (ulCnt = 0; ulCnt < CDS_IMS_QUE_SIZE; ulCnt ++) { lLock = VOS_SplIMP(); if (PS_SUCC != LUP_DeQue(pstCdsEntity->pstIMSDataQue, (VOS_VOID**)(&pstIpPkt))) { VOS_Splx(lLock); break; } VOS_Splx(lLock); /*上行软过滤*/ usResult = 0; if (PS_SUCC != CDS_IpSoftFilter(pstIpPkt, &usResult,pstCdsEntity)) { TTF_MemFree(UEPS_PID_CDS, pstIpPkt); CDS_DBG_IMS_UL_SOFT_FILTER_FAIL_NUM(1); continue; } /*将过滤结果存到TTF中*/ CDS_UL_SAVE_IPFRSLT_TO_TTF(pstIpPkt,usResult); /*鈎包*/ CDS_SendIpPacket2PC(pstIpPkt); /*发送到空口*/ CDS_UlDispatchDataByRanMode(pstCdsEntity,pstIpPkt); CDS_DBG_IMS_UL_SEND_PKT_TO_RAN_NUM(1); } return; }
VOS_VOID CDS_ShowUlSoftFilter(VOS_UINT16 usModemId) { CDS_ENTITY_STRU *pstCdsEntity; CDS_SOFTFILTER_INFO_STRU *pstSoftFilter; VOS_UINT32 ulCnt; pstCdsEntity = CDS_GetCdsEntity(usModemId); if (VOS_NULL_PTR == pstCdsEntity) { vos_printf("ModemId非法。输入ModemId=%d\n",usModemId); return; } vos_printf("显示Modem%d的上行软过滤器,总数为%d \r\n",usModemId,pstCdsEntity->ulUlSoftFilterNum); for (ulCnt = 0; ulCnt < pstCdsEntity->ulUlSoftFilterNum; ulCnt ++) { pstSoftFilter = &(pstCdsEntity->astUlSoftFilter[ulCnt]); vos_printf("上行软过滤器%d详细信息\r\n",ulCnt); vos_printf("上行软过滤器ID : %d\r\n",pstSoftFilter->ulPacketFilterId); vos_printf("上行软过滤器方向 : %d\r\n",pstSoftFilter->enDirection); vos_printf("上行软过滤器类型 : %d\r\n",pstSoftFilter->enFilterType); vos_printf("上行软过滤器优先级 : %d\r\n",pstSoftFilter->usPrecedence); vos_printf("上行软过滤器对应的承载ID : %d\r\n",pstSoftFilter->ucRabId); if (CDS_SOFTFILTER_TYPE_IPV4 == pstSoftFilter->enFilterType) { CDS_ShowSoftFilterIPv4Info(pstSoftFilter); } else { CDS_ShowSoftFilterIPv6Info(pstSoftFilter); } CDS_ShowSoftFilterTransportLayerInfo(pstSoftFilter); vos_printf("\r\n"); } vos_printf("\r\n"); return; }
VOS_VOID CDS_SetPktDiscardFlg(MODEM_ID_ENUM_UINT16 enModemId,VOS_UINT32 ulDir, VOS_UINT32 ulFlg) { CDS_ENTITY_STRU *pstCdsEntity; pstCdsEntity = CDS_GetCdsEntity(enModemId); if (VOS_NULL_PTR == pstCdsEntity) { return; } if (0 == ulDir) { pstCdsEntity->ulULPktDiscardFlg = ulFlg; } else { pstCdsEntity->ulDLPktDiscardFlg = ulFlg; } return ; }
VOS_UINT32 CDS_RxDataFromImsNIC(const VOS_UINT8 *pData, VOS_UINT16 usLen,MODEM_ID_ENUM_UINT16 enModemId) { CDS_ENTITY_STRU *pstCdsEntity; TTF_MEM_ST *pstTtfPkt; VOS_INT32 lLock; CDS_DBG_IMS_UL_RX_FUN_CALL_NUM(1); /*入参判断*/ if (VOS_NULL_PTR == pData) { CDS_ERROR_LOG(UEPS_PID_CDS, "CDS_RxPktFromImsNIC:Input Para is NULL"); CDS_DBG_IMS_UL_RX_FUN_PARA_ERR(1); return PS_FAIL; } if ((0 == usLen) || (usLen > ETH_MAX_MTU)) { CDS_ERROR_LOG1(UEPS_PID_CDS,"CDS_RxPktFromImsNIC ; Packet Length Error.",usLen); CDS_DBG_IMS_UL_RX_FUN_PARA_ERR(1); return PS_FAIL; } pstCdsEntity = CDS_GetCdsEntity(enModemId); if (VOS_NULL_PTR == pstCdsEntity) { CDS_ERROR_LOG1(UEPS_PID_CDS,"CDS_RxPktFromImsNIC ; Modem ID Error.",enModemId); CDS_DBG_IMS_UL_RX_FUN_PARA_ERR(1); return PS_FAIL; } CDS_DBG_IMS_UL_RX_NIC_PKT_NUM(1); /*申请TTF内存,并将其拷贝到TTF内存中*/ pstTtfPkt = CDS_AllocTtfMem(usLen); if (VOS_NULL_PTR == pstTtfPkt) { CDS_ERROR_LOG(UEPS_PID_CDS,"CDS_RxDataFromImsNIC: Alloc Mem Fail."); CDS_DBG_IMS_UL_ALLOC_MEM_FAIL_NUM(1); return PS_FAIL; } PS_MEM_CPY(pstTtfPkt->pData,pData,usLen); /*入队*/ lLock = VOS_SplIMP(); if (PS_SUCC != LUP_EnQue(pstCdsEntity->pstIMSDataQue,pstTtfPkt)) { VOS_Splx(lLock); CDS_DBG_IMS_UL_EN_QUE_FAIL_NUM(1); TTF_MemFree(UEPS_PID_CDS, pstTtfPkt); CDS_SendEventToCds(CDS_EVENT_UL_IMS_PROC); CDS_DBG_IMS_UL_TRIGGER_IMS_EVENT_NUM(1); return PS_FAIL; } VOS_Splx(lLock); CDS_DBG_IMS_UL_EN_QUE_SUCC_NUM(1); /*wakeup cds*/ CDS_SendEventToCds(CDS_EVENT_UL_IMS_PROC); CDS_DBG_IMS_UL_TRIGGER_IMS_EVENT_NUM(1); return PS_SUCC; }