仮想NIC

どこの誰が書いたかも良く分からないTCP/IPプロトコルスタックを動かそうとしています。

本来のターゲットは小さな箱の中ですが,ソースレベルではBSD風環境あるいはLinux風環境で充分コンパイル可能なはず,です。

案の定,あっさりコンパイルできたのですが,動作させるには,イーサネットのパケットを送受信できる環境が必要となります。しかしながら,Windows上ではちょっと難しいのです。

参考:
WinsockFAQ:raw ソケットを使うにはどうすればよいのですか?

生ソケットとイーサパケットドライバはビミョウにというか根本的に違うような気もしますが,細かいことを気にしないでゴー。

例えば,Linuxならプロミスキャスを利用すればかなり簡単に似たようなことは実現可能です。そんなサンプルを探していて見つけたのが,以下の記事です。

第1回目の技術「プロミスカスモード」[前編] デザインの時間 −HUBを作ろう−(1/4)

実際,手元のVine on VPC2004環境で動かしてみるとあっさり動きます。

20060224a

Winsockはクソ!などと遠吠えしていても仕方がありません。我々にはWinPcapがあるじゃないですか。え?TAPを使いたい?知らんがな,勝手にしなはれ。

とにかくこれで,閉じた世界と物理NICをつなげそうな気がしてきました。
#そこらのエミュもみんなそんな風にしてるけどな。

パターン化しておけば,似たような仕事を瞬殺できる道具になるでしょうな。
#ていうかLinuxかBSD上でやりゃぁいいんじゃないの?