メイン Application Layer Protocol Implementation & Model Development アプリケーションから直接IPパケットを送受信させるには? | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
mast | 投稿日時: 2005/5/18 17:55 |
一人前 登録日: 2005/4/7 居住地: 投稿: 93 |
アプリケーションから直接IPパケットを送受信させるには? アプリケーションからトランスポート層プロトコルを介さずに、直接IPパケットを送受信させるようにしたいのですが、QualNetでは、UnixのRawソケットのようなネットワークレイヤインタフェースはないのでしょうか?
|
forum_support | 投稿日時: 2005/5/19 4:33 |
モデレータ 登録日: 2005/5/17 居住地: 東京都中野区中央4-5-3 ?構造計画研究所 投稿: 322 |
Re: アプリケーションから直接IPパケットを送受信させるには? QualNetでは、UnixでのRawソケットに相当するAPIは用意されていません。
しかしながら、アプリケーション層のプロトコルから直接IPとパケットの受渡しを行う方法が、 QualNet 3.8 Programmer's Guideの 「4.8.2 Communication Between Non-adjacent Layers」 に記述されています。そこでは、CBRアプリケーションに直接IPを介したパケット送受信を行わせるための改造方法が、例として挙げられていますので、詳細はそちらをご覧ください。 ここでは、直接IPとパケットの受渡しを行う方法の概略を示しておきます。 パケット送信処理のための改造 −−−−−−−−−−−−−− ■1. 当該アプリケーションプログラムのソースコードから、ヘッダファイル<QUALNET_HOME/network/ip.h>をインクルードする。 ■2. ヘッダファイル<QUALNET_HOME/network/ip.h>に、当該アプリケーション用のプロトコル番号を追加する。このとき、既に存在する別のプロトコルと番号が重複しないようにすること。 ■3. 当該アプリケーションがパケットを下位層に渡す関数として、NetworkIpReceivePacketFromTransportLayer()関数を使用して、IPには、トランスポート層プロトコルからパケットを受取ったように見せかける。このとき、IP_PROTOには、当該アプリケーション用のプロトコル番号を指定する。 パケット受信処理のための改造 −−−−−−−−−−−−−− ■1. ヘッダファイル<QUALNET_HOME/include/api.h>に、以下のようなIpToAppRecv構造体を定義する。UdpToAppRecv構造体などを参考にすればよい。 −−−−−−−−−−−−−−−−−− typedef struct ip_to_app_send { Address sourceAddr; short sourcePort; Address destAddr; short destPort; int incomingInterfaceIndex; } IpToAppRecv; −−−−−−−−−−−−−−−−−− ■2. IPから当該アプリケーションへ受信パケットを引き渡すための関数として、ソースファイル<QUALNET_HOME/network/ip.cpp>に、SendToMyApp関数を記述する。SendToUDP関数などを参考にすればよい。このとき、MESSAGE_SetEvent関数でイベントタイプを指定するが、ここで、MESSAGE_SetEvent(msg, MSG_APP_FromTransport)としてトランスポートレイヤからアプリケーションレイヤに対するイベントのように見せかける。これが紛らわしければ、ヘッダファイル<QUALNET_HOME/include/api.h>に新たなイベントタイプとしてMSG_APP_FromNetworkを定義するのもよい。その場合、当該アプリケーション側のイベントディスパッチャでもそのイベントを捕捉できるようにしておく必要がある。 ■3. ソースファイル<QUALNET_HOME/network/ip.cpp>のDeliverPacket関数を編集して、プロトコル番号が当該アプリケーション用となっているパケットを受信した場合に、上記のSendToMyApp関数を呼び出すようにする。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |