如何在 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个选项
- KNI PMD
- TUN/TAPPMD
- 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 来完成同样的事情
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个选项
- KNI PMD
- TUN/TAPPMD
- 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 来完成同样的事情