1、在ns-2.34目录下建立mflood文件夹,把mflood.cc,mflood.h,mflood-seqtable.cc,mflood-seqtable.h,mflood-packet.h这几个文件放在mflood文件下面。
2、修改ns-lib.tcl(在~~ns2.34\tcl\lib\):(红色表示添加部分)
OMNIMCAST {
$node addr $args
set ragent [$self create-omnimcast-agent $node]
}
MFlood {
set ragent [$self create-mflood-agent $node]
}
DumbAgent {
set ragent [$self create-dumb-agent $node]
}
另外在空白处加入:
Simulator instproc create-mflood-agent {node} {
set ragent [new Agent/MFlood [$node id]]
$node set ragent_ $ragent
return $ragent
}
这一段的set前应该是一个tab键而不是空格,在修改的过程中如果遇到不大确定是空格还是tab键的地方可以参考原来ns2中的源代码,比如当你添加以上红色部分的代码时,你可以参考系统已经有的如下代码。例如,你可以把鼠标光标移动到 set ragent [new Agent/TORA [$node id]], 再delete这样你会发现是tab键不是空格。所以在你输入新的红色字体时也用tab键。
Simulator instproc create-tora-agent { node } {
set ragent [new Agent/TORA [$node id]]
$node set ragent_ $ragent
return $ragent
}
3、修改ns-packet.tcl(在ns-2.34\tcl\lib\):
foreach prot {
...
MFlood
AODV
...
}
4、修改packet.h(在~~~ns-2.34\common\):
在packet.h文件的申明部分,有一些静态常量申明:static const packet_t PT_......修改如下:
static const packet_t PT_AOMDV = 61;
static const packet_t PT_MFLOOD =62;
static const packet_t PT_NTYPE =63;
p_info() {
⋯⋯
name_[PT_AODV]= "AODV";
name_[PT_MFLOOD]="MFlood";
⋯⋯
}
5、修改Makefile(在~~ns-2.34\)
在OBJ_CC中增加一行:
mflood/mflood.o mflood/mflood-seqtable.o \
注意,mflood/mflood.o mflood/mflood-seqtable.o后面是空格,再加上\结尾。
6、在mflood.cc(在刚建立的文件加~~ns-2.34\mflood\)中加入:
...
uptarget_ = (NsObject*)TclObject::lookup(argv[2]);
if (uptarget_ == 0) {
tcl.resultf("no such object %s", argv[2]);
return (TCL_ERROR);
}
return (TCL_OK);
}
else if (strcasecmp (argv[1], "port-dmux") == 0) {
TclObject *obj;
port_dmux_ = (NsObject *) obj;
return TCL_OK;
}
}
return Agent::command(argc, argv);
}
并且修改:
MFlood::MFlood(nsaddr_t id) : Agent(PT_MFLOOD), port_dmux_(0) {
index_ = id;
logtarget = 0;
myseq_ = 0;
}
7、修改mflood.h(在~~~ns-2.34\mflood\):
NsObject *uptarget_;
NsObject *port_dmux_;
8、在ns-2.34\下make,可能会有一些warning,不用去管它。
9、测试:(进入你自己存放cbr-50n-30c-1p,scene-50n-0p-40s-400t-1200-1200,getNodeRecv.awk,getRatio.awk,mflood-3nodes.tcl,mflood-scene.tcl这些文件的文件夹)
a)测试mflood-3nodes.tcl
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 ...
b)测试mflood-sceen.tcl
首先修改mflood-sceen.tcl文件:(将文件名改成同目录下的scene-50n-0p-40s-400t-1200-1200)
#set val(sc) "../scene-50n-0p-2s-400t-1200-1200"
set val(sc) "scene-50n-0p-40s-400t-1200-1200"
#set val(sc) "../scene/jscene-50n-0p-2s-400t-1200-1200-1"
然后输入:
ns mflood-sceen.tcl
以上便是mflood 在ns2.34中的修改过程,如果你现在还是没有修改成功,不要着急,一般情况下是自己比较粗心,输入错误或者空格和tab键没有区分开来。这时候,你不妨在一些修改的地方加入一些puts语句,如果这个puts语句内容没有显示在终端,那么就是之前的修改出现了问题。
阅读(312) | 评论(0) | 转发(0) |