私はdpdkを使ってパケット送信実験を行っています。しかし、受信側アプリケーションは全くパケットを受信しませんでした。 rte_eth_stats_get()から得られた統計データは、すべてのポートが多くの "rx_error"を報告していることを示しました。デバッグ後、これらのエラーはすべて「rx_length_error」という名前のエラーであることがわかりました。 googleからの説明によると、MACヘッダーの入ってくるパケット長フィールドがパケット長と一致しない場合、長さエラーが発生します。しかし、私が知る限り、MACヘッダーには長さフィールドはありません。NICはどのような場合にrx_length_errorを報告しますか?
私の質問はどのようにNICは長さフィールドなしでこの長さエラーを報告するのですか?
ありがとうございました!
私はその質問のあなたの提案としてパケットにether_hdrを追加しました。それはとてもうまく機能しました。ご協力いただきありがとうございます。しかし、私はまだパケットがether_hdrなしで正しく送信される理由について混乱していますか?たとえば、単純な文字列をtx mbufに追加しただけで、受信者はrxエラーなしでこれらの文字列をすべて受け取ることができます。基本的にはランダムなデータがEthertypeフィールドに挿入されているので、 –
@ K.Xuです。したがって、それは動作する場合もあれば、そうでない場合もあります。それはNICにも依存しますので、82599ではいくつかのEthertypesを削除し、別のNICではいくつかのNICを削除します。いくつかのCPUサイクルを節約するために、すべてのmbufに同じEthernetヘッダーをあらかじめ入力することができます。しかし、イーサネットヘッダーの代わりにデータを挿入することはかなり危険です。 –
このフィルタ戦略は、dpdkドライバコードで変更できますか?それとも、NICのハードウェアで実装されているだけですか? –