logo资料库

ns2中添加aomdv协议详细过程.doc

第1页 / 共9页
第2页 / 共9页
第3页 / 共9页
第4页 / 共9页
第5页 / 共9页
第6页 / 共9页
第7页 / 共9页
第8页 / 共9页
资料共9页,剩余部分请下载后查看
在 aodv 协议的基础上添加 aomdv 协议详细过程 安装环境:winxp+cygwin+ns-allinone-2.31 主要对以下文件进行修改: Common/packet.h Trace/cmu-trace.h Trace/cmu-trace.cc Tcl/lib/ns-packet.tcl Tcl/lib/ns-default.tcl Tcl/lib/ns-lib.tcl Queue/priqueue.cc Makefile.in Makefile indep-utils\webtrace-conv\dec\my-endian.h 以下修改部分为红色 Setp1:Common/packet.h(修改两个地方) enum packet_t { .... .... PT_AODV, PT_AOMDV,//第一个地方 PT_IMEP, .... ... }; ======================================= class p_info { public: p_info() { name_[PT_TCP]= "tcp"; 。。。。。 。。。。。 name_[PT_DSR]= "DSR"; name_[PT_AODV]= "AODV"; name_[PT_AOMDV]= "AOMDV";//第二个地方 name_[PT_IMEP]= "IMEP"; 。。。。。 。。。。。 };
Setp2:Trace/cmu-trace.h (一个) class CMUTrace : public Trace { public: CMUTrace(const char *s, char t); void void recv(Packet *p, Handler *h); recv(Packet *p, const char* why); private: char tracename[MAX_ID_LEN + 1]; void 。。。。。 。。。。。 format_imep(Packet *p, int offset); void void format_aodv(Packet *p, int offset); format_aomdv(Packet *p, int offset); }; #endif /* __cmu_trace__ */ Step3:Trace/cmu-trace.cc (三个地方) // IMEP #include #include //AODV #include //AOMDV,第一个地方,添加头文件 #include ================================================ //第二个地方,在 format_aodv 函数后面创建函数 CMUTrace::format_aodv(Packet *p, int offset) { struct hdr_aodv *ah = HDR_AODV(p); struct hdr_aodv_request *rq = HDR_AODV_REQUEST(p); 。。。。。 。。。。。 。。。。。 fprintf(stderr, "%s: invalid AODV packet type\n", __FUNCTION__); #else #endif abort(); } }
void CMUTrace::format_aomdv(Packet *p, int offset) { struct hdr_aomdv *ah = HDR_AOMDV(p); struct hdr_aomdv_request *rq = HDR_AOMDV_REQUEST(p); struct hdr_aomdv_reply *rp = HDR_AOMDV_REPLY(p); switch(ah->ah_type) { case AOMDVTYPE_RREQ: if (pt_->tagged()) { sprintf(pt_->buffer() + offset, "-aomdv:t %x -aomdv:h %d -aomdv:b %d -aomdv:d %d " "-aomdv:ds %d -aomdv:s %d -aomdv:ss %d " "-aomdv:c REQUEST ", rq->rq_type, rq->rq_hop_count, rq->rq_bcast_id, rq->rq_dst, rq->rq_dst_seqno, rq->rq_src, rq->rq_src_seqno); } else if (newtrace_) { sprintf(pt_->buffer() + offset, "-P aomdv -Pt 0x%x -Ph %d -Pb %d -Pd %d -Pds %d -Ps %d -Pss %d -Pc REQUEST ", rq->rq_type, rq->rq_hop_count, rq->rq_bcast_id, rq->rq_dst, rq->rq_dst_seqno, rq->rq_src, rq->rq_src_seqno); } else { sprintf(pt_->buffer() + offset, "[0x%x %d %d [%d %d] [%d %d]] (REQUEST)", rq->rq_type, rq->rq_hop_count, rq->rq_bcast_id,
rq->rq_dst, rq->rq_dst_seqno, rq->rq_src, rq->rq_src_seqno); } break; case AOMDVTYPE_RREP: case AOMDVTYPE_HELLO: case AOMDVTYPE_RERR: if (pt_->tagged()) { sprintf(pt_->buffer() + offset, "-aomdv:t %x -aomdv:h %d -aomdv:d %d -adov:ds %d " "-aomdv:l %f -aomdv:c %s ", rp->rp_type, rp->rp_hop_count, rp->rp_dst, rp->rp_dst_seqno, rp->rp_lifetime, rp->rp_type == AOMDVTYPE_RREP ? "REPLY" : (rp->rp_type == AOMDVTYPE_RERR ? "ERROR" : "HELLO")); } else if (newtrace_) { sprintf(pt_->buffer() + offset, "-P aomdv -Pt 0x%x -Ph %d -Pd %d -Pds %d -Pl %f -Pc %s ", rp->rp_type, rp->rp_hop_count, rp->rp_dst, rp->rp_dst_seqno, rp->rp_lifetime, rp->rp_type == AOMDVTYPE_RREP ? "REPLY" : (rp->rp_type == AOMDVTYPE_RERR ? "ERROR" : "HELLO")); } else { sprintf(pt_->buffer() + offset, "[0x%x %d [%d %d] %f] (%s)", rp->rp_type, rp->rp_hop_count, rp->rp_dst, rp->rp_dst_seqno, rp->rp_lifetime,
rp->rp_type == AOMDVTYPE_RREP ? "REPLY" : (rp->rp_type == AOMDVTYPE_RERR ? "ERROR" : "HELLO")); } break; default: #ifdef WIN32 fprintf(stderr, "CMUTrace::format_aomdv: invalid AOMDV packet type\n"); fprintf(stderr, "%s: invalid AOMDV packet type\n", __FUNCTION__); #else #endif abort(); } } =============================================== //第三个地方 void CMUTrace::format(Packet* p, const char *why) { hdr_cmn *ch = HDR_CMN(p); int offset = 0; /* * Log the MAC Header */ format_mac_common(p, why, offset); if (pt_->namchannel()) 。。。。。 。。。。。 switch(ch->ptype()) { case PT_AODV: format_aodv(p, offset); break; case PT_AOMDV: format_aomdv(p, offset); break; case PT_TORA: 。。。。。 。。。。。 } Step4:Tcl/lib/ns-packet.tcl(一个)
foreach prot { # Common: Common Flags IP # IP # Routing Protocols: 。。。。。 。。。。。 # network wireless stack Mac # Mobility, Ad-Hoc Networks, Sensor Nets: AODV # routing protocol for ad-hoc networks AOMDV #自行添加的协议 Diffusion # diffusion/diffusion.cc 。。。。。 } Step5:.Tcl/lib/ns-default.tcl 在最后添加下面语段,不同协议可能不同 #BY lijiao Agent/AOMDV set send_buffer_size_ 64 Agent/AOMDV set send_buffer_timeout_ Agent/AOMDV set aomdv_max_paths_ 3 Agent/AOMDV set aomdv_prim_alt_path_len_diff_ 1 30 Step6:Tcl/lib/ns-lib.tcl(两个) Simulator instproc create-wireless-node args { 。。。。。 switch -exact $routingAgent_ { DSDV { set ragent [$self create-dsdv-agent $node] } DSR { $self at 0.0 "$node start-dsr" } AODV { set ragent [$self create-aodv-agent $node] } AOMDV { set ragent [$self create-aomdv-agent $node] } 。。。。。 } ================================================
Simulator instproc create-aodv-agent { node } { 。。。。。 } Simulator instproc create-aomdv-agent { node } { # Create AOMDV routing agent set ragent [new Agent/AOMDV [$node node-addr]] $self at 0.0 "$ragent start" $node set ragent_ $ragent return $ragent } ;# start BEACON/HELLO Messages Step7:Queue/priqueue.cc(一个) void PriQueue::recv(Packet *p, Handler *h) { struct hdr_cmn *ch = HDR_CMN(p); if(Prefer_Routing_Protocols) { switch(ch->ptype()) { case PT_DSR: case PT_MESSAGE: case PT_TORA: case PT_AODV: case PT_AOMDV: recvHighPriority(p, h); break; default: } Queue::recv(p, h); Queue::recv(p, h); } else { } } Step8:Makefile.in(一个)
OBJ_CC = \ tools/random.o common/timer-handler.o \ tools/rng.o tools/ranvar.o common/misc.o ........ aodv/aodv_logs.o aodv/aodv.o \ aodv/aodv_rtable.o aodv/aodv_rqueue.o \ aomdv/aomdv_logs.o aomdv/aomdv.o \ aomdv/aomdv_rtable.o aomdv/aomdv_rqueue.o \ common/ns-process.o \ satellite/satgeometry.o satellite/sathandoff.o \ ......... Step9:Makefile(一个 ) OBJ_CC = \ tools/random.o common/timer-handler.o \ tools/rng.o tools/ranvar.o common/misc.o ........ aodv/aodv_logs.o aodv/aodv.o \ aodv/aodv_rtable.o aodv/aodv_rqueue.o \ aomdv/aomdv_logs.o aomdv/aomdv.o \ aomdv/aomdv_rtable.o aomdv/aomdv_rqueue.o \ common/ns-process.o \ satellite/satgeometry.o satellite/sathandoff.o \ ......... //刚开始我也是只改了 makefile 文件,但是还是报错,要注意的一点是修改 makefile.in 文件的时间一定要在 makefile 文件之前,但是原因我还没有研究过 Step10:indep-utils\webtrace-conv\dec\my-endian.h #ifndef _MY_ENDIAN_H_ #define _MY_ENDIAN_H_ #include "proxytrace.h" /* detects endian-ness */ int IsLittleEndian(void); /* changes endian-ness */ void ToOtherEndian(TEntry *e); #endif //如果不修改头文件呢,在 make 的时候会出现 Proxytrace2any.cc:error: IsLittleEndian 和 ToOtherEndian 函数没有被声明 Step11:编译
分享到:
收藏