メイン Miscellaneous: Architecture & Generic Development Questions 特定ノードのソース改良 | 投稿するにはまず登録を |
題名 | 投稿者 | 日時 |
---|---|---|
特定ノードのソース改良 | junpei | 2005/12/14 11:05 |
» Re: 特定ノードのソース改良 | forum_support | 2005/12/14 20:03 |
Re: 特定ノードのソース改良 | junpei | 2005/12/20 19:08 |
Re: 特定ノードのソース改良 | forum_support | 2005/12/23 20:03 |
Re: 特定ノードのソース改良 | junpei | 2005/12/24 16:12 |
Re: 特定ノードのソース改良 | forum_support | 2005/12/27 21:27 |
フラット表示 | 前のトピック | 次のトピック |
投稿者 | スレッド |
---|---|
forum_support | 投稿日時: 2005/12/14 20:03 |
モデレータ 登録日: 2005/5/17 居住地: 東京都中野区中央4-5-3 ?構造計画研究所 投稿: 322 |
Re: 特定ノードのソース改良 まず、仰られているケースでは、ノードに関するソースコードを改造する
のではなく、"特別な処理を行わせたい箇所"つまり"改造対象の処理"を行 っているプロトコル、に関するコードを改造することになるはずです。 例えば途中ノードのIPフォワーディング処理をちょっと変えてみたい、と いう場合、network/ip.cppあたりを触ることになります。 以下は、とりあえず抽象的な説明をさせていただきます。 ここで、プロトコルに関するソースコードはノード毎に用意されてい るわけではなく、プロトコル毎にしか用意されていません。それではソー スコードを改造してしまったら、その改造の影響が全てのノードに反映 されてしまうではないか、という話になりますが、それは、そのプロトコ ルに新たなパラメータを追加し、シナリオ作成時のノード毎の設定でその パラメータの値を設定できるようにすることで対応します。ここで、プロ トコルのソースコードは1つですが、実際にシミュレーションが実行され るときには、そのプロトコルコードの実体(インスタンス)は各ノード毎に 存在し、それぞれのインスタンスは、自身に設定されたパラメータの値に 応じた動作をします。 パラメータは、各インスタンスの個性だと思ってもらえれば分かりやすい かと思われます。各インスタンスの個性は設定により変化させることがで きますが、あくまで、そのプロトコルのソースコードで定義された個性の 中からしか選ぶことはできません。仰られているようなケースを実現させ るためには、既存の個性の定義は残しつつ新たな個性の定義を追加してや る、ということになります。 改造の仕方ですが、まず、該当プロトコルの構造体にフラグ変数をひとつ 追加します。仮にint型のmyflagという変数だとします。そして、仮に上 記追加パラメータの名前がMYPARAMだとすると、configファイル読込時に MYPARAMで始まる行を読込んでそれを解析し、その値に応じて、当該ノー ドの当該プロトコルのmyflagの値を設定できるようにします。その上で、 実際の改造コード部分は、例えば、 if (myflag == 0) { 改造前処理; } else { 改造後処理; } というようにして書いていけばよいです。 IP層に関するパラメータを追加したいのであれば、 ・network/ip.cpp, NetworkIpAddNewInterface関数付近を改造する。 大体においてIO_Readxxxx など IO_Read系のAPIが使われている関数が 各プロトコルソースにあります。通常プロトコルインスタンスをシナリ オファイルに設定してあるパラメータをIO_Readxxxxで読み込み、値をイ ンスタンスに設定しています。 ・シナリオファイル(*.config)に当該ノードのパラメータを設定する たとえばノード 3 だけ、追加したパラメータを設定したいなら [3] MYPARAM <設定値> としておきます。 ※GUIで設定する場合にはGUIの設定ファイルを変更する必要があります。 分かりましたか? |
フラット表示 | 前のトピック | 次のトピック |