如何从tun接口接收数据到dpdk绑定的NIC?

时间:2019-07-19 09:45:36

标签: c pmd tap dpdk tun

我想让任何流量生成器(例如iperf,D-ITG甚至ping)将数据发送到tun接口。此tun接口应自动转发到已绑定到DPDK的NIC。我想运行l3fwd示例,该示例从接口中拾取数据。

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

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

1 个答案:

答案 0 :(得分:0)

由于问题还不清楚(无论是DPDK RX-TX还是内核RX-TX),因此,这是DPDK应用程序观点的答案

  • DPDK TUN PMD允许使用ip层创建内核TUN接口 开始(没有MAC层)。就像所有PMD设备一样, 用rte_eth_rx_burst进行轮询并在其中使用rte_eth_tx_burst DPDK应用程序。
  • 类似地,如果您打算使用TAP PMD,则dpdk将创建内核TAP 必须使用rte_eth_rx_burst进行轮询的接口,并且 rte_eth_tx_burst在DPDK应用程序中。

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

根据您的要求,这是将所有流量生成器引导至内核的TAP接口,然后发送至绑定了DPDK的物理NIC,这是您必须要做的

  1. 使用没有Mac更新的简单应用程序,例如examples/skeletontestpmd或examples / l2fwd。
  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接口。