tapとsocket

なんとかtapを使えるようになりました。
わりと簡単にできたなと喜んでいたのですが、しばらく使ってみて、socketと一緒に使うことができないことが判明。ぬぁぜだぁーーーっと叫んでいたのですが、それもほどなく判明。メモリーのバグも見つけて直せたからいいか、という感じです。少し遊んでおります。
デバッグで、Etherealまで入れることになってしまったのですが、これって、プログラムで開いたソケットを監視することってできないんですね。なんか知らないだけかもしれないですけど。
しばらくしたら公開することにしようかな。

tapの調査

0.7.2では、
qemu_add_read_packetで、
qemu_add_fd_read_handlerが呼ばれる。
ne2000_can_receiveとne2000_receiveを登録するのに使われている。
0.8.0では、
qemu_set_fd_handler(s->fd, tap_send, NULL, s)
で、IOハンドラを登録。データが来たときに反応する。
qemu_new_vlan_clientでne2000_receiveを登録。ne2000_can_receiveは登録されなくなっている。
これで、1つのclientから出たデータを他のclientに分配するときの関数を登録している。
0.7.2では、
n = tap_win32_readで、データがあれば、
first_io_handler->fd_read
これは、ne2000_receiveが呼ばれる。
その後、
tap_win32_free_bufferしている。
などなど、やっております。

VLANのパッチとバイナリ

VLANのパッチとバイナリを作りました。
次のようにするとゲストOS同士で通信ができます。ゲストOSを2つ用意し、2つのコマンドプロンプトから起動します。
Prompt1> qemu.exe -L ./ -hda redhat1.img -net nic -net socket,listen=localhost:1234
Prompt2> qemu.exe -L ./ -hda redhat2.img -net nic,macaddr=52:54:00:12:34:57 -net socket,connect=localhost:1234
OSが立ち上がったら、IPアドレスを設定します。
Redhat1> ifconfig eth0 10.0.2.16
Redhat2> ifconfig eth0 10.0.2.17
もう少し詳しい使い方は、作成中です。
http://www.h7.dion.ne.jp/~qemu-win/download/qemu-20060102-vlan-2.patch
http://www.h6.dion.ne.jp/~kazuw/qemu-win/qemu-20060102-vlan.zip