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

Я пытаюсь захватить пакеты данных из интерфейса dpdk. Используя pdump + testpmd, можно захватывать пакеты данных. Однако, если Wireshark используется с testpmd, вышеуказанное не работает.

Любые предложения высоко ценятся. Спасибо

Работает над Ubuntu v 18+, DPDK v 19+ Wireshark v 3+


person Sweety    schedule 14.03.2019    source источник
comment
обновил ответ на запрос, надеюсь, это поможет. Если да, не могли бы вы принять и проголосовать, чтобы закрыть вопрос?   -  person Vipin Varghese    schedule 04.05.2021


Ответы (2)


Решение - использовать приложение pdump. Как уже упоминалось, как только ваше приложение DPDK становится владельцем сетевой карты, ядро ​​не будет видеть пакеты, и перехватчики tcpdump не будут срабатывать. В документации объясняется, как i) скомпилировать dpdk с поддержкой pdump и pcap ii) включить ваш основной процесс - ваше приложение - для передачи информации о пакете вторичному процессу - образец приложения pdump.

Затем вы можете использовать сгенерированный pcap с wirehark.

person Bacon    schedule 20.12.2019

Как только вы привязываете физический интерфейс ядра к драйверу DPDK (igb_uio, uio_pci_generic, vfio-pci), он удаляется из ядра netdev как для физических функций, так и для виртуальных функций. Эти порты NIC доступны через драйвер UIO, и приложение, такое как DPDK, в котором есть PMD, может проверять и инициализировать устройства (с помощью некоторые исключения).

Если вы хотите использовать порт с Wireshark, к сожалению, вам придется связать его с ядром. Вы также можете просто записывать пакеты в файл .pcap с помощью DPDK и анализировать его с помощью Wireshark в автономном режиме - если это соответствует вашим потребностям.

[EDIT-1] Есть 2 способа захвата пакетов при привязке UIO DPDK.

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

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

person AdamTL    schedule 21.03.2019