在NS2中的tcl脚本中传递命令行参数

时间:2014-03-20 11:40:32

标签: tcl ns2

我想通过命令行参数创建拓扑。我在命令行参数中传递了节点号。这是我的命令

ns sat-wired2.tcl 30

这是tcl脚本片段

set var [lindex $argv 1]
for {set i 0} {$i < $var } {incr i} {
  $ns duplex-link $n($i) $n([($i+1)]) 1Mb 2ms DropTail
}

$ns duplex-link $n($var) $n1 1Mb 10ms DropTail

这是我的输出

 no such variable
    while executing
"$ns duplex-link $n($var) $n1 1Mb 10ms DropTail"
    (file "sat-wired2.tcl" line 109)

我在tcl和NS2中都是菜鸟。有人请帮助我。

1 个答案:

答案 0 :(得分:2)

您的真正的问题是,在您写入变量之前,您无法从变量中读取(副作用$n(1)与{{{}不同1}},当你看它时很明显)。如果您从未初始化变量,则无法从中读取变量。我不知道您希望在(图表中的节点)之间运行链接,但您需要先创建它们:

$n1

然后你似乎想要在一个循环中链接它们。哪个对我好。最好的方法是使用一个包含两个变量的循环(其中一个是“mod for {set i 0} {$i < $var} {incr i} { set n($i) [$ns create-the node-here somehow...] } ”):

$var

您可能应该保留这些链接的句柄,以便之后可以配置它们(以引入任何非统一的功能,例如不同的延迟)。也许就像这样:

for {set from 0; set to 1} {$from < $var} {incr from; set to [expr {($to+1) % $var}]} {
    $ns duplex-link $n($from) $n($to) 1Mb 2ms DropTail
}

(不,我不知道/记得如何set var [lindex $argv 0] for {set i 0} {$i < $var} {incr i} { set n($i) [$ns create-the-node here somehow...] } for {set from 0; set to 1} {$from < $var} {incr from; set to [expr {($to+1) % $var}]} { set link($from) [$ns duplex-link $n($from) $n($to) 1Mb 2ms DropTail] } $link(0) set-the-latency to 10ms create-the-node。)