您的位置:首页 > 其它

ns-2.34下mflood协议的完美移植

2011-08-27 18:57 330 查看

Step1

首先需要下载mflood协议,其中包括两个文件夹:一个是mflood协议(还有文件把mflood.cc,mflood.h,mflood-seqtable.cc,mflood-seqtable.h,mflood-packet.h),一个是用于mflood测试的文件夹,下载后 可以命名为mflood_test。这两个文件夹在《NS与网络模拟》这本书所配 套光盘中的第七章代码中有,另外网上也可以下到。

如果下载不到,可以电邮至我:mkxu2008@163.com索取!

Step2

在ns-2.34目录下建立mflood文件夹, 把上述的(mflood.cc,mflood.h,mflood-seqtable.cc,mflood-seqtable.h,mflood-packet.h)文件放在该mflood文件夹下面。

Step3

修改ns2.34\tcl\lib\ns-lib.tcl文件

(1)增添以下代码如下图所示的位置处:

MFlood {

set ragent [$self create-mflood-agent $node]

}





注意点:此处修改MFlood以及set之前的格式对其采用空格即可!

(2)在文档最后的空白处添加以下代码:

Simulator instproc create-mflood-agent {node} {

set ragent [new Agent/MFlood [$node id]]

$node set ragent_ $ragent

return $ragent

}

具体如下 图所示:





特殊注意点:

set前应该是一个tab键而 不是空格。
Step4

修改ns-2.34\tcl\lib\ns-packet.tcl文件:

foreach prot {

...

MFlood

AODV

...

}

相关图示如下:





Step5

修改ns-2.34\common\packet.h

(1)在packet.h文件的 申明部分做如下修改:

static const packet_t PT_AOMDV = 61;

static const packet_t PT_MFLOOD =62;

static const packet_t PT_NTYPE =63;

(2)做如下修改:

p_info() {

??

name_[PT_AODV]= "AODV";

name_[PT_MFLOOD]="MFlood";

??

}

具体图示如下:




Step6

修改ns-2.34\Makefile

在OBJ_CC中增加一行:mflood/mflood.o mflood/mflood-seqtable.o \

特殊注意点:mflood/mflood.o mflood/mflood-seqtable.o后面是空格,再加上\结尾。
相关图示如下:





Step7

在ns-2.34\mflood\mflood.cc

(1)s首先添加如下代码

else if (strcasecmp (argv[1], "port-dmux") == 0) {

TclObject *obj;

port_dmux_ = (NsObject *) obj;

return TCL_OK;

}

如下图所示:




(2)并且修 改:

MFlood::MFlood(nsaddr_t id) : Agent(PT_MFLOOD), port_dmux_(0) {

index_ = id;

logtarget = 0;

myseq_ = 0;

}

图示如下:




Step8

修改ns-2.34\mflood\mflood.h
如下图添加代码:NsObject *port_dmux_;





Step9

打开终端,输入下列命令:

cd ns-allinone-2.34/ns-2.34

/ns-allinone-2.34/ns-2.34$ make make

在ns-2.34\下make可能会 有一些warning,此外在我调试的过程中出现了下述错误:

common/ptypes2tcl.cc:22: error: assignment of read-only variable ‘PT_NTYPE’

make: *** [common/ptypes2tcl.o] 错误 1

Step10

针对上述错误需要进行如下修改:

进入目录:/ns- allinone-2.34/ns-2.34/common/ptypes2tcl.cc,在该文件的第22行,重新定义PT_NTYPE的数据类型,具体如下图所示:





完成上述步骤,需要按照之前所述的方法重新make一下,直至没有error为止!

Step11

测试,进入mflood——test文件夹(存放有cbr-50n -30c-1p,scene-50n-0p-40s-400t- 1200-1200,getNodeRecv.awk,getRatio.awk,mflood-3nodes.tcl,mflood- scene.tcl0)
(1)测试mflood-3nodes.tcl
首先进入以下路径:ns-allinone-2.34/ns-2.34/mflood_test,然后输入ns mflood-3nodes.tcl,如果协议移植成功则会出现以下结果:

输出:
num_nodes is set 3
INITIALIZE THE LIST xListHead
Starting Simulation ...
channel.cc:sendUp - Calc highestAntennaZ_ and distCST_
highestAntennaZ_ = 1.5, distCST_ = 550.0
SORTING LISTS ...DONE!
NS EXITING ...
(2)测试mflood-sceen.tcl
首先对mflood-sceen.tcl文件进行如下修改:





修改完毕在终端中输入ns mflood-sceen.tcl,若修改正确,会出现如下仿真结果:

num_nodes is set 50

INITIALIZE THE LIST xListHead

Loading connection pattern...

Loading scenario file...

Starting Simulation...

channel.cc:sendUp - Calc highestAntennaZ_ and distCST_

highestAntennaZ_ = 1.5, distCST_ = 550.0

SORTING LISTS ...DONE!

NS EXITING...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: