我对DPDK很陌生。
我有一个包需要重复几次,这意味着我想要深入复制mbuf,这是我找到的唯一的mbuf命令:
static struct rte_mbuf* rte_pktmbuf_clone(struct rte_mbuf *md,struct rte_mempool *mp ) 它似乎不只是通过指向相同的数据有效负载来实现deep-copy。我的问题是如何正确地deep copy mbuf
发布于 2017-07-12 16:13:51
我做了一些调查,没有找到任何简单的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);
}https://stackoverflow.com/questions/44893251
复制相似问题