现在的位置: 首页 > 综合 > 正文

NS2-2.34下添加mflood协议全过程

2013年03月31日 ⁄ 综合 ⁄ 共 2355字 ⁄ 字号 评论关闭

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

抱歉!评论已关闭.