分类: LINUX
2008-07-28 10:42:39
基于Agent其实可以做很多的事了,有的看起来不是Agent的事,例如底层的协议,都可以换一个角度用Agent来做,最典型的AODV就是这样。也就是说Agent能做的事就是:把数据包从底层拿上来,处理一下,然后或者转发出去或者直接交给本节点的应用层。
基于Agent的开发简单,开发者不必去关心底层的实现,这是最大的好处。一般来讲基于Agent开发只需要这样几个文件:yourAgent.h yourAgent.cc yourAgent.tcl,当然你可以把yourAgent.cc优化成几个文件。
以下几个步骤:
1、定义头标。ns中头标是一个宽泛的东西,不必一定是协议中的那些域,你甚至可以把你要用的内存的指针放到头标中传过去。首先在分别在yourAgent.h和yourAgent.cc中加入
struct hdr_your { int ack; // is it ack packet? int seq; // mm sequence number //你需要的头标域都在这里定义 // Packet header access functions static int offset_; inline static int& offset() { return offset_; } inline static hdr_your* access(const Packet* p) { return (hdr_your*) p->access(offset_); } }; |
int hdr_your::offset_;//因为是static变量,要在这里分配空间 //Header Class |
//YourAgent OTcl linkage class static class YourAgentClass : public TclClass { public: UdpMmAgentClass() : TclClass("Agent/YourAgent") {} TclObject* create(int, const char*const*) { return (new YourAgent()); } } class_your_agent; |