添加路由协议出错问题

 

添加路由协议后,经常会出现以下错误,其实还是协议没有添加成功,估计很多人都会遇到这个问题,主要是“_o14”node实例句柄出错,换句话说,就是在修改ns-lib.tcl的时候出错了,之前有就MFlood协议添加就分析错误代码的文章,感觉博主写得很不错,其实也可以用gdb调试来寻找可能的问题原因~

// 5)

    (_o14 cmd line 1)
    invoked from within
"_o14 cmd addr"
    invoked from within
"catch "$self cmd $args" ret"
    invoked from within
"if [catch "$self cmd $args" ret] {
set cls [$self info class]

//问题出在这里,么有相应的addr的处理代码,但实际上添加路由协议以后不应该跳转到default的case,问题出在哪里,需要进一步分析。

//仔细分析之后,发现调用的ns命令一直没有实际执行编译后的ns

// jerry@jerry-desktop:~/ns-allinone-2.31/bin$ which ns
// /home/jerry/ns-allinone-2.31/bin/ns  //显示的目录
// 解决办法:重新建立ns的软链接,即

// jerry@jerry-desktop:~/ns-allinone-2.31/bin$ mv ns ns.bak

// jerry@jerry-desktop:~/ns-allinone-2.31/bin$ ln -s ../ns-2.31/ns .

// jerry@jerry-desktop:~/ns-allinone-2.31/bin$ ls -l ns  //再次查看ns链接情况
// lrwxrwxrwx 1 jerry jerry 13 2011-09-23 13:26 ns -> ../ns-2.31/ns

global errorInfo
set savedInfo $errorInfo
error "error when calling class $cls: $args" $..."
    (procedure "_o14" line 2)
    (SplitObject unknown line 2)

// 5)分裂对象未知,调用该类时找不到

    invoked from within

// 4)

"_o14 addr"
    ("eval" body line 1)
    invoked from within
"eval $node addr $args"
    ("default" arm line 2)

// 4)提示问题处在default这个case的第一行,实例句柄为_o14 addr调用出错

    invoked from within

// 3)

"switch -exact $routingAgent_ {
DSDV {
set ragent [$self create-dsdv-agent $node]
}
DSR {
$self at 0.0 "$node start-dsr"
}
AODV {
set ragent [$self cre..."
    (procedure "_o3" line 12)
    (Simulator create-wireless-node line 12)

// 3)指明_o3出现错误的调用语句,在Simulator instproc create-wireless-node args函数体switch体的第12行

//12 "eval $node addr $args"

    invoked from within

// 2)

"_o3 create-wireless-node"
    ("eval" body line 1)
    invoked from within
"eval $self create-wireless-node $args"
    (procedure "_o3" line 23)
    (Simulator node line 23)

// 2)提示在ns-2.31/tcl/lib/ns-lib.tcl文件中的Simulator instproc node args(Simulator node)的23行代码,即为
//23   set node [eval $self create-wireless-node $args]     #$self = = "-o3"
//使用eval 是从tcl脚本调用Otcl对象及函数 就是"_o3 create-wireless-node"

    invoked from within
// 1)
"$ns_ node"
    ("for" body line 2)
    invoked from within

"for {set i 0} {$i < $val(nn) } {incr i} {

set node_($i) [$ns_ node]
$node_($i) random-motion 0 ;# disable random motion
}"
    (file "simple.tcl" line 63)

// 1)这一段提示问题出在tcl脚本文件的第63行,出错在"$ns_ node",即"$ns_ node"来自该for循环的

 

http://hi.baidu.com/jerry_916/blog/item/53651810f7c3ca0bb8127b4e.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章