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の使い方を作ったので、ホームページの方を更新しました。なかなかうまく書けないなと思ったりするのですが、精一杯なので…。
次は、TAPのパッチを見ようと思います。

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