0
我用DPDK做分组传输实验。但是,接收器应用程序根本没有收到任何数据包。从rte_eth_stats_get()得到的统计数据显示所有端口都报告了很多“rx_error”。调试后,我发现所有这些错误都是名为“rx_length_error”的错误。谷歌的一个解释是,如果MAC报头中的传入数据包长度字段与数据包长度不匹配,则会发生长度错误。但是,据我所知,MAC头中没有长度字段。NIC在什么情况下会报告rx_length_error?
所以我的问题是如何进行情报委员会的报告这个长度误差没有长度字段?
谢谢你的帮助!
我加在数据包中的ether_hdr在这个问题您的建议和它的工作非常出色。谢谢你的帮助。但是我仍然为什么在没有ether_hdr的情况下正确传输数据包仍然感到困惑?例如,我只是将一个简单的字符串添加到tx mbuf中,并且接收者也可以接收所有这些字符串,而没有任何rx错误。 –
@ K.Xu,因为基本上随机数据被插入Ethertype字段。所以在某些情况下它有效,在其他情况下则不会。它也将取决于NIC,因此在82599上它会删除一些Ethertypes,而在另一个NIC上它可能会丢掉其他一些...为了节省一些CPU周期,可以在所有mbufs上预先填充相同的以太网头。但插入数据而不是以太网报头是非常不安全的。 –
可以在dpdk驱动代码中修改此过滤策略吗?或者它只是由硬件在NIC中实现? –