6

ネットワーク カードによって受信されたフレームは、ドライバーによって処理され、Linux カーネルによってプロトコル スタックの上位レイヤーに渡されます。

カーネルがパケットをネットワーク層に渡さないようにする簡単な方法はありますか? データリンク層からフレームを受信し、すべてのパケットを自分で処理できるようにするには (おそらくアプリケーション層のプログラムを書き換える必要があります)。

カーネルを再コンパイルする必要があると思います。これは、softirq または netif_rx のような関数または cpu ごとのリスト キューのコードを変更することによって行う必要がありますか?

実際、何人かのクラスメートと私は、演習のためにユーザー空間に単純化されたバージョンの TCP/IP プロトコル スタックを実装しようとしています。UNP、APUE2、TCP/IP の図解 v1、v2、Linux ネットワーク アーキテクチャ、Linux ソース コードなどの本を読んでいます。他にも問題があります。別の質問を投稿する必要がありますか?

4

2 に答える 2

2

自分でパケットを処理したい場合は、カーネル モジュールnetfilterを使用していくつかのフックを実装できます。コードの例を簡単に見つけることができます。

さまざまなフックで、パケットを処理してカーネルに戻すかドロップするかを選択できます。変更するのは単なるリターン コードです。

件名のコードと説明を提供する記事: http://www.linuxjournal.com/article/7184

この解決策は機能し、実装するのはそれほど難しくありませんが、問題を解決する自然な方法であるかどうかはわかりません.

于 2013-01-07T16:09:03.163 に答える
0

DPDKは、探しているもののように聞こえます。

于 2015-06-27T00:39:39.993 に答える