![]() ![]() ![]() | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
TakaoIto | 投稿日時: 2011/10/12 19:20 |
新米 ![]() ![]() 登録日: 2010/4/23 居住地: 東京 投稿: 7 |
IPアドレスの扱いに関して こんにちは
QualNet(自分が使用しているのはEXataです)におけるIPv4アドレスの扱いについてソースコードを読んでいたのですが,少々混乱してきてしまいました. お助け頂ければ幸いです. 私は,アドホックネットワークにおいて,IPアドレスを自動で割り振るような研究をしている者です. そのため,GUI上からアドレスを読み込まずに,シミュレーションを実行中にネットワーク状況を読んで新規の参加端末へアドレスを割り振る必要があります. そこでまず,IPアドレスをどこでコンフィグファイルから読み込んできて,どこで割り振っているのか調べていました. QUALNET_HOME\gui\settings\protocol_models\network_layer.prt内で定義されている 下記の行でのkey="IP-ADDRESS"をIO_~~関数で読み込んで整形して設定しているのだろうと思っていたのですが,全く見当たりませんでした. <variable name="IPv4 Address" key="IP-ADDRESS" type="Dotted decimal" interfaceindex="true" 〜〜〜〜〜〜 おそらくアドレスを実際にnode構造体の中に設定しているのは,network_ip.cpp内の7522行目付近におけるNetworkIpAddNewInterface()関数の ip->interfaceInfo[interfaceIndex]->ipAddress = interfaceIpAddress; という箇所であろうと推測しております. そこで,この関数が誰から呼ばれているのか遡っているのですが, NetworkIpAddNewInterface():network_ip.cpp ↓ MacAddNewInterface():mac.cpp ↓ AddNodeToSubnet():mac.cpp ↓ ProcessSubnetLine():mac.cpp ↓ MAC_Initialize():mac.cpp ↓ PARTITION_InitializeNodes():partition.cpp ↓ 今ここです 一向に終着地点が見つかりません. どこで"IP-ADDRESS"というkeyからファイル読み込みを行っているのでしょうか? それとも,ずっと気になっていたのですが, ノードに関するファイル入力情報を管理しているらしいNodeInput(fileio.h)という人が何かを先にやっているのでしょうか? それと,割り振られているアドレスを各所でprintfを使って確認していたのですが,上記でも示しましたnetwork_ip.cpp内の7522行目付近 ip->interfaceInfo[interfaceIndex]->ipAddress = interfaceIpAddress; について,printfで出力してみました. すると,右辺にあるinterfaceIpAddressの方は%xで出力できたのですが(見れれば良いので,16進数表記のままです) 左辺にあるip->interfaceInfo[interfaceIndex]->ipAddressの方はエラーを吐いてしまったり,中身がnullや0といった出力となっていました. 何故かと思い調べてみたのですが,右辺はNodeAddress型で左辺はD_NodeAddress型である,というくらいの違いしか分かりませんでした. NodeAddress型はmain.hで定義されているのですが,D_NodeAddress型はどこで定義されているのでしょうか? そもそもこのD_とは何者なのでしょうか? 以上の2点についてご教示頂けると助かります. 何卒よろしくお願いします. |
mast | 投稿日時: 2011/10/12 20:59 |
一人前 ![]() ![]() 登録日: 2005/4/7 居住地: 投稿: 93 |
Re: IPアドレスの扱いに関して こんにちは。
■IP-ADDRESSパラメータ行の読み込み箇所について 引用:
以下に、ProcessSubnetLine()関数のコードを一部抜粋します。 5634行目のAddNodeToSubnet()関数の第4引数が今設定されようとしているIPアドレスの値が入った変数。 その変数に値を設定しているのは5567行目。 5567行目の右辺のinterfaceAddress変数に値を代入しているのは、 5542行目のMAPPING_GetInterfaceInfoForInterface()関数。 MAPPING_GetInterfaceInfoForInterface()関数は非公開ソース。
というわけで、残念ながらIP-ADDRESS行の読み込みを行っているコードに 辿り着くことはできないようです。 (読み込み処理は、恐らくご推察のとおりNodeInputさんがコッソリとやっている と思います。そしてMAPPING_GetInterfaceInfoForInterface()関数は、単に NodeInputから情報を取得する関数かと思われます。いずれもコードが見えない ので推測になりますが。) ■D_NodeAddress型について 引用:
D_NodeAddress型はinclude/dynamic_vars.hで定義されています。 D_*変数というのはDynamicオブジェクト変数のことで、シミュレーション実行中に外部 プログラムから動的に値を取得・変更可能な変数のことです。プログラマーズガイドの 7章のDynamic APIの冒頭に少し説明があります。QualNet5.1のGUIからも、添付画像の ようにして実行時のこれらの変数の値を確認することができます。 ![]() |
TakaoIto | 投稿日時: 2011/10/13 15:38 |
新米 ![]() ![]() 登録日: 2010/4/23 居住地: 東京 投稿: 7 |
Re: IPアドレスの扱いに関して 引用:
お早い返答をありがとうございました! 物凄くスッキリ致しました! これまでmapping.hの方も何度か見ていたのですが,具体的にどういう処理がされているのか分からず, そもそも何の意味があってこれを介した流れになっているのか気にしないようにしていたのです^^; ノードポインター,識別子,アドレス等のマッピング・・・そんなことをする理由があるのでしょうか? 各々のnode構造体の中で情報は管理されているのに?と思ったのです. 単にNodeInputからの情報取得であれば, mappingさんがやらなくても他のコード内ではIO_*関数を使って取得していますし,アドレスも同様だと思うのですが? (整合性を見てるとかそんな感じ?) 教えて頂いたDynamic_vars.hも見てみます! クラスっぽいのがあるんですね、オブジェクト指向的な話は全然分からなくて苦労しそうですが・・・; あと,添付画像の方を参考にシミュレーション時のRuntime Analysisを見てみたのですが,私の方では添付画像のように Nodes →host1 →→Interface0 Subnets しかありませんでした. Dynamic Parametersというのは特殊な状況でしか出てこないのでしょうか? (外部インタフェースとの動的なやり取りがある場合だけ?) EXata2.1,QualNet5.1双方で同一の結果となりました. ご存じでしたら,ご教示お願い致します. ![]() |
mast | 投稿日時: 2011/10/13 20:49 |
一人前 ![]() ![]() 登録日: 2005/4/7 居住地: 投稿: 93 |
Re: IPアドレスの扱いに関して 引用:
シナリオの設定で細かく制御できます。添付画像を参照してください。 引用:
これについては、理由までは私には分かりません。 では。 ![]() |
TakaoIto | 投稿日時: 2011/10/17 18:12 |
新米 ![]() ![]() 登録日: 2010/4/23 居住地: 東京 投稿: 7 |
Re: IPアドレスの扱いに関して 無事にDynamicParametersも表示することができました.
マッピングの理由は研究を進めながら考察してみたいと思います. ありがとうございました! |
7208op | 投稿日時: 2011/10/21 18:12 |
新米 ![]() ![]() 登録日: 2011/10/21 居住地: 投稿: 1 |
Re: IPアドレスの扱いに関して ありがとうございました!
|
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |