![]() ![]() ![]() | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
DCT | 投稿日時: 2010/4/23 19:19 |
新米 ![]() ![]() 登録日: 2009/7/16 居住地: 投稿: 6 |
1つ前のノードの送信元IPアドレスの取得方法について network_ip.cppのRouteThePacketUsingLookupTable()において
1つ前のノードの送信元IPアドレス情報を利用したいと思っています。 NetworkDataIp *ip = (NetworkDataIp *) node->networkData.networkVar; IpHeaderType *ipHeader = (IpHeaderType *) msg->packet; の『ipHeader->ip_src』ではTRAFFIC-GENでパケットを生成/送出したノードのIPが取得されてしまいます。 Forwardingを経て、当該ノードでRouteThePacketUsingLookupTable()をする際に1つ前のノードのsrcIP情報を取得するにはどのようにしたらよいでしょうか? 宜しくお願いいたします。 |
mast | 投稿日時: 2010/4/23 19:41 |
一人前 ![]() ![]() 登録日: 2005/4/7 居住地: 投稿: 93 |
Re: 1つ前のノードの送信元IPアドレスの取得方法について こんな感じでMessage構造体(struct message_str)の最後に、
秘密のフィールドを設けておいて、各ノードが転送する際に 自身のIPアドレスでこのフィールドを上書きするようにして おけば、取得できるようになるんじゃないかと思います。
|
DCT | 投稿日時: 2010/4/23 20:11 |
新米 ![]() ![]() 登録日: 2009/7/16 居住地: 投稿: 6 |
Re: 1つ前のノードの送信元IPアドレスの取得方法について ご回答ありがとうございます。
例えばRIPのコードを見ると『RipProcessResponse(Node* node,Message* msg) 』において、 UdpToAppRecv* info = (UdpToAppRecv*) MESSAGE_ReturnInfo(msg); NodeAddress sourceAddress = GetIPv4Address(info->sourceAddr); として「sourceAddress」が1つ前の送信元アドレスとして取得できているのですが、同様なことをnetwork_ip.cppの「RouteThePacketUsingLookupTable()」部で行えないかと考えています。 頂いたご回答のような方法で、独自に情報を付加しなければ取得できないものでしょうか? (上記例ですが、RIPの情報の場合は1つ前のノードが送信元であるから取得できているということであって、1つ前の情報はそう簡単には取得できないでしょうか?) 実はもしくは、転送処理するパケットの入力I/F番号が「RouteThePacketUsingLookupTable()」で分かれば1つ前のIPアドレスが取れなくても問題が解決しそうなのですが、こちらの方が簡単な解があるでしょうか? |
mast | 投稿日時: 2010/4/23 20:40 |
一人前 ![]() ![]() 登録日: 2005/4/7 居住地: 投稿: 93 |
Re: 1つ前のノードの送信元IPアドレスの取得方法について 引用:
普通のIPパケットには前のノードの情報はどこにも乗ってないはずなので、何もせずに取得することはできないと思います。 引用:
RouteThePacketUsingLookupTable()の第3引数がそれに相当すると思いますが・・・ RouteThePacketUsingLookupTable(Node *node, Message *msg, int incomingInterface) |
DCT | 投稿日時: 2010/4/23 20:52 |
新米 ![]() ![]() 登録日: 2009/7/16 居住地: 投稿: 6 |
Re: 1つ前のノードの送信元IPアドレスの取得方法について ご回答ありがとうございます。
> RouteThePacketUsingLookupTable()の第3引数がそれに相当すると思いますが・・・ なのですが、出力して確認しているのですが、全て0となっています。 この関数の呼び出しは「RoutePacketAndSendToMac()」ですが、これを見ると、 // int incomingInterface Index of interface on which packet arrived. [This is different if the packet originated from the network or transport layers. This value is only for multicast packets, currently.] ということでユニキャストパケットの転送時には利用できないようなのです。 書き忘れておりましたが、Versionは4.5.1になります。 |
mast | 投稿日時: 2010/4/24 2:00 |
一人前 ![]() ![]() 登録日: 2005/4/7 居住地: 投稿: 93 |
Re: 1つ前のノードの送信元IPアドレスの取得方法について >> RouteThePacketUsingLookupTable()の第3引数がそれに相当すると思いますが・・・
> > なのですが、出力して確認しているのですが、全て0となっています。 > この関数の呼び出しは「RoutePacketAndSendToMac()」ですが、これを見ると、 > > // int incomingInterface > Index of interface on which packet arrived. > [This is different if the packet originated from the network or transport layers. This value is only for multicast packets, currently.] > > ということでユニキャストパケットの転送時には利用できないようなのです。 > 書き忘れておりましたが、Versionは4.5.1になります。 そうでしたか・・・・ では、かなりイレギュラーな気もしますが、 例えば以下のようなことをしてみるというのはどうでしょうか?
|
DCT | 投稿日時: 2010/4/26 10:53 |
新米 ![]() ![]() 登録日: 2009/7/16 居住地: 投稿: 6 |
Re: 1つ前のノードの送信元IPアドレスの取得方法について 解決のご連絡と訂正です。
【解決】 ForwardPacket(Node *node, Message *msg, int incomingInterface, NodeAddress previousHopAddress) の「previousHopAddress」が前HOPのアドレスで、これを利用することで大きく手を加えることなく実現できました。 【訂正】 int incomingInterface ですが、入力I/F番号を正常に利用できました。(私の出力ミスでした) 何度もご回答いただいた「一人前」様、ありがとうございました。 |
mast | 投稿日時: 2010/4/26 15:45 |
一人前 ![]() ![]() 登録日: 2005/4/7 居住地: 投稿: 93 |
Re: 1つ前のノードの送信元IPアドレスの取得方法について previousHopAddressというのは、NETWORK_ReceivePacketFromMacLayer()でMacHWAddressToIpv4Address()というのを呼び出すことで、MACアドレスから引っ張ってきているみたいですね。
・・・そういうのがあったとは知りませんでした。 ともかく無事ご解決したようで、おめでとうございます。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |