如何在NS中添加路由协议_full.doc_第1页
如何在NS中添加路由协议_full.doc_第2页
如何在NS中添加路由协议_full.doc_第3页
如何在NS中添加路由协议_full.doc_第4页
如何在NS中添加路由协议_full.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

在NS2中添加路由协议(整理版)最近正在研究怎样把自己新写的协议添加到NS2中去,正好借鉴了一些朋友的文章,现在整理下来,以便以后参考,也希望能给广大博友一些方便。step 1:比如我们新建的协议名字就叫做protoname,以ns2.27平台为例,我们在ns2.27目录下建立一个protoname目录。此目录包含protoname.h,protoname.cc,protoname_pkt.h,protoname_rtable.h,protoname_rtable.cc五个文件。其中五个文件的具体功能和作用如下:(1)protoname.h 定义必要的计时器和路由代理(2)protoname.cc 执行计时器、路由代理和Tcl文件(3)protoname_pkt.h 声明protoname路由协议需要在无线自组网节点交换的数据包(4)protoname_rtable.h 声明我们自己的路由选择表(5)protoname_rtable.cc 执行路由选择表step 2:相应文件的代码(1)protoname.h(2)protoname.cc(3)protoname_pkt.h(4)protoname_rtable.h(5)protoname_rtable.ccstep 3:我们需要对ns2中的一些文件进行修改,来使这个协议在tcl中被调用,需要修改的文件有以下几个,你可以在ns目录下找到它们:Common/packet.hTrace/cmu-trace.hTrace/cmu-trace.ccTcl/lib/ns-packet.tclTcl/lib/ns-default.tclTcl/lib/ns-lib.tclQueue/priqueue.ccMakefilestep4:需要修改的具体内容(在需要修改的地方添加红色的字)1.Common/packet.h (两个需要修改的地方) 增加对新数据包类型的支持,可以发现枚举中新协议的名称和p_info()中的数组名称是相对应的当头文件定义和函数定义放在一起可以需要在该文件中或在新路由的.h文件中加入下面一句否则在编译时HDR_ PROTONAME (p)函数显示未定义(待验证)#define HDR_ PROTONAME (p)(hdr_ protoname:access(p)enum packet_t PT_TCP,PT_UDP,PT_CBR,/* . much more packet types . */PT_PROTONAME,PT_NTYPE / This MUST be the LAST one;=p_info() name_PT_TCP= tcp;name_PT_UDP= udp;name_PT_CBR= cbr;/* . much more names . */name_PT_PROTONAME= protoname;2.Trace/cmu-trace.h (一个)为cmu-trace.cc中新增函数增加函数声明class CMUTrace : public Trace /* . definitions . */private:/* . */void format_aodv(Packet *p, int offset);void format_protoname(Packet *p, int offset);3.Trace/cmu-trace.cc (三个,先在最上面加头文件,在找一个合适的地方加函数)感觉像是增加对各种trace文件的支持#include /* . */voidCMUTrace:format_protoname(Packet *p, int offset)struct hdr_protoname_pkt* ph = HDR_PROTONAME_PKT(p);/生存各种trace文件的格式格式相关变量必须是包头中存在的变量if (pt_-tagged() sprintf(pt_-buffer() + offset,-protoname:o %d -protoname:s %d -protoname:l %d ,ph-pkt_src(),ph-pkt_seq_num(),ph-pkt_len();else if (newtrace_) sprintf(pt_-buffer() + offset,-P protoname -Po %d -Ps %d -Pl %d ,ph-pkt_src(),ph-pkt_seq_num(),ph-pkt_len(); else sprintf(pt_-buffer() + offset,protoname %d %d %d , ph-pkt_src(),ph-pkt_seq_num(),ph-pkt_len();=void CMUTrace:format(Packet* p, const char *why)/* . */case PT_PING: break;/根据类型调用上面的函数case PT_PROTONAME:format_protoname(p, offset);break;11:default:/* . */4.Tcl/lib/ns-packet.tcl(一个)foreach prot ProtonameAODVARP # .NV add-packet-header $prot5.Tcl/lib/ns-default.tcl(一个)设置包头仿真时的相关默认值 如数据包大小、速度等值。根据需要仿照其他协议设置# .# Defaults defined for ProtonameAgent/Protoname set accessible_var_ true6.Tcl/lib/ns-lib.tcl(两个)设置创建该路由的方法时的相关操作和使用该路由协议时的创建方法等如果协议需要相关过程方法需要在./ns-*/tcl/programname/中建立一个programname.tcl,在该文件中加入source ./ programname/programname.tcl. Simulator instproc create-wireless-node args # .switch -exact $routingAgent_ Protoname set ragent $self create-protoname-agent $node# .# .=Simulator instproc create-protoname-agent node # Create Protoname routing agent/注意包头是应该用地址创建还是id如果是id应把node-addr改为idset ragent new Agent/Protoname $node node-addr $self at 0.0 $ragent start$node set ragent_ $ragentreturn $ragent7.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_PROTONAME:recvHighPriority(p, h);break;default:Queue:recv(p, h);else Queue:recv(p, h); 8.Makefile(一个)OBJ_CC = tools/random.o tools/rng.o tools/ranvar.o common/misc.o common/timer-handler.o # .protoname/protoname.o protoname/protoname_rtable.o # .$(OBJ_STL)step 5:编译在ns目录下输入下名命令进行编译:$ make clean$ touch common/packet.cc$ make到这里,我们添加新协议的过程就结束了。step 6:测试协议写完了,要用一个tcl对它进行测试,下面这是个很简单的而且可用的例子set ns new Simulator$ns node-config -Routing protoname set nf open out.nam w $ns namtrace-all $nf set nd open out.tr w $ns trace-all $nd proc finish global ns nfnd $ns flush-trace close $nf close $nd exec nam out.nam & exit 0 for set i 0 $i 7 incr i set n($i) $ns node for set i 0 $i 7 incr i $ns duplex-link $n($i) $n(expr ($i+1)%7) 1Mb 10ms DropTailset udp0 new Agent/UDP $ns attach-agent $n(0) $udp0set cbr0 new Application/Traffic/CBR $cbr0 set packetSize_ 500 $cbr0 set interval_ 0.005 $cbr0 attach-agent $udp0set null0 new Agent/Null$ns attach-agent $n(3) $null0$ns connect $udp0 $null0 $ns at 0.5 $cbr0 start$ns rtmodel-at 1.0 down $n(1)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论