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

パスワード:


パスワード紛失

新規登録
検索
メインメニュー
アクセスカウンター
2024/05/09:16/17
2024/05/08:22/25

2024/03/10より373/1384
人気モジュール
No.1: フォーラム 93
No.2: QualNet概要 6
日曜日からの合計
人気Browser&OS
No.1:巡回ロボット86
No.2:Linux3
No.3:Unknown OS1

No.1:どっかの巡回ロボット81
No.2:Baidu巡回ロボット3
No.3:Safari3

日曜日からの合計
メイン
   QualNet General/Miscellaneous
     ノード機能の追加、処理について
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
Mual
投稿日時: 2012/7/17 16:11
新米
登録日: 2012/7/17
居住地:
投稿: 2
ノード機能の追加、処理について
こんにちわ。いつもお世話になっております。

ノード追加に関する質問です。
私は特定のノードに、自分で考えた機能(RTTにより処理を変える)を追加したく考えております。
以下のようなことは可能でしょうか。

1.ノードのソースをいじり、作成したノードをシミュレーションで使用する。
2.リンクのRTTを指標にノードの処理をわける。
3.任意のパケットに遅延を付加させる。

可能でしたらどのようにすればよいかご指南をよろしくお願い致します。
hiro
投稿日時: 2012/7/17 17:38
長老
登録日: 2005/7/16
居住地:
投稿: 452
Re: ノード機能の追加、処理について
一言で回答するならば、できます。

簡単にできるかもしれませんし、
とても面倒なことになるかもしれませんが、
よほど特殊な処理でなければできます。

> 1.ノードのソースをいじり、作成したノードをシミュレーションで使用する。
まず、Nodeを構成しているソースを見つけて下さい。
沢山ありますので、どのレイヤの処理なのか決めて下さい。

> 2.リンクのRTTを指標にノードの処理をわける。
リンクとRTTは全く別の概念なので、
RTTを処理している部分を見つけて下さい。

> 3.任意のパケットに遅延を付加させる。
どのレイヤで遅延を付加するか決定して下さい。

以下は想像ですので外れていたらごめんなさい。。

TCPパケットのRTT(Round-Trip Time)の事であれば、
tcp_slowtimo という関数でt_rtt++ しています。
この t_rttを参照すればRTT別の処理が作れます。

遅延についてはMESSAGE_Sendで遅延を与えれば可能です。
遅延量(遅延を計算するのか、パラメタで与えるのか)を決定して下さい。
該当するレイヤのMESSAGE_Sendに遅延を付与して下さい。

次に、独自の処理を行わせるNodeと、通常のNodeを
見分ける方法を決めて下さい。
QualNetではある特定のNode専用のソースコードというものは
基本的にありません。
ソースコードで今何番のNodeの処理をしているのか、処理して
いるNodeではこの処理を動かしてよいのかを常に判定します。
QualNetのほとんどの処理でNode構造体が引数になるのは、
この判定を行うためであり、個別のNode情報が格納されています。

.configファイルで指定することになると思うので、
.configファイル上のキーワードを決めて、
gui側でもそのキーワードが扱える用にして下さい。
改造個所に、独自ノードか否かの判定処理を追加して下さい。

これらの事は、QualNet-5.2-ProgrammersGuide.pdfに
詳しく記載されています。

まずは、QualNet全体を構成するソースコードの概要を把握
することを、強くお勧めします。
Mual
投稿日時: 2012/7/19 13:46
新米
登録日: 2012/7/17
居住地:
投稿: 2
Re: ノード機能の追加、処理について
hiro様

ご丁寧な返信ありがとうございます。


>まず、Nodeを構成しているソースを見つけて下さい。
見つける方法は、ソースを一つ一つ見るしかないのでしょうか。

>沢山ありますので、どのレイヤの処理なのか決めて下さい。
>どのレイヤで遅延を付加するか決定して下さい。
両方共、現時点ではNetworkレイヤかTransportレイヤの処理を想定しています。

hiro様の想定で合っています。
私は、サーバと複数のクライアント間の配信差に関するシミュレーションを作成したいと考えています。
例えば、サーバからクライアントノードAとノードBの同じパケットを同時に送信する場合、AとBでのパケット到着タイミングの差が閾値以上ならノードBにはパケットを送信しないなどの処理をしたいと考えています。
サーバとクライアントの間に処理するノード(プロキシサーバのようなモノ)を作成する予定です。

QualNetの知識が足りないので、これからもQualNetを勉強していきます。
今後ともよろしくお願い致します。
hiro
投稿日時: 2012/7/21 17:38
長老
登録日: 2005/7/16
居住地:
投稿: 452
Re: ノード機能の追加、処理について
何となく、QualNetのソースファイル構成を誤解している気がするのですが、
それぞれのNodeのmainというか各Node専用のソースファイルはありません。
確かに、2つに分類すればQualNet全体の処理とNode用の処理にはなります。

『Nodeを構成する』という定義はあいまいですけど、
何らかの形でNode個別に処理される部分ということであれば、
各レイヤの処理部分が該当します。
レイヤ以外の処理には、GUI処理、メモリ管理、ファイル処理、
などの共通部分の処理になりますけど、ごくわずかです。

全QualNetのソースファイルは5.2の場合では、
includeファイルで542ファイル(225,013行)、
cppファイルでファイル401ファイル(944,824行)です。
# オプションライブラリの有無で微妙に異なります。

これらの中でNodeを構成しているソースファイルですが、
ざっくり80%以上がNodeを構成しているソースファイルです。

実際にはシナリオでレイヤ単位に処理を指定するので、
これらのNodeを構成するソースファイルのほとんどが動かない
(設定したシナリオでは使わない)事になります。
使わないルーティングプロトコル、使わないアプリケーション、
使わないMAC,PHY等が沢山あります。

シナリオで定義した各レイヤの処理を行っているソースファイルだけを
チェックすればよいです。

./snt/qualnet/5.2/librariesに入っているファイルは
比較的わかりやすいファイル名になっているので
ファイル名をじっくり見て、内容を確認して下さい。

あいまいな表現で、ちょっとわかりにくかったかもしれませんが、
まずは、レイヤの決定と当該部分の処理を行うソースファイルを
見つけて下さい。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ
Copyright c KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
XOOPS Cube PROJECT