メイン 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()が 処理の入口)。 |
フラット表示 | 前のトピック | 次のトピック |