2016-11-24 18 views
0

私は最近働いているネットワークプロジェクトの助けと意見アドバイスを探しています。これには、Linuxマシンがパッシブネットワークアプライアンスである必要があります。NICのイーサネットフレーム

ネットワークパケットは、1つのネットワークインターフェイスから入ってきて、データを変更せずに別のインターフェイス(net-eth0 - > Linux PC - eth1 - > net)から出てきます。

Linuxシステムで実行されるアプリケーションは、パケットの順序のみを変更します。それは "愚かな"ネットワークエミュレータアプリケーションになるだろう。

RAWソケットを使用して最初の実装を行いました。パケットがユーザー空間に到着するたびにread()が呼び出され、イーサネットパケットがNICに送信されるときにwrite()が呼び出されます。

Linuxのネットワークスタックをバイパスして、RAWソケットよりも実用的で直接的な方法があるかどうかを知りたいと思います。

+0

Linuxネットワークスタックをバイパスすることはできません。その方法は、おそらく最も簡単な方法です。 実用的にはどういう意味ですか? –

+0

実用的な方法は、実装の技術的な部分に行きます。ソケットの実装には、ブロックされていないIOを持つtx-rxメカニズムが必要です。これは、Cの下でselect()とpthreadsを利用する最初の実装方法です。より良い設計哲学はありますか? また、中間システムがそのネットワークトラフィックをすべて処理しない方法を探しています。 2つのインターフェイス間でエミュレーションアプリケーションのみを実行する必要があります。 – cyberrobot

+0

あなたができることは、 'netfilter'フックを作成し、あなたのパケットを受信して​​すぐに送信することです。こうすることで、あなたのパケットはユーザ空間に移動する必要がなくなり、より高速なカーネル空間内で処理を行うことができます。 –

答えて

0

カーネルをバイパスしたいのであれば、LinuxのDPDKとFreeBSDのNetMapはこれを行うためのオプションです。

0

実際これはLinuxのdpdkで行うことができます。 dpdkツリーのexamplesフォルダーには、l3fwとl2fwdサンプルアプリケーションがあり、あなたに影響を与える可能性があります。また、dpdkを使用できるLinux Foundationがホストするfd.ioプロジェクトであるvppの使用を検討してください。

ラミーローゼン

関連する問題