Programming_qualnet
Qualnetのページ
インストール
アーキテクチャ
基本イベントドリブン
イベントディスパッチャに登録されたイベントをif判定して実行していく。
メッセージ処理
内部でのやりとりにMessageという構造体を用いている。ノード間の通信に用いるパケットとは別なので注意。
フロー
ノード毎に各レイヤ(アプリ〜物理)までのイベントを処理する。
パケットの流れ
| レイヤ | ↑ | ↓ |
|---|---|---|
| Application | APP_ProcessEventから | |
| Trasnport | ||
| Network | NetworkIpReceivePacketFromMacLayer | SendToUDP/SendToTCP |
| Mac | ||
| Phy |
パケット操作
GUI
ノードの設置
Toolset>Devicesから選択、フィールドをクリックして追加、ダブルクリックで設定を開く。ArchitectモードでカーソルをSelectモードにする必要がある。
アプリケーションの設定
Toolset>Applicationsから選択、その状態でノードをクリックするとノードにクライアントを追加。アプリケーションのアイコンをダブルクリックで設定を開く。このとき、ArchitectモードでかつカーソルはSelectモードである必要がある。
ノード・アプリケーションの自動設定
ノードは[シナリオ名].nodes、アプリケーションは[シナリオ名].appファイルに記述されているため、これらを書き換えることでGUIを使用せずに書き換えられる。ただ、いくつか問題もある。
- 文字コードの問題
- UTF8でテキストを保存して読み込ませると、QualnetのGUI読み込んだときに頭に邪魔なものが追加される。UTF8(BOMなし)で保存すれば問題はおきない。ノードを追加する作業は、上位〜下位までのレイヤのさまざまな設定が必要となるため、GUI側でやってしまう方がよい。バッチ処理化する場合は、ノードの設置はGUIで済ませておき、座標やアプリケーションの設定のみ後から編集する。
- 読み込みのタイミング
- 上記の設定ファイルを書き換えただけでは反映されないどころか、エラーになる模様。一度GUI側で読み込んで保存することで解決する。(単にデータ形式のミスである可能性もある・・・調査中)。.configで読み込む.nodesや.appを変更することは可能?
コーディング
基本
- 命名規則
- 基本的にはキャメル(単語の区切りは大文字)
- ローカル変数は先頭小文字
- 構造体やプリプロセッサなどは_区切り
- Eventから呼ばれるものはLayerが付く(ex:AppMCbrLayerServerなど)
- アプリケーションは送信側が〜Client、受信側が〜Server
- アドレスの取得
- アドレスはuint型になっているため自分で変換する。IO_ConvertIpAddressToStringで文字列に変換可能だが、型としてAddress,NodeAddressなどいくつか紛らわしいものがあるので注意。
msg...受信メッセージ
UdpToAppRecv *info;
info = (UdpToAppRecv *) MESSAGE_ReturnInfo(msg);
char addressSrc[20];
IO_ConvertIpAddressToString(&info->sourceAddr, addressSrc);
printf(" %20s ",addressSrc);
アドオン
機能別
注意点
- 構造体に変数を追加する場合
- 最初に定義されているメンバの後に追加する。
デバッグ
VisualStudioでのデバッグ(ステップ実行)
- makeファイルの修正
- Makefile-windows-vc8を修正
デフォルト(最適化オプション)
#DEBUG = /Zi OPT = /Ox /Ob2
修正後(最適化させない)
DEBUG = /Zi #OPT = /Ox /Ob2
- デバッグ用の空のプロジェクトの生成
- VisualStudio上で作成
- [新規作成] -> [プロジェクト]
- [VisualC++] -> [全般] -> [空のプロジェクト]で適当な場所に生成
- デバッグしたいソースファイルをプロジェクトに適当に突っ込む(node.cppを適当に)
- 編集用のプロジェクトで、一度cleanを行う。
- プロパティの設定
- 新規作成したプロジェクトの[プロジェクト] -> [プロパティ]を開く
- [構成プロパティ] -> デバッグを選択し、以下のように設定
| 名称 | パラメータ |
|---|---|
| コマンド | C:\snt\qualnet\5.0\bin\qualnet.exe |
| コマンド引数 | 実行するシナリオファイル名 |
| 作業ディレクトリ | 実行するシナリオファイルのあるディレクトリパス |
| アタッチ | いいえ |
| デバッガのタイプ | 自動 |
| 環境 | |
| マージ環境 | はい |
| SQLデバッグ | いいえ |
- 実行
- 新規作成した方のプロジェクトで実行(ビルドするか聞かれるが、いいえでよい)
- breakpointは機能する
- アセンブリなど、特定の操作に入ると動作が停止する場合がある
コードの書き換え
デバッグ用には
を用いる
CBRでは複数経路通信、帯域制御などが行われている
注意
windows7のcmdではsambaサーバ上のファイルを実行できないようなので、コマンドプロンプトでは無くWindowsPowerShellを用いて実行してください上記のqualnet.exeがあるディレクトリへ移動し引数としてScenario.configを与えると実行できます
Q&A
- 時間が取得できない
- %lldで表示する。
- IPアドレスが取得できない
- unsigned int なので、一度文字列に変換する。
- ビルド時に警告が3つ出る
- もう一度ビルドすれば消える。
- ビルド結果が反映されない
- リビルドが確実。
- シナリオファイルが消える
- タスクが終わってない状態でQualnetを終了させるとシナリオファイルが消える場合がある。
- 実行時にassert〜と表示されて停止する
- 原因不明? リビルドするとなおったりなおらなかったり… 一度PCを再起動してみるといいかもしれない
- fatal error U1077 'copy' return code '0x1'
- なんかよくわからんけど手動でコピーするとおk
- 〜のファイルが破損している
- 初期状態のファイルからコピーしてくる
Copyright(C) by 芝浦工業大学 工学部通信工学科, 森野研究室. All Rights Reserved.