NS-2中无线节点固定丢包率的实现


NS-2

中,错误模型(

Error 

Model

)用来模拟信道上的丢包,可以通过这

个来设置节点固定丢包。以下给出一些方法,详见

ns manual 

13

章。

 

 

1

 

创建一个固定丢包率的错误模型:

 

创建一个

loss_module

,并将其分组错误率置为

1% 

 

set loss_module [new ErrorModel] 

 

$loss_module set rate_ 0.01 

 

可选项:设置单位和随机变量

 

 

$loss_module unit pkt 

 

 

 

 

 

 

 

;# error

单位:分组(默认)

 

 

$loss_module ranvar [new RandomVariable/Uniform] 

 

为丢失的分组设置

target 

 

$loss_module drop-target [new Agent/Null] 

 

2

 

上面的定义只是定义单一固定的丢包率,而在

ErrorModel

类中,可

以定义更加复杂的情况,

需要定义

ErrorModel

衍生类,

重新定义其

corrupt

方法,

ErrorModel

类的详细代码见

~ns/queue/errmodel.{cc, h} 

 

3

 

将错误模型与无线节点绑定

 

对于无线节点来说,

ErrorModel

就像是添加于

MAC

NETIF

之间,

用于控制数据分组的信息。

 

无线协议栈的插入可以通过调用

node-config

命令来完成,它有两个

选项:

IncomingErrrProc

OutgoingErrProc

我们可以同时使用这两个选

项或分开使用其中任何一个。这两个选项的自变量(

argument

)是可创

建错误模型对象的全局过程名,

给新建的

error

模块赋适合的必要的初始

值,最终会返回该对象的指针。以下展示了在无线协议栈中添加

error

模块的简单的

Tcl

示例脚本。

 

 

$ns 

node-config 

-IncomingErrProc 

UniformErr 

-OutgoingErrProc 

UniformErr 

 

proc UniformErr 

 

set err [new ErrorModel] 

 

$err unit packet 

 

return $err 

 

 

 

 

 

上面这个是在

tcl

文件中实现的,运用了

NS-2

中的错误模型。而也可以在

C++

中来实现固定随机丢包率,方法有几种,可以修改物理层,在物理层接收包

时进行随机丢包,也可以修改

MAC

层,在

MAC

层实现。下面以

802.11

为例,

修改

MAC-802_11.cc

,实现固定随机丢包率。

 

MAC-802_11.cc

中,接收下层数据包的函数为

 

void Mac802_11::recv(Packet *p, Handler *h) 

其中部分代码如下:

 

if(tx_active_ && hdr->error() == 0) { 

 

 

hdr->error() = 1; 

 

 

 

if(rx_state_ == MAC_IDLE) { 

 

 

setRxState(MAC_RECV); 

 

 

pktRx_ = p; 

 

 

/* 

 

 

 

* Schedule the reception of this packet, in 

 

 

 

* txtime seconds. 

 

 

 

*/ 

 

 

 

 

 

 

……

.. 

修改第一段代码,实现随机丢包,如下:

 

if(tx_active_ && hdr->error() == 0) { 

 

 

hdr->error() = 1; 

 

else if(hdr->error() == 0) { 

int szrandom = 0,error_rate = 10; 

 

 

srand( (unsigned) time(NULL)+nodeId_); 

//

产生随机数

 

 

 

 

szrandom = rand()%100; 

 

 

 

//

限制在

1-100

以内

 

 

 

if (szrandom <= error_rate) { 

 

 

 

hdr->error() = 1; 

 

 

 

 

 

//

小于

error_rate

的包丢弃

 

 

 

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值