如何在 VM 中从 DPDK 运行 连接到互联网

How to connect to the internet from DPDK running in a VM

DPDK 是内核绕过数据包处理的库:https://www.dpdk.org/. F-Stack is a TCP/IP library built atop it: https://github.com/F-Stack/f-stack。我已经设置了一个 Linux 带有两个 NIC 的 VMWare VPN,将第二个 NIC 交给了 DPDK,并且正在尝试 运行 在其上使用 F-Stack 和 DPDK 连接到一个非常简单的测试应用程序互联网。然而,这是失败的(无法连接)。

当我尝试 运行 一个简单的服务器时,它也失败了,因为我无法从虚拟机中的 Curl 或浏览器 运行 连接到它。

测试应用程序没有显示任何错误(DPDK 初始化工作正常),并且当 DPDK 内容被替换为不绕过内核的标准 Linux 网络功能时行为正确。

我的问题是,我需要做些什么才能使上述设置正常工作,以便我 VM 中第二个 NIC 上的 DPDK 运行ning 可以连接到互联网?例如。在某处设置某种映射,或更改 VM 上的虚拟网络连接类型(当前设置为 NAT)。我的网络知识有限,所以很可能我遗漏了一些非常基本的东西。

根据评论的更新总结答案为

使用DPDK直接在用户空间和内核之间发送数据包,有3个选项

  1. KNI PMD
  2. TUN/TAPPMD
  3. veth 与一个接口通过 PCAP PMD 连接到 DPDK。

最简单的尝试方法是使用 DPDK example/skeleton./build/basicfwd -l 3 --vdev=net_tap0,ifaace=dpdk-kerenl0 -w [pcie bus address for DPDK NIC-2]。这将允许数据包通过 DPDK 通过内核发送和接收(其中 DPDK 将充当直通)。您也可以修改 basicfwd.c 来处理您想要的数据包。

如果使用 FSTACK,我谦虚地请求检查 carrier 部分 https://github.com/F-Stack/f-stack/blob/dev/README.md 这利用 KNI 或 veth 来完成同样的事情