您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > NS2.35添加MFlood洪泛协议
NS2.35添加MFlood洪泛协议许银龙2013.05.09第一次添加协议时,很难查找错误的原因,因此我们先用比较成熟的MFlood协议进行尝试,熟悉协议添加的流程,找出易错点,便于以后的协议添加。协议添加流程:·编写协议的C++源程序·修改相应文件packet.h、ns-packet.tcl、ns-lib.tcl、Makefile等(不同的协议,修改的文件不一样)·重新编译make、调试、验证ns-allinone-2.35binlibns-2.35tcl8.4.13tk8.4.13tclcl-1.18otcl-1.12nam-1.12…commonaodvlinkqueuetcp…doctclextestlanhttprtp…C++源代码Tcl脚本范例测试用例OTcl代码1.下载MFlood协议从csdn上下载MFlood协议,MFlood洪泛协议是一个简单的无线路由协议,其中基本的思想是:节点根据一定的规则转发自己收到的数据包。下载网址:在ns-2.35文件夹下建立mflood目录在ns-2.35目录下建立mflood目录,将下载的文件中的mflood.h,mflood.cc,mflood_packet.h,mflood-seqtable.h,mflood-seqtable.cc放入该文件夹内。3.ns-2.35/common/packet.h(改两处)(1)packet.h是定义分组类型头文件,这里要修改packet_t的类型。2.35跟2.29很不同,在75行左右说的很清楚。预定义的分组类型通过staticconst来实现。那么在下面一串staticconstpacket_tPT_TCP=0;…………staticpacket_tPT_NTYPE=73;//ThisMUSTbetheLASTone这些都是分组类型,最后一行的PT_NTYPE必须是最后一个,那么在这行之前加入PT_MFLOOD类型。加入下划线一行之后如下:staticconstpacket_tPT_TCP=0;…………staticconstpacket_tPT_MFLOOD=73;staticpacket_tPT_NTYPE=74;//ThisMUSTbetheLASTone(2)还需要加入对应分组类型PT_MFLOOD的字符串。需要p_info类,跟2.29也不一样了,2.35把赋值语句放到了initName()函数中,找到这个函数,可以把这句依然放到PT_NTYPE之前。name_[PT_MFLOOD]=MFlood;name_[PT_NTYPE]=undefined;4.ns-2.35/tcl/lib/ns-packet.tcl(改一处)mflood定义自己的分组头部,这个头部需要激活。所以在此文件中修改,添加mflood的头部。(mflood头部定义的具体代码在mflood.cc中)。#Mobility,Ad-HocNetworks,SensorNets:MFloodAODV#WSNprotocolforad-hocnetworks5.ns-2.35/tcl/lib/ns-lib.tcl(改两处)(1)在这里添加语句,表示当无线移动节点指定路由协议为MFlood是,将调用create-mflood-agent成员函数进行初始化。OMNIMCAST{eval$nodeaddr$argssetragent[$selfcreate-omnimcast-agent$node]}MFlood{setragent[$selfcreate-mflood-agent$node]}下划线一段加在这个switch语段里就行了,不一定非要加到OMNIMCAST后面。(2)在末尾加入函数具体定义。Simulatorinstproccreate-mflood-agent{node}{setragent[newAgent/MFlood[$nodeid]]$nodesetragent_$ragentreturn$ragent}6.ns-2.35/Makefile(改一处)修改Makefile文件,加入:wpan/p802_15_4trace.owpan/p802_15_4transac.o\apps/pbc.o\mflood/mflood.omflood/mflood-seqtable.o\$(OBJ_STL)7.重新编译NS回到ns-2.35的目录下,执行sudomakeclean:所有的.o文件会被清除,包括ns-2.35/ns指令(类似于windows下的exe文件)。sudomake:会重新生成.o文件和ns指令8.验证与调试setval(rp)Mflood;#路由协议更改为MFlood存为mflood.tcl,ns运行失败(终端显示),究其原因是ns不识别新协议,后来分析才知道是ns指令用的不对。ns指令共存在三处:(1)Home/主文件夹/ns-allinone-2.35/bin/ns:该ns是(2)的快捷方式(2)Home/主文件夹/ns-allinone-2.35/ns-2.35/ns:重新编译生成的ns(3)Usr/bin/ns:/usr/bin是后期安装的一些软件的运行脚本。主要放置一些应用软体工具的必备执行文件,例如c++、g++、ns解决办法:(1)make之后再makeinstall——失败,导致段错误,毁坏ns指令,重装linux、重装ns2有资料说Makeinstall的原意是将刚编译过的ns放到/usr/bin目录下。(2)创建软连接(快捷方式)——失败。~/ns-allinone-2.31/bin$mvnsns.bak~/ns-allinone-2.31/bin$ln-s../ns-2.35/ns网上给的目录是~/ns-allinone-2.31/bin,但我们在终端用whichns(或者用ls-lns查看ns链接情况)查看所用ns指令的路径的时候发现真正用到的是usr/bin/ns目录下的ns指令。依照(2)我们尝试在usr/bin/中建立软连接,失败。所以找到第三种解决办法。(3)将目录(3)的ns备份后,将目录(2)中的ns强行复制(sudonautilus)到(3)中。~usr/bin$mvnsns.bak//将ns重命名为ns.bak备份。~sudonautilus//得到复制权限。替换ns,重新运行tcl脚本文件。8.工作计划(1)首先实现ETX和ETT的仿真:AODV是以跳数为度量的,需要加入探测包代码,记录各个节点的ETX值。实现ETX和ETT的仿真。(2)扩展多接口多信道的功能:目前主流的路由度量都是在多接口多信道的场景上实现的,因此需要根据Roman方案对ns2进行改进,修改相应的OTCL类和C++类,以支持多信道多接口的仿真。在此基础上,分别实现WCETT、INX、INX_LB度量方案,并在吞吐量和丢包率等指标上进行性能对比。(3)进行大量仿真实验研究ETX、ETT、WCETT、WCETT_LB、WCETT_WR、iAWARE、INX、INX_LB、MIC、MIND、CATT、BP2BG等度量(以及实验室提出的改进度量)的仿真。有的不涉及多接口多信道,可以在扩展多接口多信道功能之前,对单接口单信道的路由度量进行仿真,积累仿真经验。为后续研究打基础。(4)添加新协议:在对AODV协议熟悉之后,添加OLSR协议,在OLSR协议中研究路由度量。第一次涉及到底层仿真,针对安装调试工具GDB并学习其用法、修改底层协议脚本,扩展接口功能,添加文件,编译等许多未知问题,需要逐一解决,工作极为繁琐。建议将来需要用ns2进行仿真的,现在和我们一起学习:1)以我们目前对ns2的了解可以帮助大家有所侧重,尽快熟悉ns2,少走弯路。2)由于ns2的复杂性和个人的研究方向不尽相同,后续仿真尚需个人亲力亲为。参考网址:[1][2][3][4]
本文标题:NS2.35添加MFlood洪泛协议
链接地址:https://www.777doc.com/doc-6038046 .html