Japan QualNet Community Forums Japan QualNet Community Forums
Welcome Guest 
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
検索
メインメニュー
アクセスカウンター
2024/05/19:11/11
2024/05/18:20/24

2024/03/20より398/1410
人気モジュール
No.1: フォーラム 10
No.2: QualNet概要 1
日曜日からの合計
人気Browser&OS
No.1:巡回ロボット11

No.1:どっかの巡回ロボット10
No.2:Baidu巡回ロボット1

日曜日からの合計
メイン
   Link (MAC) Layer Protocol Implementation & Model Development
     RTS/CTSなどのソースについて
投稿するにはまず登録を

題名 投稿者 日時
   RTS/CTSなどのソースについて yochaso 2011/5/9 18:24
   » Re: RTS/CTSなどのソースについて ino 2011/5/10 11:13
       Re: RTS/CTSなどのソースについて yochaso 2011/5/10 15:43
フラット表示 前のトピック | 次のトピック
投稿者 スレッド
ino
投稿日時: 2011/5/10 11:13
新米
登録日: 2011/1/24
居住地:
投稿: 16
Re: RTS/CTSなどのソースについて
> ソースを解読するのに困難で,アドバイスなどいただけると有難いです.
私がこれに取り組むなら、というものを書いてみます。
ちなみにEclipseやVisualStudioなどのIDEに取り込んで
参照検索や関数ジャンプなどの機能ができる環境を前提としています。
VisualStudioはQualNet-5.0.2-ProgrammersGuide.pdfの11ページ
あたりに記載があります。

・RTS/CTS+Data+ACKの一連の手順が書かれている箇所(手を加えられる箇所)
例えばRTS受信イベントを処理のきっかけとして探しに行きます。
全文検索で「RTS」をさがすと177行くらい見つかりますが、
その結果から「receive」なんていうキーワードで絞ると
「 // Received RTS,・・・」
というのが見つかりました。
mac_dot11.cppのMacDot11ProcessMyFrame()という関数です。
QualNetでは「〇〇Process××()」という関数が〇〇モジュールでの
イベント処理関数になっており、switchでイベント種別によって
処理を振り分けて記述している場合が多いです。
上記の検索で見つかったのは「DOT11_RTS」というenumで振り分けられた先で
RTS受信時の処理っぽいブロックに飛んできました。
このへんをざっと見ているとMacDot11StationTransmitCTSFrame()という
関数が見つかります。さらにこの関数に飛んでみると、関数の最後のほうで
MacDot11StationStartTransmittingPacket()
もしくは
MacDot11StationStartTransmittingPacketDirectionally()
という関数のどちらかが呼ばれパケット送信処理をしているのだと
推測できます。しかも、引数で「dot11->sifs」を与えているところを見ると
このへんをいじればいいと考えられます。この値自体を何かしらの条件で
変えたいならば、さらにこのメンバ変数が左辺値参照されている箇所を
検索し・・・といった具合です。

・パケット衝突を判定している箇所
(キャプチャ効果を再現するためパケット衝突後に成否を任意で変更したい)
ちょっと意図が分かりにくいですが、例えばRTSをほぼ同時に複数の端末が
だしてしまい、CTSを受信できなかった場面を見たいとしますと、以下の関数
MacDot11StationRTSTransmitted()
なんかが手がかりになるかと思います(holdForCts待つタイマをセットしているので
さらにこれが弾ける部分を探す。タイマ関連はMacDot11HandleTimeout()が
処理の入口)。
フラット表示 前のトピック | 次のトピック
Copyright c KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
XOOPS Cube PROJECT