#wireshark #dpdk #mellanox
#wireshark #dpdk #mellanox
Вопрос:
Я пытаюсь захватить пакеты данных из интерфейса dpdk. Используя pdump testpmd, способен захватывать пакеты данных. Однако, если Wireshark используется с testpmd, вышеуказанный сбой.
Любые предложения высоко ценятся. Спасибо
Работает на Ubuntu версии 18 , DPDK версии 19 Wireshark версии 3
Комментарии:
1. обновил ответ на запрос, надеюсь, это поможет. Если да, не могли бы вы, пожалуйста, согласиться и проголосовать за закрытие вопроса?
Ответ №1:
Решение заключается в использовании приложения pdump. Как упоминалось ранее, как только ваше приложение DPDK становится владельцем сетевой карты, ядро не будет видеть пакеты, и перехваты tcpdump запускаться не будут. В документации объясняется, как i) скомпилировать dpdk с поддержкой pdump и pcap ii) разрешить вашему основному процессу — вашему приложению — передавать информацию о пакетах вторичному процессу — приложению-образцу pdump.
Затем вы можете использовать сгенерированный pcap с помощью wireshark.
Ответ №2:
Как только вы привязываете физический интерфейс из ядра к драйверу DPDK (igb_uio, uio_pci_generic, vfio_pci), он удаляется из netdev ядра как для физической, так и для виртуальной функции. Эти сетевые порты доступны через драйвер пользовательского интерфейса, и приложение, подобное DPDK, у которого есть PMD, может проверять и инициализировать устройства (за некоторыми исключениями).
Если вы хотите использовать порт с Wireshark, к сожалению, вам придется привязать его обратно к ядру. Вы также можете просто записывать пакеты в файл .pcap с помощью DPDK и анализировать его с помощью Wireshark в автономном режиме — если это соответствует вашим потребностям.
[РЕДАКТИРОВАТЬ-1] Существует 2 способа захвата пакетов при привязке UIO к DPDK
- используйте
rte_pdump_init
API в основном (желаемом) приложении DPDK и используйте пример DPDKdpdk-pdump
для захвата пакетов для RX или TX для желаемых очередей. - Отключите устройство от пользовательского интерфейса и привяжите его обратно к драйверу ядра для интерфейса netdev. запустите DPDK
rte_eal_init
со специальным аргументом--vdev=net_pcap0,iface=[kernel nic interface instance]
Примечание: В варианте 2 можно запустить Wireshark и также захватить пакеты. Но это приведет к потере производительности и функциональности, специфичной для DPDK.