一、需要的mflood源码:mflood.cc,mflood.h,mflood-seqtable.cc,mflood-seqtable.h,mflood-packet.h
二、具体过程:
1、在ns-2.30目录下建立mflood文件夹,把上述文件统统放进去。
2、 修改 ns-lib.tcl(在ns2.30/tcl/lib/):(红色表示添加部分 )
OMNIMCAST {
eval $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-tora-agent { node } {
set ragent [new Agent/TORA [$node id]]
$node set ragent_ $ragent
return $ragent
}
(上面的部分原来的书里面没有,在测试时发现ns node生成时出错,因此按照这里修改了以上部分)
Simulator instproc create-mflood-agent {node} {
set ragent [new Agent/MFlood [$node id]]
$node set ragent_ $ragent
return $ragent
}
3、修改ns-packet.tcl(在ns2.30/tcl/lib/ ):
foreach prot {
...
MFlood
AODV
...
}
4、修改 packet.h(在ns2.30/common/):
enum packet_t {
⋯⋯
PT_AODV,
PT_MFLOOD,
⋯⋯
}
p_info() {
⋯⋯
name_[PT_AODV]= "AODV";
name_[PT_MFLOOD]="MFlood";
⋯⋯
}
5、修改 Makefile(在ns2.30/)
在 OBJ_CC 中增加一行:
mflood/mflood.o mflood/mflood-seqtable.o /
6、在mflood.cc(在刚建立的文件加ns2.30/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(在ns2.30/mflood/):
NsObject *uptarget_;
NsObject *port_dmux_;
8、在ns2.30/下make,可能会有一些warning,不用去管它。