PPP_ZC_STRU *ppp_m_alloc_ttfmem_from_mbuf(struct ppp_mbuf *bp) { VOS_UINT16 usLen; PPP_ZC_STRU *pstMem; if (VOS_NULL_PTR == bp) { return VOS_NULL_PTR; } usLen = (VOS_INT16)ppp_m_length(bp); if (0 == usLen) { return VOS_NULL_PTR; } pstMem = PPP_MemAlloc(usLen, PPP_ZC_DL_RESERVE_LEN); if (VOS_NULL_PTR == pstMem) { return VOS_NULL_PTR; } /* 设置零拷贝数据内容长度 */ PPP_ZC_SET_DATA_LEN(pstMem, usLen); ppp_mbuf_View(bp, PPP_ZC_GET_DATA_PTR(pstMem), usLen); return pstMem; } /* ppp_m_ttfmem_alloc_from_mbuf */
/****************************************************************************** Function: PPP_STUB_TraceDlData Description: 接收来自GTR的上行数据 Calls: Data Accessed: Data Updated: Input: Output: Return: Others: ******************************************************************************/ VOS_VOID PPP_STUB_RcvUlData(PPP_STUB_ZC_DATA_MSG_STRU *pstUlStubDataMsg) { PPP_ZC_STRU *pstImmZc; pstImmZc = PPP_MemAlloc(pstUlStubDataMsg->u.stUlDataReq.usDataLen, 0); if ( VOS_NULL_PTR == pstImmZc ) { return; } PPP_MemWriteData(pstImmZc, &(pstUlStubDataMsg->u.stUlDataReq.aucData[0]), pstUlStubDataMsg->u.stUlDataReq.usDataLen); PPP_PullPacketEvent(PppGetAllocedId(), pstImmZc); return; }