[C ++] [DPDK] Создайте rte_mempool с правильным выравниванием байтов частного размера

Я новичок в DPDK и вообще работаю с байтами.

Я пытаюсь изменить длину полученного пакета, скопировав его в пул памяти, а затем создаю rte_mbuf с указанным пулом памяти, который я могу изменить. Чтобы создать мемпул, я использую

    mem_pool = rte_pktmbuf_pool_create(packet, 1,
                        RTE_MBUF_DEFAULT_DATAROOM, <?>,
                        RTE_MBUF_DEFAULT_BUF_SIZE,
                        SOCKET_ID_ANY);

описывается в http://dpdk.org/doc/api/rte4e__http://dpdk.org/doc/api/rte_62e9328325325328328329328329329329329329329329329328329329329325 / а>

Кажется, я всегда получаю неправильное значение priv_size в этом вызове, когда получаю эту ошибку:

    MBUF: mbuf priv_size=<variable> is not aligned 
    Segmentation fault

Я не могу найти дополнительную информацию в описании и много гуглил проблему, но я не нашел решения, может ли кто-нибудь осветить меня?


person Ruffio    schedule 20.12.2017    source источник


Ответы (1)


ссылка на предоставленную вами документацию:

Priv_size Размер частного приложения находится между структурой rte_mbuf и буфером данных. Это значение должно быть выровнено с RTE_MBUF_PRIV_ALIGN.

Итак, да, priv_size должен быть выровнен с RTE_MBUF_PRIV_ALIGN, который составляет 8 байтов.

Таким образом, вы должны перейти к rte_pktmbuf_pool_create priv_size равным 0, 8, 16, 24 и т. Д.

person Andriy Berestovskyy    schedule 20.12.2017
comment
Я просто использовал uint16_t, инициализированный до 0, и это помогло, спасибо! Думаю, мне нужен был пример, чтобы понять - person Ruffio; 21.12.2017