16. nsにおけるMobile Networking

top>

NSページ最終更新日 2006.9.10, 和訳最終更新日 2006.9.11


16.1.6 Trace Support

 現在、無線シミュレーションのためのtrace supportは、cmu-traceオブジェクトを用いています. 将来は、これにnsにおいて、トレースとモニタリングサポートが追加された利用可能なものに拡張される べきであります.さらに、それは無線モジュールのためのnamのサポートも含んだものであるべきです. いまは、我々は、cmu-traceオブジェクトについて簡単に説明をして、さらに、どのようにそれらのオブジェクトが 無線シナリオのためにパケットをトレース(辿る)ために使うことができるのかについて説明します.

cmu-traceオブジェクトはいつも3つのタイプがあります.CMUTrace/Drop、CMUTrace/Recv、CMUTrace/Send です.これらはそれぞれ、agentsやルーター、マックレイヤー、やインタフェース・キューにより パケット落ち、受信や送信されたパケットをトレースするために使われます. 実装された無線トレースサポートのための関数や手続きは、trace.{cc,h}およびtcl/lib/ns-cmutrace.tcl の中で見つけることができます.

cmu-traceオブジェクトは、次のAPIにより生成されます:

set sndT [cmu-trace Send "RTR" $self]

これは、ルーターの中で送られた全てのパケットをトレースするためのCMUTrace/Sendタイプの トレースオブジェクトsndTを生成します.トレースオブジェクトは、MACの中、agents(ルーチングや その他)、ルーターや他のNsObjectの中でのパケットをトレースするのに使われるかもしれません. cmu-traceオブジェクトCMUTraceは、Traceクラスを基本として継承されたものです.トレースクラスに ついては、25章を参照して下さい.CMUTraceクラスは、次のように定義されています:

class CMUTrace : public Trace {
public:
        CMUTrace(const char *s, char t);
        void    recv(Packet *p, Handler *h);
        void    recv(Packet *p, const char* why);

private:
        int off_arp_;
        int off_mac_;
        int off_sr_;

        char    tracename[MAX_ID_LEN + 1];
        int     tracetype;
        MobileNode *node_;

        int initialized() { return node_ && 1; }

        int     command(int argc, const char*const* argv);
        void    format(Packet *p, const char *why);

        void    format_mac(Packet *p, const char *why, int offset);
        void    format_ip(Packet *p, int offset);

        void    format_arp(Packet *p, int offset);
        void    format_dsr(Packet *p, int offset);
        void    format_msg(Packet *p, int offset);
        void    format_tcp(Packet *p, int offset);
        void    format_rtp(Packet *p, int offset);
};

 Traceクラスの定義の中に記述されているtypeフィールドは、異なるトレースのタイプの中で 違った使い方をするために使われます.cmu-traceでは、"s"(type)は送信を、"r"は受信を、"D"はパケット 落ちを表すことができます.4番目のtype fは、パケットを転送することを示すために使われます (ノードがパケットをはじめに送ったノードで無いとき). 関数Trace::format()と同じように、関数the CMUTrace::format()は、トレースファイルのフォーマット を定義し、命令します.その関数は次のようであります:

void CMUTrace::format(Packet* p, const char *why)
{
        hdr_cmn *ch = HDR_CMN(p);
        int offset = 0;

        /*
         * Log the MAC Header
         */
        format_mac(p, why, offset);
        offset = strlen(wrk_);

        switch(ch-\>ptype()) {

        case PT_MAC:
                break;

        case PT_ARP:
                format_arp(p, offset);
                break;

        default:
                format_ip(p, offset);
                offset = strlen(wrk_);

                switch(ch-\>ptype()) {

                case PT_DSR:
                        format_dsr(p, offset);
                        break;

                case PT_MESSAGE:
                case PT_UDP:
                        format_msg(p, offset);
                        break;
                        
                case PT_TCP:
                case PT_ACK:
                        format_tcp(p, offset);
                        break;
                        
                case PT_CBR:
                        format_rtp(p, offset);
                        break;
                ..........

                }
        }
}

 上記の関数は、トレースされるパケットのタイプによって、異なった形の関数を呼び出します. 全てのトレースは、バッファwrk_に書き込まれます.バッファでのオフセットのカウントがされ続け、 別のトレース関数へと伝えられます. 最も基本的なフォーマットは、format_mac()により定義されたもので、全てのpkt typeをトレース するのに使われます.その他のフォーマット関数は、パケットタイプによって定義される追加の情報 を記録したものです.mac formatは次のように記録されます:

\#ifdef LOG_POSITION
        double x = 0.0, y = 0.0, z = 0.0;
        node_-\>getLoc(&x, &y, &z);
