ns-2与TCP拥塞模拟 之五 ns-2中添加核心模块-TCPAgent子类
这里的目标是讲解如何新增或修改ns-2的核心模块。我们先从“复制-修改”开始,复制ns-2中一个已有的模块,但改成别的名字,这样就可以轻松且很明确地知道该如何增加模块。以下以Redhat6.1下的2.35版本为例,讲述添加一个TCP发送代理模块的大致过程,大致可以分为以下6个步骤。
(1)切换路径到tcp的目录下。
cd ns-allinone-2.35/ns-2.35/tcp
(2)复制tcp-vegas.cc到tcp-vegas2.cc。
cp tcp-vegas.cc tcp-vegas2.cc
(3)使用vi或者其他文字编辑软件修改tcp-vegas2.cc及tcp.h。
①先修改tcp.h,找到类VegasTcpAgent的定义,将这部分复制一份,并将类名改为classVegas2TcpAgent。
class Vegas2TcpAgent : public virtual TcpAgent{
public:
Vegas2TcpAgent();
~Vegas2TcpAgent();
virtualvoid recv(Packet *pkt, Handler *);
virtualvoid timeout(int tno);
protected:
……
②再修改tcp-vegas2.cc,把所有“Vegas”替换成“Vegas2”,另外,把“vegas”替换成“vegas2”。(文件内容略)
(4)修改ns-default.tcl文件,设定初始值:
①切换工作目录,cd ns-allinone-2.35/ns-2.35/tcl/lib/;
②使用文字编辑软件打开ns-default.tcl;
③使用搜寻功能找到TCP/Vegas;
④把每个初始设定值都再复制一份给TCP/Vegas2。
……………………………………………..
Agent/TCP/Vegas2 setv_alpha_ 1
Agent/TCP/Vegas2 setv_beta_ 3
Agent/TCP/Vegas2 setv_gamma_ 1
Agent/TCP/Vegas2 setv_rtt_ 0
……………………………………………..
(5)修改Makefile文件,把tcp-vegas2.o加到OBJ_CC内,并重新编译。
①使用文字编辑软件打开ns-allinone-2.35/ns-2.35目录下的Makefile;
②使用搜寻功能找到tcp-vegas.o;
③在tcp/tcp-vegas.o后面加上tcp/tcp-vegas2.o;
……………………………………………..
tcp/tcp.otcp/tcp-sink.o tcp/tcp-reno.o \
tcp/tcp-newreno.o \
tcp/tcp-vegas.otcp/tcp-vegas2.o tcp/tcp-rbp.o tcp/tcp-full.o tcp/rq.o \
……………………………………………
④重新编译。
make
如果没有什么错误输出,就是编译成功了,示例如图所示。
编译结果示例
(6)测试新安装的模块是否可以正常运作。可以修改上述章节中的示例1,把Agent/TCP改成Agent/TCP/Vegas2,检查运行的结果。
其他类型的代理模块在ns-2中添加的核心步骤也是类似的,大致步骤如下。
①准备好模块文件(如a.cc、a.h);
②如果需要设定初始值的话,修改ns-default.tcl文件;
③修改Makefile文件(把a.o加到OBJ_CC内);
④重新编译;
⑤测试新模块。
各种代理模块的功能都不相同,可以参考ns-2内已有的类型的源代码文件,建议找到最相近的模块文件,然后再去修改,这样比较容易把需要的模块加入到ns-2的核心。