こんにちは。
■IP-ADDRESSパラメータ行の読み込み箇所について
引用:
そこで,この関数が誰から呼ばれているのか遡っているのですが,
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)という人が何かを先にやっているのでしょうか?
以下に、ProcessSubnetLine()関数のコードを一部抜粋します。
5634行目のAddNodeToSubnet()関数の第4引数が今設定されようとしているIPアドレスの値が入った変数。
その変数に値を設定しているのは5567行目。
5567行目の右辺のinterfaceAddress変数に値を代入しているのは、
5542行目のMAPPING_GetInterfaceInfoForInterface()関数。
MAPPING_GetInterfaceInfoForInterface()関数は非公開ソース。
5489 for (count = 0; count < addCount; count++)
5490 {
5491 NodeAddress interfaceAddress = (unsigned int)ANY_ADDRESS;
5492 NodeAddress subnetAddress = 0;
5493 NodeAddress subnetMask = 0;
5494 int hostBits = 0;
... 略 ...
5538 if (netProtoType == IPV4_ONLY || netProtoType == DUAL_IP
5539 || netProtoType == GSM_LAYER3 || netProtoType == CELLULAR)
5540 {
5541
5542 MAPPING_GetInterfaceInfoForInterface(
5543 firstNode,
5544 subnetList[count].nodeId,
5545 intfIndex,
5546 &interfaceAddress,
5547 &subnetAddress,
5548 &subnetMask,
5549 &hostBits);
5550
5551 if (interfaceAddress == ANY_ADDRESS)
5552 {
5553 char buff[MAX_STRING_LENGTH];
5554 sprintf(buff,
5555 "IPv4 address is not configured for"
5556 "interface %d of Node %d\n",
5557 intfIndex,
5558 subnetList[count].nodeId);
5559 ERROR_ReportError(buff);
5560 }
... 略 ...
5567 subnetList[count].address.interfaceAddr.ipv4 = interfaceAddress;
5568 subnetList[count].address.networkType = NETWORK_IPV4;
5569 }
... 略 ...
5619 if (subnetList[count].node != NULL)
5620 {
... 略 ...
5631 if (netProtoType == IPV4_ONLY || netProtoType == DUAL_IP
5632 || netProtoType == GSM_LAYER3 || netProtoType == CELLULAR)
5633 {
5634 AddNodeToSubnet(subnetList[count].node,
5635 nodeInput,
5636 subnetAddress,
5637 subnetList[count].address.interfaceAddr.ipv4,
5638 hostBits,
5639 macProtocolName,
5640 subnetList,
5641 addCount,
5642 count,
5643 isNewInterface,
5644 (short)subnetIndex);
5645 }
というわけで、残念ながらIP-ADDRESS行の読み込みを行っているコードに
辿り着くことはできないようです。
(読み込み処理は、恐らくご推察のとおりNodeInputさんがコッソリとやっている
と思います。そしてMAPPING_GetInterfaceInfoForInterface()関数は、単に
NodeInputから情報を取得する関数かと思われます。いずれもコードが見えない
ので推測になりますが。)
■D_NodeAddress型について
引用:
何故かと思い調べてみたのですが,右辺はNodeAddress型で左辺はD_NodeAddress型である,というくらいの違いしか分かりませんでした.
NodeAddress型はmain.hで定義されているのですが,D_NodeAddress型はどこで定義されているのでしょうか?
そもそもこのD_とは何者なのでしょうか?
D_NodeAddress型はinclude/dynamic_vars.hで定義されています。
D_*変数というのはDynamicオブジェクト変数のことで、シミュレーション実行中に外部
プログラムから動的に値を取得・変更可能な変数のことです。プログラマーズガイドの
7章のDynamic APIの冒頭に少し説明があります。QualNet5.1のGUIからも、添付画像の
ようにして実行時のこれらの変数の値を確認することができます。
DynamicParameters.PNG