如何在DPDK testpmd中设置从一个网卡到另一个网卡的循环转发模式?

How to set a loop forwarding mode from one NIC to another in DPDK testpmd?

Testpmd 在 Hyper-V VM 中 运行,并且有两个 NIC 连接到“internal virtual switch". I just want to test the availability of netvsc PMD.

./app/dpdk-testpmd -l 2,3 -- --total-num-mbufs=2048 -i --portmask=0x3 --port-topology=loop

我用过“start”或“start tx_first”,然后用“show port stats all”查看。两个 NIC 上都没有 Tx 数据包或 Rx 数据包。

然后我使用“set fwd txonly”,我可以在两个网卡上找到Tx-packets,但这不是我想要的。那么我可以做什么步骤呢?

DPDK应用testpmd不是一个会自动生成和发送数据包的数据包生成器。但是有一个选项 --tx-first 允许从每个接口发送突发(默认 32)个虚拟数据包。

由于您的环境是物理连接的,所以这应该可行。但我强烈建议首先检查 Linux 驱动程序是否 ping 或 arp 能够首先到达交叉连接的接口。

注:

  1. 我强烈建议阅读 testpmd doc 以了解更多详细信息
  2. 启用混杂模式使用选项 set promisc all on

通常,人们希望在与 testpmd 使用的一对端口相对的一侧使用数据包生成器。这样的生成器开始发送数据包,而 testpmd 只是在一个端口上接收它们并从另一个端口传回。这个 what port-topology of type paired代表什么,这个port-topologytestpmd中默认使用。另一个参数 forward-mode 又默认设置为 io,这意味着 testpmd 在发送数据包之前 不会 更改接收到的数据包返回(例如,不交换 MAC 地址等)。

但是,在您的情况下,没有使用数据包生成器,这意味着 testpmd 必须自己生成并发送一批数据包才能启动转发。这是通过指定选项 --tx-first.

来完成的

但除了省略选项 --tx-first 之外,您出于某种原因使用了选项 --port-topology=loop,这可能是您的设置无法正常运行的原因。变体 loop 意味着给定端口(例如 Port 0)接收到的数据包必须从同一端口(即 Port 0)传回。您可能需要的是 --port-topology=paired,正如我之前所说,默认情况下使用它。

所以,总而言之,您应该尝试 运行 testpmd 如下:

./app/dpdk-testpmd -l 2,3 -- --total-num-mbufs=2048 -i --portmask=0x3 --tx-first

请注意,这种转发方式是自动启动的,但您不会得到 testpmd> 提示以输入命令。如果您希望自动启动转发,同时获得交互式命令提示符,请尝试 运行 testpmd 这样:

./app/dpdk-testpmd -l 2,3 -- --total-num-mbufs=2048 -i --portmask=0x3 --tx-first --auto-start -i