标签:
这几天学习NS2,虽然国内很多人使用,但系统的教材资料不多,只能一边看中文教材,一边看英文手册,知识点也是零零散散。过段时间等能将所有知识点串上,再总结总结。现只讲一些零碎的点记录一下。
添加新的协议
添加新的协议,实际上是自己新定义了一个Agent的子类。在笔记(三)已经说过,Agent的子类实际上可以用来实现协议,比如TCP,UDP等等。
下面以新添加一个"Ping"协议为例来讲讲怎么添加新协议。
1.定义一个PingClass,它是TclClass的子类,它的定义是模板化的,只要套用就行了。
static class PingClass : public TclClass { public: PingClass():TclClass("Agent/Ping") {} TclObject* create(int, const char*const*) { return (new PingAgent()); } }class_ping;
这里实际上已经有一个PingClass的static对象,class_ping,在创建它的时候已经调用了PingClass的构造函数,继而调用了TclClass的构造函数,将Agent/Ping作为参数传进去了。
2.在仿真的tcl脚本中,新建一个Agent的方法是:set 变量名 [new 协议名],例如 set tcp [new Agent/TCP]。第一步中将Agent/Ping作为参数穿进去,就是为了在新建Ping协议的Agent时,程序认识Agent/Ping这个东西。
在set ping [new Agent/Ping]后,NS会调用PingClass的create方法,返回一个PingAgent的对象,这个类我们得自己定义,它是协议的核心。这第二步就是定义这个类。
class PingAgent : public Agent { public: PingAgent(); int command(int argc, const char*const* argv); void recv(Packet*, Handler*); protected: int off_ping_; };
标签:
原文地址:http://www.cnblogs.com/johnsblog/p/4214655.html