【发布时间】:2019-03-14 01:35:00
【问题描述】:
我正在尝试从 dpdk 接口捕获数据包。 使用pdump+testpmd,可以抓到数据包。 但是,如果将 Wireshark 与 testpmd 一起使用,则上述操作会失败。
高度赞赏任何建议。谢谢
在 Ubuntu v 18+、DPDK v 19+ Wireshark v 3+ 上工作
【问题讨论】:
-
更新了查询的答案,希望对您有所帮助。如果是,您能否接受并投票结束该问题?
我正在尝试从 dpdk 接口捕获数据包。 使用pdump+testpmd,可以抓到数据包。 但是,如果将 Wireshark 与 testpmd 一起使用,则上述操作会失败。
高度赞赏任何建议。谢谢
在 Ubuntu v 18+、DPDK v 19+ Wireshark v 3+ 上工作
【问题讨论】:
解决方案是使用pdump 应用程序。正如其他人所提到的,一旦您的 DPDK 应用程序获得了网卡的所有权,内核将看不到数据包,并且不会触发 tcpdump 挂钩。 该文档解释了如何 i) 编译支持 pdump 和 pcap 的 dpdk ii) 使您的主要进程 - 您的应用程序 - 将数据包信息提供给辅助进程 - pdump sample application。
然后您可以将生成的 pcap 与 wireshark 一起使用。
【讨论】:
只要将物理接口从内核绑定到 DPDK 驱动程序(igb_uio、uio_pci_generic、vfio-pci),它就会从内核 netdev 中删除,用于物理功能和虚拟功能。这些 NIC 端口可通过 UIO 驱动程序访问,并且具有 PMD 的 DPDK 等应用程序可以探测和初始化设备(使用some exceptions)。
如果你想使用 Wireshark 的端口,很遗憾你必须bind it back to the kernel。您也可以使用 DPDK 将数据包捕获到 .pcap 文件中,然后使用 Wireshark 离线分析它 - 如果这符合您的需求。
[EDIT-1] UIO DPDK绑定有2种抓包方式
rte_pdump_init API,并使用 DPDK 示例 dpdk-pdump 为所需队列捕获 RX 或 TX 数据包。--vdev=net_pcap0,iface=[kernel nic interface instance] 启动 DPDK rte_eal_init
注意:在选项 2 中,也可以运行 Wireshark 并捕获数据包。但会在性能和 DPDK 特定功能方面有所损失。
【讨论】: