NS2脚本中如何使用God(转)

来源:互联网 发布:淘宝店的数量限购 编辑:程序博客网 时间:2024/06/06 00:12
在无线网络模拟中,借助God可以获得整个网络的一些全局性信息。在有些情况下,这些信息非常必要,比如要判断两个相邻无线节点是否在传输范围之类。

NS2对God的支持在C++空间中主要是God类,该类分别声明和实现在ns-2.30/mobile/god.h文件和ns-2.30/mobile/god.cc文件中(我使用的是ns-2.30版)。

如果在仿真脚本里使用God,需要以下几个基本设置:
  • 在node-config命令的选项中要开启能量模型,如果不开启能量模型,God将认为所有的节点之间都不相邻,其他信息也无从获得,这显然不是我们想要的。

$ns_ node-config    -...... /
                    -energyModel $opt(engmodel) /
                    -initialEnergy $opt(initeng) /
                    -txPower $opt(txPower) /
                    -rxPower $opt(rxPower) /
                    -idlePower $opt(idlePower) /
                    -......

 

  • 当然前面设置好上面这些参数的值:(以下为常用的典型值)

set opt(engmodel)    EnergyModel
set opt(initeng)    10000.0
set opt(txPower)    0.660
set opt(rxPower)    0.395
set opt(idlePower)    0.035

 

  • 以上设置完毕,下面创建God对象:

set god_ [create-god $opt(nn)]
$god_ on
#这里还可以加一些其他设置,比如
#$god_ allow_to_stop

 

  • 上面的变量$opt(nn)是网络中节点的数量,也许要提前赋值,例如:

set opt(nn) 10

 

  • 创建God对象后,C++空间的God对象也被创建,并且C++空间的God对象里的mb_node数组被分配,每个数组元素是一个MobileNode对象的指针,数组大小就是网络节点的数量大小。但现在这些指针的值都还为NULL,不指向任何MobileNode对象(MobileNode类是对应无线网络节点的类)。为了给这些指针赋值,在Tcl脚本里需要添加一些代码,具体的位置是在NS创建节点后,将这些节点与God联系起来:

for {set i 0} {$i < $opt(nn)} {incr i} {
    set node_($i) [$ns_ node]
    $node_($i) random-motion 0
    $god_ new_node $node_($i)
}

 

  • 这样这些节点对应的MobileNode对象的指针被填充到上面提到的mb_node数组中,在C++代码中可以随时随地通过God来获得当前网络的全局情况。比如判断两个节点是否邻节点,可以调用:

God::instance().IsNeighbor(i,j)   //其中i,j是网络节点的地址

 

参考:http://blog.chinaunix.net/u1/33444/showart_273201.html

http://www.cse.msu.edu/~wangbo1/ns2/nshowto2.html