\#endif

        sprintf(wrk_ + offset,
\#ifdef LOG_POSITION
                "%c %.9f %d (%6.2f %6.2f) %3s %4s %d %s %d [%x %x %x %x] ",
\#else
                "%c %.9f _%d_ %3s %4s %d %s %d [%x %x %x %x] ",
\#endif
                op,                    // s, r, D or f
                Scheduler::instance().clock(),  // time stamp
                src_,                  // the nodeid for this node
\#ifdef LOG_POSITION
                x,                     // x co-ord 
                y,                     // y co-ord
\#endif
                tracename,             // トレーシングするオブジェクトタイプの名前
                why,                   // もし何かあれば理由

                ch-\>uid(),             // このイベントのidentifier(識別子)
                packet_info.name(ch-\>ptype()), // パケットタイプ
                ch-\>size(),                    // cmn headerのサイズ
                mh-\>dh_duration,       // データの送信予測時間
                ETHER_ADDR(mh-\>dh_da), // mac_destination address
                ETHER_ADDR(mh-\>dh_sa),         // mac_sender address
                GET_ETHER_TYPE(mh-\>dh_body));  // type - arp or IP

もしLOG_POSITIONが定義されていれば、mobilenodeのためのxとy座標も記録されます. mac traceの中の異なったフィールドの記述は、上記のコメントのところで書かれています. 全てのIPパケットにとって、追加されたIPヘッダーフィールドも上記のトレースに追加されます. IPトレースは、以下のように記述されます:

sprintf(wrk_ + offset, "------- [%d:%d %d:%d %d %d] ",
                src,          // IP src address
                ih-\>sport_,   // src port number
                dst,          // IP dest address
                ih-\>dport_,   // dest port number
                ih-\>ttl_,     // TTL value 
                (ch-\>next_hop_ \< 0) ? 0 : ch-\>next_hop_); 
                // next hopaddress, if any.

tcpパケットのトレースの例は、以下のようです:

r 160.093884945 _6_ RTR  --- 5 tcp 1492 [a2 4 6 800] ------- [655
36:0 16777984:0 31 16777984] [1 0] 2 0

ここで、6番のidを持ったノードより受け取ったTCPデータパケットを見ることができます. pktのUIDは5で、cmn hdrサイズは1492です.macの詳細は、IP pckt(ETHERTYPE_IPは0x0800で定義されていて、 ETHERTYPE_ARPは0x0806で定義されています)の状態や、この受信しているノードのmac-idが4である ということを示しています.その送信ノードは6で、無線チャネル上をdata pktが送信される予測時間 は、a2 (16進法から10進法に変換: 160+2 秒)です.さらに、IPはIP srcとdestination addressに 関する情報をトレースします.destinationアドレスは1.0.3でポートアドレスは0です. TTLの値は31で、srcからdestinationまでは1ホップでした.さらに、TCPフォーマットはtcp seqnoが 1、acknoが0という情報を記録しています.その他のフォーマット、DSR、UDP/MESSAGE、TCP/ACKや CBRのパケットタイプについては、/cmu-trace.ccを参照して下さい.

他のトレースフォーマットもrouting agents(TORAやDSR)によって、特別なルーチングイベント に関してそれぞれ記録するために使われます.例えば、"originating" (パケットにSRヘッダーを 付加する)や"ran off the end of a source route"がソースルーチングにおいていくつかの問題が あることを示すものなどです.これらの特別なイベントのトレースは、DSRは"S"から、Toraは"T" から始まり、TORAはtora/tora.ccで、DSRのrouting agentはdsr/dsrgent.ccの中で見つけることができます.

Google Adsense広告

無線ネットワークシミュレーション since 2006.9-

 
[PR] | 美容整形看護師 求人美容整形インプラント消費者金融防犯カメラ洋楽アルバイトならenインプラント転職サイトSEOアクセス解析ハウスメーカーレンタルオフィスSEO対策消費者金融不動産担保ローン時計車 買取ハワイハワイ挙式アスクル転職生命保険テンプレート沖縄旅行動画FX免許合宿二輪引越し消費者金融税理士ゴルフ会員権留学レーシックマッサージ貸し店舗FX投資信託くりっく365アフィリエイト育毛剤FXホームページ制作デイトレードFXホノルルマラソンベスト ハワイ ホテル レーツバリ島ハワイウエディングHawaii hotelsHawaii Activitiesbhhr
【運営会社「パラダイムシフト」サービス】 ハワイ現地オプショナルツアーリラックマ.ハワイ ブログ) - ビジネスクラス航空券 - 格安航空券(1) - 格安航空券(2) - 海外ホテル - 韓国旅行
無料ホームページ作成 - レンタルサーバー - 携帯ホームページ - ブログ - ホテル 予約 - 格安航空券 - 長期滞在 - タイムシェア - ヴィラ - ハワイ コンドミニアム - バリ島 ホテル
[PR] 美容整形外科を選ぶならこちらから。まずは比較してみましょう