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 基本这么多了,好像有点啰嗦了。 不管了,好累,回家跳舞咯!
- NS2学习(2)——看源码,学命令
- 用sourceinsight看ns2源码 - [NS2]
- ns2相关学习——TCL脚本编写(2)
- NS2学习笔记(2)
- 看源码学知识(不定期更新)
- 看源码学dagger2
- NS2学习(1)——分裂对象模型
- NS2学习(3)——mac定时器
- NS2学习(4)——事件调度机制
- NS2学习(5)——Packet传输流程
- NS2学习(6)——Tcl类
- ns2相关学习——tcl脚本编写(1)
- ns2相关学习——TCL脚本编写(3)
- 新人学编程必看——HTML学习资料
- NS2相关学习——完成一个新协议(2)
- NS2 学习笔记—— AODV协议
- NS2学习笔记——随机数产生器
- NS2 学习笔记—— AODV协议
- DELPHI中创建调用DLL
- 分布式事务故障处理
- 收入丰厚小白领 四步走实现创业梦晋升老板
- 重申差异决定了变化,最终解决老婆 IE崩溃问题
- WebGL样品与演示
- NS2学习(2)——看源码,学命令
- 浏览器加载、渲染和解析过程的黑箱分析
- 梦想起飞
- 如何免费推广自己的网站?
- 为窗口设置背景图片
- 献给想深入学习网络编程的朋友
- 求助!!!!
- C++ STL编程轻松入门0
- css盒子定位position的属性