メイン Scenario Setup & Configuration クロスレイヤ処理に関する過去ログについて | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
beginner | 投稿日時: 2012/7/8 18:33 |
半人前 登録日: 2011/10/10 居住地: 投稿: 30 |
クロスレイヤ処理に関する過去ログについて 過去ログで、MAC層からTCPの情報を取得する方法に関するmastさんの記事を拝見しました。
↓ http://simweb.kke.co.jp/qualnet/forum/modules/newbb/viewtopic.php?viewmode=thread&topic_id=360&forum=29&post_id=1351#1351 この記事の ■3 のコードで、 msg->transport_hdr = MESSAGE_ReturnPacket(msg); // Newly added という行がありますが、ここで MESSAGE_ReturnPacket(msg) が何を返しているのかが分かりませんでした。 (msg->transport_hdr は、この記事で新たに定義されている void 型のポインタです) 上記の行が実行されたことで、TCPヘッダの情報(ポート番号やシーケンス番号、ウィンドウサイズ etc..)が全て取得可能になっているということでしょうか? どなたかご教示いただければ幸いです。 よろしくお願い致します。 ※MESSAGE_ReturnPacket(msg) について実際に出力させて確かめようとも思ったのですが、返り値が代入されているmsg->transport_hdr が void 型で定義されていたため、どのように確かめればよいか分かりませんでした。 |
hiro | 投稿日時: 2012/7/22 14:26 |
長老 登録日: 2005/7/16 居住地: 投稿: 452 |
Re: クロスレイヤ処理に関する過去ログについて 放置されていたようですが、解決しましたか?
まず、message(というかヘッダ)の構造を把握する必要があります。 QualNet Hacksの第2章 イベント処理が参考になりますよ。 http://simweb.kke.co.jp/download/QualNetHacks-02-Event.pdf で、概要箇所の上の方で、 MESSAGE_RemoveHeader (node, msg, sizeof(struct ipovly), TRACE_TCP); して、 memcpy (MESSAGE_ReturnPacket(msg), &ti->ti_t, sizeof (struct tcphdr)); してますよね。 そして、問題の個所が以下の部分。 msg->transport_hdr = MESSAGE_ReturnPacket(msg); これらを見れば自明ですが、 ti->ti_tから、sizeof (struct tcphdr)だけmemcpyされているわけです。 部分的に書き直せば、
となります。これならわかりますよね。 > ※MESSAGE_ReturnPacket(msg) について実際に出力させて > 確かめようとも思ったのですが、返り値が代入されている > msg->transport_hdr が void 型で定義されていたため、 > どのように確かめればよいか分かりませんでした。 ほとんどの場合void *の定義は『いろんなもの』を示す場所になるので、 そこに何が入っているのかは、入れた場所で特定するしかありません。 例えばmallocもvoid *ですよね。 慣れるまでは難しい概念かもしれませんけど、じっくりとソースコードを 読めば答えは必ず見つかります。頑張って下さい。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |