mones2/02.ARP応答とread・writeインタフェース


Top / mones2 / 02.ARP応答とread・writeインタフェース

これは何か

ARP要求を常に受け付けていて、ARP応答を返します。
ARP(Address Resolution Protocol)は、IPアドレス -> MACアドレスの変換を行います。

下の使用例ではWindowsが 「192.168.100.2 のIPアドレスを持つのは誰だ?」 とARP要求を出しています。
それに対して Mona が 「私が 192.168.100.2のIPアドレスを持ち MACアドレスは xxxxxxxxです」と応答しています。

ARP要求・応答がうまくいったかどうかを知る方法は2つあります。

  1. Windows側で arp -a としたときに表示される、ARPキャッシュ(IPアドレス⇔MACアドレスの対応表キャッシュ)が正しく更新される=うまくいっている
  2. Etherealを用いてパケットレベルで追う。

ここまでの成果

初版
リファクタリング版
リファクタリング版(外からみたアプリケーションの動きには変化なし)
最終版。mutex廃止。メッセージによるフレームやりとりなど。
arptest.png
arpa.png

動作について

QEMUで動作します。

  1. contrib_0.3Net/monesにsampleAppをおき、arptest で make && make install します。
  2. MonaNew/tool/mkimg で make して、ISOをつくります。
  3. QEMUでMonaを起動して、arptest を実行して、Windows側からpingを打つと動作します
  4. WindowsとQEMUのネットワーク連携については、Yamamiさんのまとめをご参照ください。

課題

最終版

このアプリには2つのスレッドがある
1.ドライバスレッド
2. ARPサービススレッド
2のスレッドが nic_write, nic_readの関数経由でドライバにアクセスしてARPのサービスを提供する
ARPサービス⇔nic_read/nic_write⇔NicServer⇔Nic

ARPサービスとnic_read/nic_writeは同一スレッド(スレッドAと呼ぶ)
NicServerとNicは同一スレッド(スレッドBと呼ぶ)

スレッドAとスレッドBはメッセージ機構を利用して、Frameの取得・提供を行う。
なおFrameデータ自体のやり取りは、メッセージで行わずえせ共有メモリ(というかグローバル変数)を利用する。
これは将来 NicServer と ARPサービスが別プロセス内で実行されるようになったときに共有メモリで置き換えられる。

コメント

コメントはありません。 コメント/mones2/02.ARP応答とread・writeインタフェース?

お名前:

MENU

now: 2

リンク


最新の20件
2018-05-03 2017-09-29 2017-04-25 2017-01-10 2016-12-11 2016-10-04 2016-08-14 2016-06-05 2016-05-29 2016-04-15 2015-12-28 2013-02-25 2013-02-21 2013-02-20 2013-02-12 2013-02-11 2013-02-10
最新の20件
2010-02-01 2010-01-31 2010-01-30 2010-01-29 2010-01-16

Counter: 2966, today: 1, yesterday: 2

添付ファイル: filesampleApp20051108.zip 382件 [詳細] filesampleApp20051106.zip 270件 [詳細] filesampleApp20051031.zip 394件 [詳細] filesampleApp20051030.zip 349件 [詳細] filearpa.png 496件 [詳細] filearptest.png 482件 [詳細] filesampleApp20051029.zip 406件 [詳細]

リロード   新規 編集 凍結解除 差分 添付 複製 改名   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS

Last-modified: 2008-03-28 (金) 15:48:00 (3796d);  Modified by mona
PukiWiki 1.4.6 Copyright © 2001-2005 PukiWiki Developers Team. License is GPL.
Based on "PukiWiki" 1.3 by yu-ji
Powered by PHP 5.2.17
HTML convert time to 0.054 sec.