《NS與網絡模擬》第五章node示例

《NS與網絡模擬》第五章node章節最後有一示例,可是語句解釋的不是很全面,G了下,有篇博文http://blog.chinaunix.net/u2/82448/showart_1360762.html解釋的較爲詳細,但輸出的結果卻沒有,爲了看得清楚些並能更好的理解相關語句,特將此示例修改如下:
set ns [new Simulator] ;#建立一個Simulator對象的實例並把它賦值給變量ns。
set node [$ns node] ;#新建一個節點並賦值給node。
set udp0 [new Agent/UDP] ;  #新建一個UDP Agent並賦值給udp0。
set udp1 [new Agent/UDP] ;#新建一個UDP Agent並賦值給udp1。
set null [new Agent/Null] ;#新建一個UDP Agent並賦值給null。
$ns attach-agent $node $udp0 ;##將UDP Agent udp0綁定到node上。
puts "===============輸出各對象的值================"
puts "ns的值:$ns"
puts "node的值:$node"
puts "udp0的值:$udp0"
puts "udp1的值:$udp1"
puts "null的值:$null"
puts "============================================="
puts "號碼爲0的slot對應的對象名: [[$node set dmux_] slot 0]" ;
  #查詢號碼爲0的slot對應的對象名並將其輸出。
puts "udp0的值: $udp0" ;#輸出udp0的值。
puts "udp0所在的slot號碼: [[$node set dmux_] findslot $udp0]" ;
  #查詢udp0所在的slot號碼並輸出。
puts "查詢null所在的slot號碼(若沒有則輸出-1):[[$node set dmux_] findslot $null]" ;
  #查詢null所在的slot號碼,表中沒有找到該對象(當前null沒有加入),返回-1,並輸出。
puts "查詢udp1所在的slot號碼(若沒有則輸出-1):[[$node set dmux_] findslot $udp1]" ;

puts "============================================="
puts "插入一個指向udp1的表項......\n其表項的slot號碼=[[$node set dmux_] installNext $udp1]";
#在最後一個slot 0後插入一個新的指向對象udp1的表項,並返回該表項的slot號碼、輸出。
puts "查詢號碼爲1的slot對應的對象名:[[$node set dmux_] slot 1]" ;
#查詢號碼爲1的slot對應的對象名並將其輸出。
puts "udp1的值:$udp1" ;#輸出udp1的值。

puts "============================================="
puts "將號碼爲0的slot所指向的對象設爲udp1(slot0原本指向udp0)......"
[$node set dmux_] install 0 $udp1 ;
#將號碼爲0的slot所指向的對象設爲udp1(slot0原本指向udp0)。
puts "查詢號碼爲0的slot對應的對象名:[[$node set dmux_] slot 0]" ;
#查詢號碼爲0的slot對應的對象名並將其輸出。
puts "udp1的值:$udp1" ;#輸出udp1的值。
puts "查詢號碼爲1的slot對應的對象名:[[$node set dmux_] slot 1]" ;

puts "============================================="
puts "尋找空閒的slot:[[$node set dmux_] alloc-port $null]" ;
#尋找一個空閒的slot並輸出。
puts "將號碼爲0的slot清空......"
[$node set dmux_] clear 0 ;# 將號碼爲0的slot清空。
puts "udp1的值:$udp1 (說明slot清空對指向的對象沒影響)" ;#輸出udp1的值。
puts "尋找空閒的slot:[[$node set dmux_] alloc-port $null]" ;
#尋找一個空閒的slot並輸出。

puts "============================================="
#puts "[[$node set dmux_ ] slot 0 ]" ;
#上面的一行命令:查詢號碼爲0的slot對應的對象名,
#由於slot 0被clear,故會返回錯誤信息,所以應該被註釋掉!否則會有錯誤輸出。
$ns run
 
運行後輸出爲:
$ ns example5.tcl
===============輸出各對象的值================
ns的值:_o3
node的值:_o10
udp0的值:_o13
udp1的值:_o14
null的值:_o15
=============================================
號碼爲0的slot對應的對象名: _o13
udp0的值: _o13
udp0所在的slot號碼: 0
查詢null所在的slot號碼(若沒有則輸出-1):-1
查詢udp1所在的slot號碼(若沒有則輸出-1):-1
=============================================
插入一個指向udp1的表項......
其表項的slot號碼=1
查詢號碼爲1的slot對應的對象名:_o14
udp1的值:_o14
=============================================
將號碼爲0的slot所指向的對象設爲udp1(slot0原本指向udp0)......
查詢號碼爲0的slot對應的對象名:_o14
udp1的值:_o14
查詢號碼爲1的slot對應的對象名:_o14
=============================================
尋找空閒的slot:2
將號碼爲0的slot清空......
udp1的值:_o14 (說明slot清空對指向的對象沒影響)
尋找空閒的slot:0
=============================================
 
Classifier類提供了一些Tcl實例過程,用戶可以在Tcl中對Classifier對象進行控制。主要實例過程:
  1. alloc-port :尋找一個空閒的slot。
  2. clear :將號碼爲index的slot清空。
  3. installNext:在最後一個slot後插入一個新的指向object的表項,並返回該表項的slot號碼:如果object爲空,會返回錯誤信息。
  4. slot :產旬號碼爲index的slot對應對象名,如果該slot爲空,會返回錯誤信息。
  5. findslot:查詢一個object所在的slot號碼,如果該object爲空,會返回錯誤信息,如果在表中沒有找到該object,會返回-1。
  6. install :將號碼爲index的slot所指向的對象設爲object。
 
按書上的解釋,命令$node set dmux_ 返回$node的PortClassifier對象,可此TCL語句在NS源碼中卻沒有找到,是如何返回的就不得而知啦!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章