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