2017-07-03 392 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); 
}