0

我想要任何流量生成器(比如 iperf、D-ITG 甚至 ping)将数据发送到 tun 接口。这个 tun 接口应该会自动转发到绑定到 DPDK 的 NIC。我想运行从界面获取数据的 l3fwd 示例。

我在命令行中使用了选项 --vdev=net_tun0 来创建 tun 接口。我认为 tun/tap PMD 会自动轮询 tun/tap 接口的数据包并重定向到/来自 NIC。但是,这并没有发生。我无法接收任何数据包。

我需要 dpdk 和流量生成器在同一台 PC 上运行。DPDK 应该选择用户空间的流量。

4

1 回答 1

0

由于问题不是那么清楚(无论是 DPDK RX-TX 还是 Kernel RX-TX),这里是 DPDK 应用观点的答案

  • DPDK TUN PMD 允许创建具有 ip 层以上的内核 TUN 接口(没有 MAC 层)。就像所有 PMD 设备一样,您必须在 DPDK 应用程序中进行轮询rte_eth_rx_burst和使用。rte_eth_tx_burst
  • 同样,如果您打算使用 TAP PMD,dpdk 将创建内核 TAP 接口,该接口必须在 DPDK 应用程序中rte_eth_rx_burst进行 轮询。rte_eth_tx_burst

一旦你使用vdev=net_tap0它创建内核点击界面dtap0。因此,要获取接收到内核接口的数据包,您必须调用rte_eth_rx_burst将特定数据包发送到您需要使用的内核 TAP 接口rte_eth_tx_burst

根据您的要求,将任何流量生成器引导到内核到 TAP 接口,然后发送到与 DPDK 绑定的物理 NIC,这就是您必须做的

  1. 使用一个简单的应用程序,如examples/skeletonortestpmd或 examples/l2fwd 没有 mac 更新`
  2. 确保将 传递vdev=net_tap0,iface=<your desired name for interface>给 DPDK 应用程序。
  3. 使用ipifconfig启动 ip 地址和状态为 up 的接口(Promisc 模式是可选的)。
  4. 通过交叉检查确保您的目标地址路由是通过点击界面route -n
  5. 现在根据需要使用 dest-ip 和接口启动您的流量生成器。

注意:在我的部署案例中,我最终也设置了静态 ARP。

这会将数据包发送到内核 TAP 接口,然后由 DPDK 应用程序通过 rx_burst 调用拦截。使用端口到端口转发行为,然后将其转发到 DPDK 物理 NIC。在相反的方向,从物理网卡接收的数据包通过 rx_burst 购买到应用程序中,然后通过 tx_burst 到 TAP PMD。然后这将注入内核 TAP 接口。

于 2020-02-07T03:18:23.333 回答