Chinaunix首页 | 论坛 | 博客
  • 博客访问: 222295
  • 博文数量: 53
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 507
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-22 13:38
文章分类

全部博文(53)

文章存档

2009年(1)

2008年(52)

我的朋友

分类: 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
static class yourHeaderClass : public PacketHeaderClass {
public:
yourHeaderClass() : PacketHeaderClass("PacketHeader/your", sizeof(hdr_your)) {
bind_offset(&hdr_your::offset_);
}
} class_yourhdr;


//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;

2、在packet.h的enum中加入PT_your;在class pinfo的构造函数中加入name_[PT_your]="your";
3、在ns-packet.tcl中的foreach prto 中加入your
4、然后你就重载Agent的函数,你的主要工作将集中在这一步;你可以做任何改变,但是不要改变target_变量,它是从Connector继承来的,指向数据包将要到达的下一个实体(是本节点的入口,不是接收者)。
5、一个成熟的仿真平台要有很好的用户接口,因此要写yourAgent.tcl文件,当然不写也可以用。写完了之后在ns-lib.tcl中加入一个source语句,相当于include你的tcl代码(注意要重新编译才生效)。
6、写仿真脚本,也是tcl的。
7、写trace文件的处理脚本,用shell。这可以后期处理,但是设计时要考虑到处理时的难度和计算量。

由 kkzhou 发表于 2005年10月02日 21:15
阅读(1186) | 评论(0) | 转发(0) |
0

上一篇:学习计划v1

下一篇:linux技术类资源

给主人留下些什么吧!~~