mones
uIPをラップしたサーバー(NetServer)とネットサーバーを利用するライブラリ(libnet)をCVSに追加しました。 以前から言っている通りネットワーク実装は、他の方の実装もあるので、NetServerはあえてcoreにはいれず、contrib_0.3に入れてあります。 libnetを利…
uIPベースに作ったTCPClientの実装の課題洗い出しと優先順位付け。 ↑優先度高い coreに移動 MSGを正しい位置で定義する 共有メモリの解放について実装方針を決める spin lockなくす APIにまとめる QEMUが途中できれる件を調べる ↓優先度低い 最新版QEMUでTAP…
uIP上で動作するTcpClientがMonaで動きました。 我が家の無線LANアクセスポイントにアクセスしています。 これにAPIを用意すれば、id:Baysideさんがブラウザを作ってくれるに違いない(笑)。 あと名前解決もしないとなぁ。
uIPをラップして簡単にTcpClientを作成可能にしたuIPをMonaに移植。 コンパイルが通るところまで。動作未確認。
前回まではuIPで簡単に、ネットワークアプリがかけるようにWindows上で開発を進めていました。 これをMonaに移植するに当たって、Mona側のNICドライバをちょこっと修正しなければなりません。 Readの仕様を ・現状:Readを発行するとデータが受信されるまで…
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 = …
久しぶりにスタバで作業。 ネットワークAPIの実装をしているのにIP Unreachableな場所で作業するのがなんとも。 TcpClientのコードをほぼ書き上げる。 Effective STLを読みながら、試験的にSTLを使ってみています。 typedef std::vector Buffer; TcpClientの…
Effective STLを読みながらコードを書いているのでゆっくりめ。 頭を悩ませている原因が、クラインアント用API提供とサーバー用API提供APIをひとまとめで実装しようとしていることだと言う事に気づいた。 まずはクライアントをTcpClientとして実装しよう。 …
uIPのなかでコネクションと1対1に結びついているのはuip_connだから、これをHandleとしようとかたくらんでいます。 さっきから我が家の無線LANアクセスポイントに変なコネクションを送りつけて実験していたら、アクセスポイントがハングしました。 ごめんよ…
WinPcapを利用したデバイスドライバがread時にブロックしているのがだめだということが分かった。 pcap_open_liveの引数でタイムアウトを1msにして、readでタイムアウト時は0を返すようにしたら送信がうまくいくようになった。 その後、べた書きであれこれ整…
uIPを利用してNetServerを実装する。そのNetServerはC#のようなネットワークAPIを提供する。 そういう形を目指しているのですが、一つ前のエントリーの通りこれはかなり難しそう。 一つ前のエントリーで実現したことは NetServer内にそのままコードを直書き …
uIPで簡単なHTTPクライアントを書いてみる。 大げさなものではなくGETしてそれを画面に出力するだけ。 まずはuIPのドキュメント通りに、各状態に合わせたハンドラを呼んでやる void NetServer::DoEvent() { if (uip_aborted()) { AbortedHandler(); } if (ui…
NetServerを経由してのパケットの送信です。 uIP上でのパケット送信には2種類あって パケット受信ループからそのコネクションに対してパケット送信 コネクションをオープンして送信 前者の場合はWebサーバーが動いたときに検証済みだったのですが、後者を今…
FreeBSDのNICドライバを移植できたらうれしいよね、ということで。 デーモン君のアドバイス通り進めましょう。 1.Virtual PC, VMwareのNICは? それぞれのVMのNICはどのカードをエミュレートしているか。 ここで調べましょう。 [VM]: Virtual Machine の Har…
Mona君がWindows君の ping に応答しません。 でもEthereal上では、replyしているんですよねぇ。 今話題 のEthereal でのDumpはこちら WindowsのICMPエコー要求に対して、MonaがICMPエコー応答すれば良いのだろうと思っていたのですが、違うのかなぁ。 こうい…
ping の送信元にICMPエコー応答するには、相手のMACアドレスが必要で、そのためにARP(Address Resolution Protocol)が必要です。 このプロトコルで、IPアドレス→MACアドレスの変換が行われます。 仕組みはいたって簡単で、同一ネットワーク内にブロードキャ…
Etherealというツールがあります。 http://www.space-peace.com/ethereal/ethereal.htmこれを利用すると Mona@QEMU と Windowsのパケットのやり取りを見ることが出来ます。 Ethereal起動 Capture-Optionsを選択 監視するNICを選びます。今回はTAPです。 Capt…
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 …
成果物はこちら mones整理2 main.cppでやっていたことをEther.cppに追い出す 残る課題 Ether::saveFrame と Ether::receiveFrame を別スレッドにする Etherクラスの中のARP関連をARPにおいだす mones次の課題 サーバー化 割込み時はフレームの保存だけ さて…
ネットワーク対応へのスタンスは 他の実装 (id:Yamamiさん junjunnさん)が採用されることになり自分のが無駄になってもよい とにかく勉強 ドライバ以外はフルスクラッチでもよいじゃないか 仕事もあるし能力も低いので皆のようなペースでは実装できないかも …