Wireshark не захватывает пакеты интерфейса dpdk

#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

  1. используйте rte_pdump_init API в основном (желаемом) приложении DPDK и используйте пример DPDK dpdk-pdump для захвата пакетов для RX или TX для желаемых очередей.
  2. Отключите устройство от пользовательского интерфейса и привяжите его обратно к драйверу ядра для интерфейса netdev. запустите DPDK rte_eal_init со специальным аргументом --vdev=net_pcap0,iface=[kernel nic interface instance]

Примечание: В варианте 2 можно запустить Wireshark и также захватить пакеты. Но это приведет к потере производительности и функциональности, специфичной для DPDK.