我对 DPDK 很陌生。
我有一个需要多次复制的数据包,这意味着我想深度复制mbuf
我找到的唯一 mbuf api 命令:
static struct rte_mbuf* rte_pktmbuf_clone(struct rte_mbuf *md,struct rte_mempool *mp )
deep-copy
仅仅指向相同的数据有效负载似乎并没有。我的问题是我怎样才能正确地deep copy
mbuf
我做了一些挖掘,我没有找到任何简单的 API。这就是我想出的:遍历所有 mbuf 段并将其复制到新的 mbuf
请注意此代码不能直接工作,您需要实现get_data_from_mbuf
和mbuf_free
rte_mbuf *myJumboMbuf = m_pPoolMgr->getJPktPool()->getMBuf();
for (rte_mbuf *m = (rte_mbuf*)mbuf; m != NULL; m = mbuf_api_next(m))
{
uint16_t u16DataLen = mbuf_api_get_data_len(m);
char* buffer = rte_pktmbuf_append(myJmboMbuf, u16DataLen);
if (!buffer)
{
mbuf_free(myJmboMbuf);
ret = ERR_NO_MEM;
}
rte_memcpy(buffer, get_data_from_mbuf(m, void*), u16DataLen);
}