2011年9月26日
摘要: 加入模型:请参考http://blog.chinaunix.net/u1/33444/showart_273201.html 设置变量 请根据自己实际需要配置这些变量 set opt(engmodel) EnergyModel ;#能量模型 set opt(initeng) 10000.0 ;#总能量 set opt(txPower) 0.660 ;#传输能量 set opt(rxPower) 0.395 ;#接受能量 set opt(idlePower) 0.035 ;#待机能量配置node-config$ns_ node-config -adhocRouting $val(rp) / -. 阅读全文
posted @ 2011-09-26 20:31 心月 阅读(603) 评论(0) 推荐(0) 编辑
  2011年9月25日
摘要: 无线路由协议Mflood详解2010-09-02 10:05:01|分类:NS2学习笔记|字号订阅添加MFlood路由协议的实验1、协议分析MFLOOD洪泛协议是一个简单的无线路由协议,其中基本的思想是:节点根据一定的规则转发自己收到的数据包。该协议包括了Mflood.h, Mflood.cc, Mflood-packet.h, Mflood-seqtable.h, Mflood-seqtable.cc五个文件。(1)Mflood-packet.h定义了mflood的报头格式:这个新加的报头hdr_mflood通过定义offset_变量,使得能够得到访问。(2)mflood洪泛协议的实现过程主 阅读全文
posted @ 2011-09-25 20:55 心月 阅读(1051) 评论(2) 推荐(0) 编辑
摘要: 1错误代码格式及其句柄说明 错误代码从错误发生时开始输出,然后返回上一级调用,上一级可能继续返回错误代码的相关信息,最典型的模式是1 "eval $self create-wireless-node $args" # 命令代码2 (procedure "_o3" line 23) # 命令所在行数3 (Simulator node line 23) # Simulator 实体的node函数体4 invoked from within #5 "$ns_ node" # 调用代码此5行大体意思是, 1行对应的命令是从句柄为 " 阅读全文
posted @ 2011-09-25 20:53 心月 阅读(586) 评论(0) 推荐(0) 编辑
摘要: 1. NS2中数据包packet类结构图:packet类中的access函数如下:inline unsigned char* access(int off) const { if (off < 0) abort(); return (&bits_[off]);}struct hdr_cmn(即共用common头)中的access函数如下:inline static hdr_cmn* access(const Packet* p) { return (hdr_cmn*) p->access(offset_);}从以上的函数可以看出只要给出特定的报头在packet中的偏移量of 阅读全文
posted @ 2011-09-25 20:40 心月 阅读(1259) 评论(0) 推荐(0) 编辑
  2011年9月23日
摘要: ns里实现的aodv是单播的,多播的aodv叫MAODV,网上有源代码。我觉得看代码之前最好先对协议有个了解,这样看起来会更有效率;另外,实现与理论不一样,如果不对代码做改动的话,没必要对每个细节都了解很清楚。以下将简略介绍aodv中的重要函数。不足之处请谅解,我也是两年前看的源代码了,可能有些地方理解不对。AODV中aodv.cc是最重要的,了解aodv看这个文件也就差不多了,这个文件中,起点从AODV::recv(Packet *p, Handler*) 开始,文件开头那些都不用管1. VoidAODV::recv(Packet *p, Handler*)//判断是否是aodv包,是则调用 阅读全文
posted @ 2011-09-23 10:47 心月 阅读(2350) 评论(0) 推荐(1) 编辑
  2011年9月19日
摘要: 定时器可以用来每隔固定时间重复一件事情。一个定时器通常有如下的结构:1、声明:在将要使用到定时器的类里面,将定时器声明为friend,同时声明出一个定时器对象。class MAAODV: public Agent {……friend class maAntTimer;// 如果所访问的成员为public,则不用声明…………maAntTimeratimer;……};2、定义,重载:class maAntTimer: public TimerHandler{public:maAntTimer(MAAODV* a) : TimerHandler() {agent = a;}protected:MAA 阅读全文
posted @ 2011-09-19 14:23 心月 阅读(1067) 评论(0) 推荐(0) 编辑
  2011年9月13日
摘要: 首先需要知道的是定时器(Timer)既可以在C++中实现也可以在Otcl中实现。在C++中,各种定时器都是基于抽象基类TimerHandler 的,而其又是由Handler继承来的,而且定时器经常用于Agent对象中,当然也可以用在其他对象中,这里主要说在Agent对象中的使用方法。 列举几个比较重要的函数和参数: sched():设定定时器在delay秒后超时,此时定时器必须处在TIMER_IDLE状态。 resched():重新设定定时器的超时时间,在调用resched(()函数时,定时器可以处于TIMER_PENDING状态。 cancel():取消定时器,调用cance... 阅读全文
posted @ 2011-09-13 21:27 心月 阅读(660) 评论(0) 推荐(1) 编辑
  2011年9月4日
摘要: 在这一部分,我将给处以个可以在ns上应用的新协议的例子。你应该在此之前相对熟悉ns,而且一些c++知识也是相对必须的。你也应该至少读过“ns注释和文档 ”(现在叫做手册)的3.1-3.3章节来理解Tcl和C++之间的交互。 这一部分的代码实现了简单的‘ping’协议(灵感来自“ns注释和文档 ”(现在叫做手册)的9.6章节,但是这个相对困难)。一个节点将会可以发送一个包到另一个节点,包还会快速的回传,这样来计算一次来回的时间。 我知道这里给出的代码可能不是最好的实现,我也确信它能够被改进,但是我希望它能够容易被理解,这就是这篇文章的主要目的。一些建议可以发送到:ns-users@isi.... 阅读全文
posted @ 2011-09-04 14:37 心月 阅读(1180) 评论(0) 推荐(0) 编辑
  2011年8月28日
摘要: 上面过程还有一个疑问:如何在command函数中向解释器传递执行结果?哈,这个用Tcl类可以解决。Tcl类封装了Otcl解释器的实例,并提供了访问解释器的方法。这个类提供了以下的操作方法:1、获得Tcl实例的引用2、通过解释器调用Otcl过程3、从解释器获取结果,或将结果传回给解释器4、存取、查找TclObject5、获得到解释器的直接访问。1、获得Tcl实例的引用当ns一开始运行,Tcl类即被实例化。Tcl类的一个静态成员变量“Tcl Tcl::instance_“用来保存该实例。这个Tcl对象就是Otcl解释器对象,可以通过获得它的引用来访问Otcl解释器的功能。获得此实例引用的语句为:T 阅读全文
posted @ 2011-08-28 16:05 心月 阅读(356) 评论(0) 推荐(0) 编辑
摘要: 举个例子从整体说明Otcl和C++之间的对象连接机制1、在tcp.h中的TcpAgent类声明如下:class TcpAgent:public Agent {public:TcpAgent();virtual void recv(Packet*,Handle*);virtual void timeout (int ton);virtual void timeout_nonrtx (int ton);int command(int argc,const char*const* argv);virtual void sendmsg(int nbytes,const char *flags=0);… 阅读全文
posted @ 2011-08-28 16:04 心月 阅读(450) 评论(0) 推荐(0) 编辑