NS中提供了配置节点与流量颜色标识的方法,给一条流“上色”是经常用的方法,但是在无线仿真的时候不好用,经常出现只有fid=0的流上了颜色,经过仔细研究源代码,发现有下面一段,[cmu-trace.cc]
// A simple hack for scadds demo (fernandez's visit) -- Chalermek
int pkt_color = 0;
之后还有一些判断,好像是在802.15.4的情况下才有颜色,如果添上下面这段,颜色是都有了,但是很可能不太正确,期望有高手能解决。
hdr_ip* iph = hdr_ip::access(p);
pkt_color = iph -> fid_;
再说节点的颜色配置,可能很少有人用到。但是在无线环境下,尤其是节点会移动的情况下,把节点标记成不同的颜色,会大大提高可视化程度。NS给用户提供的节点配置颜色的方法定义在Ns-namsupp.tcl中,函数的声明为:
Node instproc color { color } {
$self instvar attr_ id_
set ns [Simulator instance]
if [$ns is-started] {
# color must be initialized
$ns puts-nam-config \
[eval list "n -t [format "%.15g" [$ns now]] -s $id_ -S COLOR -c $color -o $attr_(COLOR) -i $color -I $attr_(LCOLOR)"]
set attr_(COLOR) $color
set attr_(LCOLOR) $color
} else {
set attr_(COLOR) $color
set attr_(LCOLOR) $color
}
}
前几天我在配置脚本的时候想使用节点颜色,还有节点标签,所以我做了如下配置:
$node_(1) color red
$node_(1) label mobile_node
但是Nam播放中,节点仍然是黑色的,我又仔细看了函数声明,发现配置方法没错,可是为什么节点的颜色就是没变呢?进一步深入研究了NamTrace文件,我发现前面的若干行是用来初始化节点的位置、形状、颜色的:
n -t * -s 1 -x 300 -y 200 -Z 0 -z 30 -v circle -c black
可以清楚的看见颜色的配置是黑色,可是我明明指定它为红色了!我要看看是哪里打印了这一行,一番搜索,找到了在Ns-lib.tcl中负责Node的Nam配置初始化函数:
Simulator instproc initial_node_pos {nodep size} {
$self instvar addressType_
$self instvar energyModel_
if [info exists energyModel_] {
set nodeColor "green"
} else {
set nodeColor "black"
}
......
# Flat addressing
$self puts-nam-config "n -t * -s [$nodep id] \
-x [$nodep set X_] -y [$nodep set Y_] -Z [$nodep set Z_] -z $size \
-v circle -c $nodeColor"
}
}
注意看那个 if 结构,由于只有两种情况,开启了能量模型节点就是绿色的否则就是黑的,所以我们前面所做的配置都没有用了,于是乎,改之!将那个 if 结构的内容改成如下所示:
if [info exists energyModel_] {
set nodeColor "green"
} else {
# set nodeColor "black"
set tempcolor [$nodep set attr_(COLOR)]
if {$tempcolor == "green"} {
puts "Green is reserved for energy model, you may not set your node green..."
set tempcolor "black"
}
puts "Node color is set to $tempcolor"
set nodeColor $tempcolor
}
然后重新make (编译ns)一下,甚至不用重新make,只要你把改过的Simulator instproc initial_node_pos 的声明与定义都写到你的TCL脚本的头部,这样你这个脚本中调用的函数就是你自定义的了。再重新运行一遍试试。检查一下NamTrace文件:
n -t * -s 1 -x 300 -y 200 -Z 0 -z 30 -v circle -c red
好了,这次配置正确了,用Nam跑一遍,赏心悦目啊~
$node_ color black ---1
$ns_ at 30.0 "$node_ color red" ---2
第一行只是给节点增加了颜色属性 ,注意必须有,否则后面颜色的设置将不起作用
第二行是设置节点在30.0时颜色为 red,其中时间任意,但是必须大于0 :)
ns中用到的几种颜色:(其中yellow和gold不太容易分清,建议不要同时用)
red
yellow
blue
green
black
chocolate
brown
tan
gold
分享到:
相关推荐
非常好的无线网络ns2仿真教程 非常好的无线网络ns2仿真教程 非常好的无线网络ns2仿真教程 非常好的无线网络ns2仿真教程 非常好的无线网络ns2仿真教程
无线传感器网络的NS2仿真代码 TCL的脚本
基于NS2的无线网络隐藏节点问题仿真实验.pdf
无线网络中TCP协议的改进及NS2仿真,陈觅科,惠珍珍,TCP协议为两个任意处理速率的,使用不可靠IP连接机制的机器之间的通信提供了可靠的,具有流量控制的,端到端的数据流服务。像大多�
该资料讲的是使用ns2进行网络仿真,对五项传感网络仿真有很大的帮助
《NS2仿真实验:多媒体和无线网络通信》一书以实验为基础,兼顾教学需要,介绍了NS2及TCL语言,同时为使学生在学习理论之后能够有所实践,提供了各种NS2实验过程。《NS2仿真实验:多媒体和无线网络通信》共有26个实验...
分析延迟/ns2/可以用在在多个节点间无线网络的仿真,分析延迟、吞吐量、丢包率
ns2仿真ns与网络模拟的源码,路由器代码,节点链路,几个简单的ns2实例
无线网络仿真实验:隐藏节点仿真的实验文档及实验代码
ns2中无线节点创建原理及过程,涉及部分otcl源码
通常在NS2仿中,如果网络参数变化,需要手动修改TCL脚本中设置的参数,然后在重新运行TCL文件获得仿真结果。如此比较麻烦,如何自动修改网络参数并运行仿真,且自动保存运行结果?此处代码实现如下功能:每一次仿真...
NS2仿真实验_多媒体和无线网络通信 源代码 书籍另外下载
Ns2仿真实验-多媒体与无线网络,柯志恒老师的书,对于学习NS2还是很好的
无线传感网 NS2 仿真 aodv 移动节点
《NS2仿真实验--多媒体和无线网络通信》全部26个实验的实验代码
ns2.28中aodv的源代码,用于无线网络路由协议在ns中进行的仿真,NS_2的仿真模拟技术分析
柯志亨版NS2仿真实验-多媒体和无线网络通信书中实验十一(各种TCP版本一)的所有程序,所有程序都是调过的,可运行。
NS2仿真实验——多媒体和无线网络通信(柯志亨 2009
《NS2仿真实验—多媒体和无线网络通信》PDF版,柯志亨等著。