mones

NetServer、libnetを追加

uIPをラップしたサーバー(NetServer)とネットサーバーを利用するライブラリ(libnet)をCVSに追加しました。 以前から言っている通りネットワーク実装は、他の方の実装もあるので、NetServerはあえてcoreにはいれず、contrib_0.3に入れてあります。 libnetを利…

課題洗い出し

uIPベースに作ったTCPClientの実装の課題洗い出しと優先順位付け。 ↑優先度高い coreに移動 MSGを正しい位置で定義する 共有メモリの解放について実装方針を決める spin lockなくす APIにまとめる QEMUが途中できれる件を調べる ↓優先度低い 最新版QEMUでTAP…

Webクライアント

uIP上で動作するTcpClientがMonaで動きました。 我が家の無線LANアクセスポイントにアクセスしています。 これにAPIを用意すれば、id:Baysideさんがブラウザを作ってくれるに違いない(笑)。 あと名前解決もしないとなぁ。

uIPのTcpClientをMonaに移植

uIPをラップして簡単にTcpClientを作成可能にしたuIPをMonaに移植。 コンパイルが通るところまで。動作未確認。

NICドライバのReadにタイムアウトを指定する

前回まではuIPで簡単に、ネットワークアプリがかけるようにWindows上で開発を進めていました。 これをMonaに移植するに当たって、Mona側のNICドライバをちょこっと修正しなければなりません。 Readの仕様を ・現状:Readを発行するとデータが受信されるまで…

uIPでHTTP

const char* msg = "GET /file HTTP/1.0\r\nServer:192.168.11.1\r\n\r\n"; int msgLength = strlen(msg); Buffer data(msg, &msg[msgLength]); dword handle = client->Connect(IPAddress(192, 168, 11, 1), 80); if (handle == 0) return NULL; dword i = …

uIP@スタバ

久しぶりにスタバで作業。 ネットワークAPIの実装をしているのにIP Unreachableな場所で作業するのがなんとも。 TcpClientのコードをほぼ書き上げる。 Effective STLを読みながら、試験的にSTLを使ってみています。 typedef std::vector Buffer; TcpClientの…

あいかわらずuIP作業中

Effective STLを読みながらコードを書いているのでゆっくりめ。 頭を悩ませている原因が、クラインアント用API提供とサーバー用API提供APIをひとまとめで実装しようとしていることだと言う事に気づいた。 まずはクライアントをTcpClientとして実装しよう。 …

uIPの中でHandleにできそうなもの

uIPのなかでコネクションと1対1に結びついているのはuip_connだから、これをHandleとしようとかたくらんでいます。 さっきから我が家の無線LANアクセスポイントに変なコネクションを送りつけて実験していたら、アクセスポイントがハングしました。 ごめんよ…

NetServerの送信がうまくいかない件

WinPcapを利用したデバイスドライバがread時にブロックしているのがだめだということが分かった。 pcap_open_liveの引数でタイムアウトを1msにして、readでタイムアウト時は0を返すようにしたら送信がうまくいくようになった。 その後、べた書きであれこれ整…

NetServer実装の悩み

uIPを利用してNetServerを実装する。そのNetServerはC#のようなネットワークAPIを提供する。 そういう形を目指しているのですが、一つ前のエントリーの通りこれはかなり難しそう。 一つ前のエントリーで実現したことは NetServer内にそのままコードを直書き …

uIPのイベント

uIPで簡単なHTTPクライアントを書いてみる。 大げさなものではなくGETしてそれを画面に出力するだけ。 まずはuIPのドキュメント通りに、各状態に合わせたハンドラを呼んでやる void NetServer::DoEvent() { if (uip_aborted()) { AbortedHandler(); } if (ui…

NetServer with uIP

NetServerを経由してのパケットの送信です。 uIP上でのパケット送信には2種類あって パケット受信ループからそのコネクションに対してパケット送信 コネクションをオープンして送信 前者の場合はWebサーバーが動いたときに検証済みだったのですが、後者を今…

FreeBSDのNICドライバを探す

FreeBSDのNICドライバを移植できたらうれしいよね、ということで。 デーモン君のアドバイス通り進めましょう。 1.Virtual PC, VMwareのNICは? それぞれのVMのNICはどのカードをエミュレートしているか。 ここで調べましょう。 [VM]: Virtual Machine の Har…

相変わらずpingに応答しない

Mona君がWindows君の ping に応答しません。 でもEthereal上では、replyしているんですよねぇ。 今話題 のEthereal でのDumpはこちら WindowsのICMPエコー要求に対して、MonaがICMPエコー応答すれば良いのだろうと思っていたのですが、違うのかなぁ。 こうい…

ARPによるMACアドレス解決

ping の送信元にICMPエコー応答するには、相手のMACアドレスが必要で、そのためにARP(Address Resolution Protocol)が必要です。 このプロトコルで、IPアドレス→MACアドレスの変換が行われます。 仕組みはいたって簡単で、同一ネットワーク内にブロードキャ…

EtherealでARP応答・要求の様子を覗き見る

Etherealというツールがあります。 http://www.space-peace.com/ethereal/ethereal.htmこれを利用すると Mona@QEMU と Windowsのパケットのやり取りを見ることが出来ます。 Ethereal起動 Capture-Optionsを選択 監視するNICを選びます。今回はTAPです。 Capt…

ARPキャッシュにのったよ

monesやったこと Config作成 IPアドレス Util作成 Arp応答 成果と確認 Mona側でarptestアプリを起動する。 Windowsのcmd.exe上で ping 192.168.100.2 arptestアプリがリクエスト受信・応答 cmd.exeで arp -a をすると Interface: 192.168.100.1 --- 0x30004 …

NICドライバの抽象クラスとか

成果物はこちら mones整理2 main.cppでやっていたことをEther.cppに追い出す 残る課題 Ether::saveFrame と Ether::receiveFrame を別スレッドにする Etherクラスの中のARP関連をARPにおいだす mones次の課題 サーバー化 割込み時はフレームの保存だけ さて…

Monesお勉強

ネットワーク対応へのスタンスは 他の実装 (id:Yamamiさん junjunnさん)が採用されることになり自分のが無駄になってもよい とにかく勉強 ドライバ以外はフルスクラッチでもよいじゃないか 仕事もあるし能力も低いので皆のようなペースでは実装できないかも …