dpdk 18.08中的rte_mbuf没有struct rte_pktmbuf pkt

时间:2018-12-25 14:08:50

标签: c linux dpdk

升级到dpdk 18.08版后,出现以下编译错误。

error: ‘struct rte_mbuf’ has no member named ‘pkt’
  m->pkt.data = ((char*)m->pkt.data - (BTG_IP_VHL_HL(ip->version_ihl) << 2));
   ^

根据文档rte_mbuf struct不再具有分组消息缓冲区struct rte_pktmbuf pkt,该包继而保存void *数据,该数据包含段缓冲区中数据的起始地址。

struct rte_mbuf {
.
.
.
union {
        struct rte_ctrlmbuf ctrl;
        struct rte_pktmbuf pkt;
    };
}
struct rte_pktmbuf {
    /* valid for any segment */
    struct rte_mbuf *next; 
    void* data;  /**< Start address of data in segment buffer. */

请让我知道rte_mbuf结构的哪个其他字段可以与dpdk 18.08版本一起使用,这意味着数据包消息缓冲区中的数据的起始地址以解决此编译错误。

1 个答案:

答案 0 :(得分:1)

它是rte_pktmbuf_mtod(m, t)宏。

  

一个宏,指向mbuf中数据的开头。

     

返回的指针强制转换为类型t。在使用此功能之前,用户必须确保第一段足够大以容纳其数据。

来源:DPDK API

更新:

要在数据包缓冲区中添加一些数据,有一个专用功能:rte_pktmbuf_prepend()(这里是DPDK documentation

如果没有旧代码的上下文很难保证100%正确,但是看起来该片段必须重写为:

rte_pktmbuf_prepend(m,
        BTG_IP_VHL_HL(ip->version_ihl) << 2);