пара вещей, которые вы можете исправить в своем коде DPDK.
- Сетевые пакеты имеют порядковый номер, я предполагаю, что вы используете гостевую ОС на x86. Если это так, пожалуйста, убедитесь, что вы исправили порядковый номер.
- DPDK API rte_pktmbuf_mtod возвращает вам начало пакета. Пожалуйста, сначала заполните заголовок ethe rnet, затем переместите 14 байтов ie
struct rte_eth_hdr
для ввода типа к IP и заполните данные. - в поле IP, поле контрольной суммы установлено как 0. Пожалуйста, перекрестно проверьте, активируете ли вы разгрузку IP-CHECKSUM в port_init.
- Все поля в IP должны также соответствовать БОЛЬШОМУ порядку байтов.
- В mbuf также есть порт. С rte_mbuf_allo c это будет 0, но для отправки на другой порт это должно быть правильное значение.
Наблюдения Wireshark
- Байт 13 и 14 равен
0xa50
. Это выглядит так, как будто ваша предполагаемая полезная нагрузка перезаписана - Байт 1 равен
0x45
, что ясно показывает, что вы сначала пишете содержимое заголовка IP вместо ethe rnet. Пожалуйста, используйте шаг 2
из исправлений DPDK.