MonaがWebサーバになった日 2005/12/31

uIPが正常動作し、MonaがWebサーバになりました。
涙が出そうなくらいうれしいですね。

1.MonaでuIPを起動します。


2.ブラウザからアクセスします


3.Monaからコンテンツが返ってきます


4.Live HTTP headersで見てみると

HTTP/1.x 200 OK
Server: Mona OS 0.3.0Alpha6 uIP/0.9 (http://dunkels.com/adam/uip/)
Content-Type: text/html

('ー` ;) ナケル

まとめ

このWebサーバ機能はuIPのhttpdをそのまま利用しています。
Webサーバは今のところ、ファイルシステムアクセスをしていません(ソースに埋め込まれたコンテンツを返しています。ファイルシステムにつなぐコードを書くのは正月ごろに・・・)。
QEMUで動作するISOイメージはこちら(IPアドレスが192.168.100.2に固定されています)
mona-iso-20051231.zip


この機能が実現できたのは、id:Yamamiさんの先行実装であるMonesとその成果物である、NICドライバがあってこそ実現できたものです。
この場を借りてお礼を申し上げます。

追記 WinPcap版からMonaへの移植の際のトラブル

  • ぬるぽで落ちる
    • →データ構造体を間違える単純ミス
  • 送信がうまくいかない
    • Mona側のNICドライバはEther Frameを独自に出力していたので、uIPの出力と被って2重出力となっていた。結果としてARPのヘッダが壊れた。
    • 修正箇所 NE2000.cpp(宛先・送信元・プロトコルIDの書き込みをやめた)
    // 宛先アドレスの書き込み
//    ne_pio_writemem( ptx_dest, NE_TX_PAGE_START << 8, 6 );
    // 送信元アドレスの書き込み
//    ne_pio_writemem( ether_mac_addr, ( NE_TX_PAGE_START << 8 ) + 6, 6 );
    // プロトコルIDの書き込み
//    ne_pio_writemem( (byte *)&ptx_type, ( NE_TX_PAGE_START << 8 ) + 12, 2 );
    // データ部分の書き込み
//    ne_pio_writemem( ptx_packet, ( NE_TX_PAGE_START << 8 ) + 14, ptx_size );
    ne_pio_writemem( ptx_packet, ( NE_TX_PAGE_START << 8 ) , ptx_size );