2013-01-05 8 views
6

ネットワークカードが受信したフレームは、ドライバによって処理され、Linuxカーネルによってプロトコルスタックの上位レイヤに渡されます。カーネルがパケットをネットワーク層に渡さないようにするには?

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

私はカーネルを再コンパイルする必要があります。これはsoftirqやnetif_rxなどの関数やcpu単位のリストキューのコードを修正することで行うべきでしょうか?

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

+0

何をしますか?カーネルを変更するのは簡単ではないかもしれません。 – prehistoricpenguin

+0

あなたは本当にあなたが解決しようとしている問題を記述するべきです。以下の答えの1つは、netfilterを示唆しています。別のオプションは、rawパケットを直接取得するためにpcapライブラリを使用することです。実際に解決しようとしている問題がわかるまで、正しい答えが何であるかわかりません。 – chetan

+0

私は私の質問を編集し、実際にはさらにいくつかの提案を期待しています。 –

答えて

2

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

異なるフックでは、パケットを処理してカーネルに戻したり、ドロップしたりすることができます。変更するリターンコードです。主題のいくつかのコードと説明を与える

記事:http://www.linuxjournal.com/article/7184

このソリューションは、それはあなたの問題をRESOLVする自然な方法だということを確認してくださいあまりにも実装するのは難しいではなく、仕事、としません。

+0

はい、これは動作します。私の望むものとは少し異なりますが、実装するのが簡単です。おそらく私はすべてのパケットが制御されるようにarpパケットをドロップできるファイアウォールを見つける必要があるでしょう –

0

DPDKあなたが探しているもののように聞こえます。

関連する問題