不知道你具体遇到什么问题,下面我以前做的一些笔记。希望能有所帮助。我也是初学,也许理解的不正确,大家交流交流吧!
鉴于ns2 manual中写的不是很详细。今天下午系统的研究了一下。
比较关键的原文(Chaper13.1):
“ErrorModel类是从基类Connector衍生而来。因此他继承了许多用于‘hooking up'对象的方法:target和drop-target.” …… “drop-target用于接受ErrorModel产生的corrupted报文。否则ErrorModel只标记这个报文的common头的error_ flag,然后交给agents处理。” …… “ErrorModel定义了Tcl成员unit,它用作指定错误单元:pkt、bit、time等;还定义了ranvar成员用于指定错误的随机分别类型。” …… 要想在ns中引入错误机制,必须先创建错误模型,指定错误发生概率rate_,错误单元unit,错误随机分布ranvar等。基本方法如下: set error_module [new ErrorModel] $error_module set rate_ 0.01 ;# 0<=rate<=1
$error_module unit pkt $error_module ranvar [new RandomVariable/Uniform]
$error_module drop-target [new Agent/Null] 定义好了错误模型error_module,就可以在需要的地方插入“错误”了。
13.2节介绍了很多中方法,这里讲讲我认为比较好用的: 1、Simulator::lossmode <em> <src> <dst> 这种方法在队列模型之前插入错误模型。 Simulator就是我们在tcl脚本里的ns实例,比如如果你如下定义:set ns_ [new Simulator],那么这里Simulator就是ns_ 在tcl脚本中不用使用成员访问符“::”,lossmode是Simulator的一个成员函数而已,em是我们定义的错误模型标识符,如上文的or_module,src和dst决定了一条发生错误的链路,简单而言,就是: $ns_ lossmode $error_model $n0 $n1
2、Simulator:link-lossmodel <em> <src> <dst> 这种方法在队列模型和延时模型之间插入错误模型。 参数说明略,基本同上。
以上方法适用于有线链路。对于无线链路不照的。^_^ 在无线链路中,错误模型的使用有些复杂。 首先,在无线链路中只能在mac和netif模型之间插入错误模型。 其次,无线链路中需要分别定义outgoing和incoming信道的错误模型。两者的区别在于:对于outgoing链路,错误模型是上面mac模型downtaget_所指向的对象,所有接受者接受的数据的错误模型相同;而对于incoming链路,错误模型必须是下面netif模型的uptaget_所指向的对象,每个接受者收到的报文的错误模型不同。
在无线协议栈中插入错误模型需要使用新的无线节点配置方法:node-config,它有两个选项IncomingErrProc(manual中多写了个'r')和OutgoingErrProc分别指定incoming错误模型和outgoing错误模型。
例子如manuel上的:
$ns node-config -IncomingErrProc UniformErr -Outgoing ErrProc UniformErr
proc UniformErr {} { set err [new ErrorModel] $err unit packet ;#好像pkt也可以; $err set rate_ 0.356 $err ranvar [new RandomVariable/Uniform] return $err } |