升级到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版本一起使用,这意味着数据包消息缓冲区中的数据的起始地址以解决此编译错误。
答案 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);