トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

Programming_qualnet

Qualnetのページ

Qualnet - Wikipedia

Japan Qualnet Comm wiki

インストール

アーキテクチャ

基本イベントドリブン

イベントディスパッチャに登録されたイベントを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は機能する
  • アセンブリなど、特定の操作に入ると動作が停止する場合がある

コードの書き換え

デバッグ用には

Z:\research\qualnet\qualnet_src\bin\qualnet.exe

を用いる

CBRでは複数経路通信、帯域制御などが行われている

注意

windows7のcmdではsambaサーバ上のファイルを実行できないようなので、コマンドプロンプトでは無くWindowsPowerShellを用いて実行してください上記のqualnet.exeがあるディレクトリへ移動し引数としてScenario.configを与えると実行できます

Q&A

時間が取得できない
%lldで表示する。
IPアドレスが取得できない
unsigned int なので、一度文字列に変換する。
ビルド時にqualnet.exeなんたらとエラーが出る
qualnetを起動している
ビルド時に警告が3つ出る
もう一度ビルドすれば消える。
ビルド結果が反映されない
リビルドが確実。
シナリオファイルが消える
タスクが終わってない状態でQualnetを終了させるとシナリオファイルが消える場合がある。
実行時にassert〜と表示されて停止する
原因不明? リビルドするとなおったりなおらなかったり… 一度PCを再起動してみるといいかもしれない
fatal error U1077 'copy' return code '0x1'
なんかよくわからんけど手動でコピーするとおk
〜のファイルが破損している
初期状態のファイルからコピーしてくる

Copyright(C) by 芝浦工業大学 工学部通信工学科, 森野研究室. All Rights Reserved.