首页 > 代码库 > NS2学习笔记(四)

NS2学习笔记(四)

  这几天学习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_;};

 

NS2学习笔记(四)