首页 > 代码库 > ns-2.35下mflood协议的完美移植
ns-2.35下mflood协议的完美移植
首先需要下载mflood协议,其中包括两个文件夹:一个是mflood协议(还有文件把mflood.cc,mflood.h,mflood-seqtable.cc,mflood-seqtable.h,mflood-packet.h),一个是用于mflood测试的文件夹。
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...
ns-2.35下mflood协议的完美移植