Mellanox ConnectX-3不支持DPDK数据包分段吗?

时间:2018-09-20 20:05:50

标签: dpdk

您好Stackoverflow专家

我在Mellanox NIC上使用DPDK,但在应用数据包方面很挣扎 DPDK应用程序中出现碎片。

sungho@c3n24:~$ lspci | grep Mellanox
81:00.0 Ethernet controller: Mellanox Technologies MT27500 Family
[ConnectX-3]

dpdk应用程序(l3fwd,ip碎片,ip汇编)没有 将接收到的数据包识别为ipv4标头。

首先,我在发送ipv4标头时制作了自己的数据包,所以我 假设我是用错误的方式制作数据包的。

因此,我使用了DPDK-pktgen,但使用了dpdk-application(l3fwd,ip-fragmentation, ip-assemble)无法识别ipv4标头。 作为最后的手段,我测试了dpdk-testpmd,并在 状态信息。

********************* Infos for port 1 *********************
MAC address: E4:1D:2D:D9:CB:81
Driver name: net_mlx4
Connect to socket: 1
memory allocation on the socket: 1
Link status: up
Link speed: 10000 Mbps
Link duplex: full-duplex
MTU: 1500
Promiscuous mode: enabled
Allmulticast mode: disabled
Maximum number of MAC addresses: 127
Maximum number of MAC addresses of hash filtering: 0
VLAN offload:
strip on
filter on
qinq(extend) off
No flow type is supported.
Max possible RX queues: 65408
Max possible number of RXDs per queue: 65535
Min possible number of RXDs per queue: 0
RXDs number alignment: 1
Max possible TX queues: 65408
Max possible number of TXDs per queue: 65535
Min possible number of TXDs per queue: 0
TXDs number alignment: 1
testpmd> show port

根据DPDK文档。 应该显示端口1的信息状态的流类型,但是我的显示 不支持任何流类型。 以下示例应该是需要以流类型显示的示例:

Supported flow types:
ipv4-frag
ipv4-tcp
ipv4-udp
ipv4-sctp
ipv4-other
ipv6-frag
ipv6-tcp
ipv6-udp
ipv6-sctp
ipv6-other
l2_payload
port
vxlan
geneve
nvgre

那么,我的网卡Mellanox Connect X-3不支持DPDK IP分段吗?或者是 在尝试进行数据包分段之前,还需要进行其他配置吗?

-[编辑] 因此,我检查了来自DPDK-PKTGEN的数据包以及DPDK应用程序接收的数据包。 我收到的数据包正是我从应用程序发送的数据包。 (我得到了正确的数据)

问题始于代码

struct rte_mbuf *pkt
RTE_ETH_IS_IPV4_HDR(pkt->packet_type) 

这确定数据包是否为ipv4。 在DPDK-PKTGEN和DPDK应用程序中,pkt-> packet_type的值均为零。如果pkt-packet_type为零,则DPDK应用程序将此数据包视为NOT IPV4标头。

此基本类型检查器从一开始就是错误的。 因此,我认为是DPDK示例错误或NIC由于某种原因不能支持ipv4。

我接收到的数据在开始时会收到某种格式,但我收到正确的消息,但是在那之后,数据包序列在MAC地址和数据偏移量之间有不同的数据

enter image description here

所以我假设他们是对数据的不同解释,并得到错误的结果。

1 个答案:

答案 0 :(得分:1)

我敢肯定,包括Mellanox ConnectX-3在内的任何NIC都必须支持IP片段。

您所指的流类型用于Flow Director,即将特定流映射到特定RX队列。即使您的NIC不支持Flow Director,IP分片也没有关系。

我猜安装程序或应用程序中有错误。您写道:

  

dpdk应用程序未将接收到的数据包识别为ipv4标头。

我会仔细研究一下。尝试使用dpdk-pdump转储那些数据包,甚至尝试简单地使用rte_pktmbuf_dump()转储控制台上的接收数据包

如果您仍然怀疑NIC,最好的选择是将其临时替换为另一个品牌或虚拟设备。只是确认它确实是NIC。

编辑:

看看mlx4_ptype_table是否有碎片化的IPv4数据包,它应该返回packet_type并设置为RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_FRAG

请注意,该功能已在DPDK 17.11中添加。

我建议您在控制台上转储pkt->packet_type,以确保它确实为零。另外,请确保您已安装最新的libmlx4