NS2学习(2)——看源码,学命令

来源:互联网 发布:数据库查找工具 编辑:程序博客网 时间:2024/04/29 10:04

     今天学习了一些简单的命令,直接看Tcl语法太枯燥了,还是从源码来学习吧!都是些很简单、很基础的东西了,文件来源是NS2自带的simple-wireless.tcl(~ns/tcl/ex/simple-wireless.tcl),稍有改动哦。

# ======================================================================

# 定义选项,设定模拟需要的一些属性。

# ======================================================================

set val(chan)           Channel/WirelessChannel                                    ;# 无线信道类型

set val(prop)           Propagation/TwoRayGround                               ;# 无限信号传输模型

set val(netif)           Phy/WirelessPhy                                                ;# 物理层类型

set val(mac)            Mac/802_11                                                      ;# MAC层类型

set val(ifq)              Queue/DropTail/PriQueue                                   ;# 接口队列类型

set val(ll)                LL                                                                     ;# 链路层类型

set val(ant)             Antenna/OmniAntenna                                         ;# 天线类型

set val(ifqlen)         50                                                                      ;# 队列长度

set val(nn)              2                                                                       ;# 移动节点个数

set val(rp)              DSDV                                                                ;# 路由协议

set val(x)               500                                                                    ;# 拓扑的X尺寸

set val(y)               500                                                                    ;# 拓扑的Y尺寸

# ======================================================================

# 主程序

# ======================================================================

#

# 初始化全局变量

#

#建立一个Simulator对象的实例并赋值给变量ns_

set ns_ [new Simulator]

#打开一个名为simple.tr的文件(若不存在,则创建),设定文件可写,变量tracefd指向该文件

set tracefd     [open simple.tr w]

#调用Simulator类的trace-all方法将整个模拟过程写入simple.tr的Trace文件中

$ns_ trace-all $tracefd

set namtracefd  [open simple.nam w]

#在拓扑范围内建立无线nam跟踪

$ns_ namtrace-all-wireless $namtracefd $val(x) $val(y)

#建立一个Topography对象,该对象会保证节点在拓扑边界范围内运动

set topo       [new Topography]

#设定模拟所采用的场景的长宽尺寸

$topo load_flatgrid $val(x) $val(y)

#

# 建立一个God对象。God对象主要用来对路由协议做性能评价,它存储了节点总数,节点间最短路径等信息。节点的MAC对象会调用God对象,因此即使不使用也仍然要建立此对象。

#

create-god $val(nn)

#

# 建立指定数目[$val(nn)]的移动节点并将它们连接至信道。

# 这里建立了两个节点: node(0),node(1)

# 配置节点

        $ns_ node-config -adhocRouting $val(rp) /

                                  -llType $val(ll) /

                                  -macType $val(mac) /

                                  -ifqType $val(ifq) /

                                 -ifqLen $val(ifqlen) /

                                 -antType $val(ant) /

                                 -propType $val(prop) /

                                 -phyType $val(netif) /

                                 -channelType $val(chan) /

                                 -topoInstance $topo /

                                 -agentTrace ON /

                                 -routerTrace ON /

                                 -macTrace OFF /

                                 -movementTrace OFF

#建立两个节点,关闭节点的随机运动功能,即节点的运动完全有程序指定  

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

set node_($i) [$ns_ node]

$node_($i) random-motion 0 ;

}

#

# 为移动节点指定初始的X,Y坐标,此处Z坐标为0

#

$node_(0) set X_ 5.0

$node_(0) set Y_ 2.0

$node_(0) set Z_ 0.0

$node_(1) set X_ 390.0

$node_(1) set Y_ 385.0

$node_(1) set Z_ 0.0

# 下面产生一些简单的运动

# Node_(1)在50.0s,以15.0m/s的速度向坐标(25.0,20.0)运动

$ns_ at 50.0 "$node_(1) setdest 25.0 20.0 15.0"

# Node_(0)在10.0s,以1.0m/s的速度向坐标(20.0,18.0)运动

$ns_ at 10.0 "$node_(0) setdest 20.0 18.0 1.0"

# Node_(1)在100.0s,以15.0m/s的速度向坐标(490.0,480.0)运动

$ns_ at 100.0 "$node_(1) setdest 490.0 480.0 15.0" 

#设置节点间的流量

#创建一个TCP源代理对象tcp

set tcp [new Agent/TCP]

#class_是agent类中定义的整型变量,分类之后用于着色。此程序无用。

$tcp set class_ 2

#创建分组的接收代理对象sink

set sink [new Agent/TCPSink]

#将源代理对象tcp绑定到节点0

$ns_ attach-agent $node_(0) $tcp

#将接收代理对象sink绑定到节点1

$ns_ attach-agent $node_(1) $sink

#在源代理对象tcp和接收代理对象sink之间建立连接

$ns_ connect $tcp $sink

#在TCP连接上创建一个FTP流量模拟器,因为TCP不会产生自己的流量

set ftp [new Application/FTP]

$ftp attach-agent $tcp

#在10.0s启动ftp流量模拟器

$ns_ at 10.0 "$ftp start" 

#

#模拟结束时告知节点

#

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

#在模拟结束前(150.0s)重置节点中的所有对象

    $ns_ at 150.0 "$node_($i) reset";

}

#告知Simulator对象在150.0s时调用stop过程

$ns_ at 150.0 "stop"

#在150.01s时输出提示语句并终止调度器

$ns_ at 150.01 "puts /"NS EXITING.../" ; $ns_ halt"

#stop过程

proc stop {} {

#声明全局变量

    global ns_ tracefd namtracefd

#清空跟踪的缓冲区

    $ns_ flush-trace

#关闭文件

    close $tracefd

    close $namtracefd

#启动nam

    exec nam simple.nam &

    exit 0

}

puts "Starting Simulation..."

#启动调度器

$ns_ run

    基本这么多了,好像有点啰嗦了。

    不管了,好累,回家跳舞咯!

原创粉丝点击