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

在NS2的tcl脚本中传递命令行参数,tcl,ns2,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 我是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
我是tcl和NS2的noob。有人请帮帮我。

您真正的问题是,在写入变量之前,您无法读取变量(附带顺序为
$n(1)
$n1
不同,这一点在您查看它时很明显)。如果从不初始化变量,则无法从中读取。我不知道您希望在(图形中的节点)之间运行什么链接,但您需要首先创建它们:

for {set i 0} {$i < $var} {incr i} {
    set n($i) [$ns create-the node-here somehow...]
}
您可能应该保留这些链接的句柄,以便以后可以对它们进行配置(以引入任何非统一特性,例如不同的延迟)。也许是这样的:

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
set var[lindex$argv 0]
对于{set i 0}{$i<$var}{incr i}{
设置n($i)[$ns以某种方式在此处创建节点…]
}
对于{set from 0;set to 1}{$from<$var}{incr from;set to[expr{($to+1)%$var}}{
设置链路($from)[$ns双工链路$n($from)$n($to)1Mb 2ms DropTail]
}
$link(0)将延迟设置为10ms

(不,我不知道/不记得如何
创建节点
设置延迟

@burro,Donal的回答中没有强调这一点,但第一个cmdline参数是
[lindex$argv 0]
而不是
[lindex$argv 1]
--Tcl列表从索引0开始。
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