0

我对 DPDK 很陌生。

我有一个需要多次复制的数据包,这意味着我想深度复制mbuf 我找到的唯一 mbuf api 命令:

static struct rte_mbuf* rte_pktmbuf_clone(struct rte_mbuf *md,struct rte_mempool *mp )  

deep-copy仅仅指向相同的数据有效负载似乎并没有。我的问题是我怎样才能正确地deep copy mbuf

4

1 回答 1

0

我做了一些挖掘,我没有找到任何简单的 API。这就是我想出的:遍历所有 mbuf 段并将其复制到新的 mbuf

请注意此代码不能直接工作,您需要实现get_data_from_mbufmbuf_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);
 }
于 2017-07-12T16:13:51.003 回答