DPDK mbuf深拷贝

DPDK mbuf deep copy

我是 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_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);
 }