2017-05-30 514 views
0

我用DPDK做分组传输实验。但是,接收器应用程序根本没有收到任何数据包。从rte_eth_stats_get()得到的统计数据显示所有端口都报告了很多“rx_error”。调试后,我发现所有这些错误都是名为“rx_length_error”的错误。谷歌的一个解释是,如果MAC报头中的传入数据包长度字段与数据包长度不匹配,则会发生长度错误。但是,据我所知,MAC头中没有长度字段。NIC在什么情况下会报告rx_length_error?

所以我的问题是如何进行情报委员会的报告这个长度误差没有长度字段?

谢谢你的帮助!

回答

1

有人指出在your previous question here的以太网帧头需要正确设置,尤其是以太网类型。

一些以太类型意味着你有一个固定长度的帧,所以82599识别这些帧,并把它们如果给定的以太类型预期的长度不符合实际的帧大小。

+0

我加在数据包中的ether_hdr在这个问题您的建议和它的工作非常出色。谢谢你的帮助。但是我仍然为什么在没有ether_hdr的情况下正确传输数据包仍然感到困惑?例如,我只是将一个简单的字符串添加到tx mbuf中,并且接收者也可以接收所有这些字符串,而没有任何rx错误。 –

+0

@ K.Xu,因为基本上随机数据被插入Ethertype字段。所以在某些情况下它有效,在其他情况下则不会。它也将取决于NIC,因此在82599上它会删除一些Ethertypes,而在另一个NIC上它可能会丢掉其他一些...为了节省一些CPU周期,可以在所有mbufs上预先填充相同的以太网头。但插入数据而不是以太网报头是非常不安全的。 –

+0

可以在dpdk驱动代码中修改此过滤策略吗?或者它只是由硬件在NIC中实现? –

相关问题