(转载)《ns2仿真实验-多媒体和无线网络通信》NS2队列管理机制报错

原文地址:http://www.cnblogs.com/leealways87/archive/2011/12/27/2303312.html

我在实验中尝试将链路参数直接设定为DropTail(而非myfifo),结果提示"$q_ attach $queuechan”处有错误,遂尝试其它链路类型,FQ等,均不对。查阅其它参考书,将这段代码替换为:

$ns monitor-queue $r1 $r2 [open q-$par1-$par2.tr w] 0.3
[$ns link $r1 $r2] queue-sample-timeout

  至此,可以在运行时将参数给定为正常的链路类型,DropTail,FQ,RED,等,myfifo仍然可以使用。但后面用gnuplot画图 时,需要使用

plot "q-myfifo-10.tr" using 1:5 with linespoints 1, "q-RED-10.tr" using 1:5 with linespoints 2

  而不是原来的

plot "q-myfifo-10.tr" using 2:3 with linespoints 1, "q-RED-10.tr" using 2:3 with linespoints 2

  因为新的输出文件的第1列和第5列才是所需数据。(顺便强调一下,plot命令中,using 2:3的意思是用第2列数据作为横坐标,用第3列数据作为纵坐标。 )同时,原来产生的队列长度记录文件中有一些数据的第3列是相同的,但第2列不同,不明白是怎么回事,但在我改变后的新的输出文件中就没有这种现象。

Q 0.0342079 1
Q 0.118126 2
Q 0.206406 3
Q 0.314605 4
Q 0.354894 2
Q 0.354977 3
Q 0.372965 4
Q 0.440528 5
Q 0.440612 6
Q 0.481177 7
Q 0.486243 8
Q 0.486326 9
Q 0.514977 10
Q 0.565884 11
Q 0.663466 10
Q 0.663549 11
Q 0.728868 12
Q 0.817834 13
Q 0.849159 14
Q 0.886479 15
Q 0.966323 14
Q 0.966406 15
Q 0.9891 16
Q 0.989183 17
Q 1.20069 18
Q 1.21196 19
Q 1.21204 20
Q 1.34918 19
Q 1.34926 20

  另外,书中的queue.tcl文件代码部分,在finish过程中计算吞吐量的循环中

for {set i 0} {$i<$par2} {incr i} {
set ackno_($i) [$tcp($i) set ack_]
set thgpt($i) [expr $ackno_($i)*1000.0*8.0/($time-$start($i))]
set sum_thgpt [expr $sum_thgpt+$thgpt($i)]
}

  开始时间的数组start($i),参照先前的习惯,以及该文件后面对该数组的使用,应该是startT($i)。我没看CD中给出的代码,不 知道那里的原代码是不是正确。

PS: $tcp($i) set ack_表示接收端收到的最大确认号。

运行错误注解


(1)$ ns queue.tcl myfifo 10
invalid command name "Queue/myfifo"
while executing
"Queue/myfifo create _o476 "
invoked from within
"catch "$className create $o $args" msg"
invoked from within
"if [catch "$className create $o $args" msg] {
if [string match "__FAILED_SHADOW_OBJECT_" $msg] {
delete $o
return ""
}
global errorInfo
error "class $..."
(procedure "new" line 3)
invoked from within
"new Queue/$qtype"
("default" arm line 3)
invoked from within
"switch -exact $qtype {
ErrorModule {
if { [llength $args] > 0 } {
set q [eval new $qtype $args]
} else {
set q [new $qtype Fid]
}
}
intserv {
set qtyp..."
(procedure "_o3" line 14)
(Simulator simplex-link line 14)
invoked from within
"_o3 simplex-link _o70 _o73 56k 10ms myfifo"
("eval" body line 1)
invoked from within
"eval $self simplex-link $n1 $n2 $bw $delay $type $args"
(procedure "_o3" line 8)
(Simulator duplex-link line 8)
invoked from within
"$ns duplex-link $r1 $r2 56k 10ms $par1"
(file "queue.tcl" line 55)


按照上面的提示应该是队列名myfifo有问题,但是输入FIFO也不行。但是输入RED队列时
$ ns queue.tcl RED 10
average throughput: 4643.743454368604 (bps)
输出正常,不知道是什么原因?

解决办法:http://140.116.72.80/~smallko/ns2/module.htm

并将$q_ attach $queuechan改为:
$ns monitor-queue $r1 $r2 [open q-$par1-$par2.tr w] 0.3
[$ns link $r1 $r2] queue-sample-timeout

(2)SplitObject::trace called in the base class of _o476
解决办法:全是 因为 空格 的格式 出现的问题 
所以 大家在要注意 这非常严谨的 语言

在這邊先做個小結,如何新增模組到ns2的核心步驟如下:

1.準備好模組檔(例如,a.cc 和 a.h)。

2.若有需要做初始設定的話,修改ns-default.tcl檔。

3.修改Makefile(把a.o加到OBJ_CC內)

4.重新編譯

5.測試模組

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值