Bash cbrgen启动模拟启动

Bash cbrgen启动模拟启动,bash,tcl,ns2,Bash,Tcl,Ns2,我需要帮助来解决这个问题: Starting Simulation... ns: start": invalid command name "start"" while executing "start"" 我有一个文件bash和一个文件tcl,但我不知道为什么它总是给我这个问题 这是cbrgen文件中的第二个问题 proc create-cbr-connection { src dst } { global rng cbr_cnt opt set stime [$rn

我需要帮助来解决这个问题:

Starting Simulation...
    ns: start": invalid command name "start""
    while executing
   "start""
我有一个文件bash和一个文件tcl,但我不知道为什么它总是给我这个问题

这是cbrgen文件中的第二个问题

proc create-cbr-connection { src dst } {
global rng cbr_cnt opt

set stime [$rng uniform 0.0 10.0]

puts "#\n# $src connecting to $dst at time $stime\n#"

##puts "set cbr_($cbr_cnt) \[\$ns_ create-connection \
    ##CBR \$node_($src) CBR \$node_($dst) 0\]";

puts "set udp_($cbr_cnt) \[new Agent/UDP\]"
puts "\$ns_ attach-agent \$node_($src) \$udp_($cbr_cnt)"
puts "set null_($cbr_cnt) \[new Agent/Null\]"
puts "\$ns_ attach-agent \$node_($dst) \$null_($cbr_cnt)"
puts "set cbr_($cbr_cnt) \[new Application/Traffic/CBR\]"
puts "\$cbr_($cbr_cnt) set packetSize_ $opt(pktsize)"
puts "\$cbr_($cbr_cnt) set interval_ $opt(interval)"
puts "\$cbr_($cbr_cnt) set random_ 1"                                                           
puts "\$cbr_($cbr_cnt) set maxpkts_ 10000"
puts "\$cbr_($cbr_cnt) attach-agent \$udp_($cbr_cnt)"
puts "\$ns_ connect \$udp_($cbr_cnt) \$null_($cbr_cnt)"

set start [expr {10*rand()}]
puts "\$ns_ at $start \"\$cbr_($cbr_cnt) start\""
puts "\$ns_ at 100 \"\$cbr_($cbr_cnt) stop\""

似乎您正在编写代码来编写代码。这比仅仅编写代码要困难得多

直接的错误是,您正在调用的模拟器正在尝试运行名为
start
的命令,但您没有在该上下文中定义该命令。显然,这不起作用,你会得到错误信息:它的意思就是它所说的

深入研究,您的代码生成器(在您编辑的代码中)似乎正在通过以下方式编写对
start
的调用:

puts $ns_ "blah blah blah...;start"
是否应该在该点编写对
start
的调用?如果没有,那就是您的问题(
在Tcl中是一个命令终止符,如果没有引号,即使它很少使用。)

否则,问题是您必须提供
start
的定义,可能是通过一个过程。我不知道它应该做什么,但有两个选项可以写:

puts $ns_ [list proc start {} { ... the definition in here ... }]
(列表构造了一个无引号命令,在这里很有用。)

或者更好的方法是,将过程定义写入一个单独的文件中,该文件不会根据
cbrgen
所做的更改而更改,例如
static\u definitions.tcl
,以及
source
,通过在顶部附近写入以下内容,从生成的文件中删除:

puts $ns_ [list source [file normalize static_definitions.tcl]]
# This is just the paranoid upgrade of this simpler form:
#      puts $ns_ "source static_definitions.tcl"

Tcl的
源代码
与C/C++的
#include
非常相似,只是它是Tcl的一部分,而不是预处理器的一部分…

您的代码示例太长了。把范围缩小到你认为可能导致你的问题的部分。我认为这是一个部分:set start[expr{10*rand()}将“\$ns\$at$start\”\$cbr\$u($cbr\$u cnt)start\”将“\$ns\$u”设置为100\“\$cbr\$cbr\$u cnt)stop\”