2017-07-03 385 views
0

我对DPDK很新颖。DPDK mbuf深拷贝

我有我需要重复几次 这意味着我要深拷贝mbuf 唯一的mbuf API命令我发现一个包:

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

似乎并不只是通过指向deep-copy它到相同的数据有效载荷。 我的问题是我该如何正确deep copymbuf

回答

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); 
}