首页 > 代码库 > ns-2.35下mflood协议的完美移植

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

 Step1

    首先需要下载mflood协议,其中包括两个文件夹:一个是mflood协议(还有文件mflood.ccmflood.hmflood-seqtable.ccmflood-seqtable.hmflood-packet.h),一个是用于mflood测试的文件夹。

Step2

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

Step3

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

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

MFlood {

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

}

ns-2.34下mflood协议的完美移植(已修正bug)

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

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

} Simulator instproc create-mflood-agent {node} {

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

$node set ragent_ $ragent

return $ragent

具体如下图所示:

ns-2.34下mflood协议的完美移植(已修正bug)

特殊注意点:

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

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

foreach prot {

...

MFlood

AODV

...

}

相关图示如下:

ns-2.34下mflood协议的完美移植(已修正bug)

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";

??

}

    具体图示如下:

 ns-2.34下mflood协议的完美移植(已修正bug)
Step6

    修改ns-2.34\Makefile

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

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

 

ns-2.34下mflood协议的完美移植(已修正bug)

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;

}

    如下图所示:

ns-2.34下mflood协议的完美移植(已修正bug)
(2)并且修改:

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

index_ = id;

logtarget = 0;

myseq_ = 0;

}

图示如下:

ns-2.34下mflood协议的完美移植(已修正bug)
Step8

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

ns-2.34下mflood协议的完美移植(已修正bug)

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的数据类型,具体如下图所示:

ns-2.34下mflood协议的完美移植(已修正bug)

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

Step11

    测试,进入mflood——test文件夹(存放有cbr-50n -30c-1pscene-50n-0p-40s-400t- 1200-1200getNodeRecv.awkgetRatio.awkmflood-3nodes.tclmflood- 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-2.34下mflood协议的完美移植(已修正bug)

    修改完毕在终端中输入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...

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