2017-07-03 2 views
0

Ich bin ziemlich neu in DPDK.DPDK mbuf deep copy

Ich habe ein Paket, das ich mehrmals Sinn Ich will tiefe Kopie mbuf die einzige mbuf api Befehl, den ich gefunden habe, duplizieren müssen:

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

nicht scheint nicht zu deep-copy es nur um zeigen zu den gleichen Daten Nutzdaten. meine Frage ist, wie kann ich richtig deep copymbuf

Antwort

0

Ich habe etwas graben, fand ich keine einfache API. das ist, was ich kam mit: alle mbuf Segmente gehen über und es zu neuen mbuf

Bitte beachten Sie dieser Code kopiert wird nicht direkt arbeiten, Sie get_data_from_mbuf und 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); 
} 
implementieren müssen
Verwandte Themen