rte_mbuf_t * utl_rte_pktmbuf_add_after(rte_mbuf_t *m1,rte_mbuf_t *m2){

    utl_rte_pktmbuf_check(m1);
    utl_rte_pktmbuf_check(m2);

    rte_mbuf_refcnt_update(m2,1);
    m1->next=m2;
    m1->pkt_len += m2->data_len;
    m1->nb_segs = m2->nb_segs + 1;
    return (m1);
}
void rte_pktmbuf_attach(struct rte_mbuf *mi, struct rte_mbuf *md)
{

	rte_mbuf_refcnt_update(md, 1);
	mi->buf_addr = md->buf_addr;
	mi->buf_len = md->buf_len;
	mi->data_off = md->data_off;

	mi->next = NULL;
	mi->pkt_len = mi->data_len;
	mi->nb_segs = 1;
}
void rte_pktmbuf_free_seg(rte_mbuf_t *m){

    utl_rte_pktmbuf_check(m);
    uint32_t old=sanb_atomic_dec2zero32(&m->refcnt_reserved);
    if (old == 1) {
        struct rte_mbuf *md = RTE_MBUF_FROM_BADDR(m->buf_addr);

        if ( md != m ) {
            rte_pktmbuf_detach(m);
            if (rte_mbuf_refcnt_update(md, -1) == 0)
                free(md);
        }

        free(m);
    }
}
Example #4
0
uint16_t rte_mbuf_refcnt_update_export(struct rte_mbuf* m, int16_t value) {
	return rte_mbuf_refcnt_update(m, value);
}