rte_mbuf в dpdk 18.08 не имеет структуры rte_pktmbuf pkt - PullRequest
0 голосов
/ 25 декабря 2018

Я получаю приведенную ниже ошибку компиляции после обновления до версии 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 больше не имеет структуру буфера сообщений пакета rte_pktmbuf pkt, в которой inturn содержит 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 голосов
/ 25 декабря 2018

Это rte_pktmbuf_mtod(m, t) макрос.

Макрос, который указывает на начало данных в mbuf. * ​​1005 *

Возвращенный указатель приводится к типу t.Перед использованием этой функции пользователь должен убедиться, что первый сегмент достаточно большой для размещения его данных.

Источник: DPDK API

Обновление:

Чтобы добавить в буфер пакетов некоторые данные, для этого есть специальная функция: rte_pktmbuf_prepend() (а вот документация DPDK )

Трудно быть на 100% увереннымбез контекста вашего старого кода, но, похоже, этот фрагмент необходимо переписать в:

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