Japan QualNet Community Forums Japan QualNet Community Forums
Welcome Guest 
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
検索
メインメニュー
アクセスカウンター
2024/05/13:15/16
2024/05/12:19/23

2024/03/14より392/1394
人気モジュール
No.1: フォーラム 29
No.2: ニュース 1
日曜日からの合計
人気Browser&OS
No.1:巡回ロボット27
No.2:Unknown OS1

No.1:どっかの巡回ロボット23
No.2:Google巡回ロボット2
No.3:Majestic-12巡回ロボット2

日曜日からの合計
メイン
   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の設定ファイルを変更する必要があります。
分かりましたか?
フラット表示 前のトピック | 次のトピック
Copyright c KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
XOOPS Cube PROJECT