2017-05-30 187 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中實現? –

相關問題