MPLS-sim-template.txt
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:7k
源码类别:

通讯编程

开发平台:

Visual C++

  1. # NS tcl script template - tested on snapshot 18-09-00
  2. #
  3. # Jan-Rutger Schrader, KPN Research, the Netherlands
  4. # j.h.r.schrader@kpn.com
  5. # version 0.3
  6. # contributed by Schrader, J.H.R. <J.H.R.Schrader@kpn.com>
  7. # $Header: /cvsroot/nsnam/ns-2/tcl/ex/MPLS-sim-template.txt,v 1.4 2000/10/30 17:27:34 haoboy Exp $
  8. #
  9. # Create simulator object
  10. #
  11. set ns [new Simulator]
  12. #
  13. # Open files to write trace-data for NAM and Xgraph
  14. #
  15. set nf [open mpls.nam w]
  16. $ns namtrace-all $nf
  17. set f0 [open mpls.tr w]
  18. #
  19. # Finish procedure which closes the trace file and opens Xgraph and NAM
  20. #
  21. proc finish {} {
  22. global ns nf f0
  23. $ns flush-trace
  24. close $nf
  25. close $f0
  26.         exec nam mpls.nam &
  27. exit 0
  28. }
  29. #
  30. # Set dynamic distance-vector routing protocol
  31. #
  32. $ns rtproto DV
  33. #
  34. # define nodes and MPLS LSRs (in case of a LSR, the [$ns node]
  35. # command has to be preceded by node-config -MPLS ON
  36. # and succeeded by node-config -MPLS OFF
  37. #
  38. set node0   [$ns node]
  39. $ns node-config -MPLS ON
  40. set LSR1   [$ns node]
  41. :
  42. :
  43. set LSR11  [$ns node]
  44. $ns node-config -MPLS OFF
  45. set node12  [$ns node]
  46. #
  47. # Define links, bandwidth 1 Mb, delay 10ms, queue managementDropTail 
  48. #
  49. $ns duplex-link $node0 $LSR4  1Mb  10ms DropTail 
  50. $ns duplex-link $LSR1  $LSR2  1Mb  10ms DropTail 
  51. :
  52. $ns duplex-link $LSR10 $LSR11 1Mb  10ms DropTail 
  53. $ns duplex-link $LSR11 $node12 1Mb 10ms DropTail
  54. #
  55. # Control layout of the network
  56. #
  57. $ns duplex-link-op $node0 $LSR4  orient right
  58. $ns duplex-link-op $LSR1  $LSR2  orient right
  59. $ns duplex-link-op $LSR1  $LSR4  orient left-down
  60. :
  61. :
  62. $ns duplex-link-op $LSR9  $LSR10 orient right-up
  63. $ns duplex-link-op $LSR10 $LSR11 orient right
  64. $ns duplex-link-op $LSR11 $node12 orient right
  65. #
  66. # The default value of a link cost (1) can be adjusted  
  67. # Notice that the procedure sets the cost along one direction only!  
  68. #
  69. $ns cost $LSR4 $LSR5 3
  70. $ns cost $LSR5 $LSR4 3 
  71. #
  72. # Install/configure LDP agents on all MPLS nodes,
  73. # and set path restoration function that reroutes traffic
  74. # around a link failure in a LSP to an alternative LSP.
  75. # There are 2 options as follows:
  76. # "new": create new alternative path if one doesn't exist
  77. # "drop": do not create any new alternative path
  78. #
  79. # Adjust loop length to address all LSRs (MPLS nodes).
  80. #
  81. for {set i 1} {$i < 12} {incr i} {
  82. set a LSR$i
  83. for {set j [expr $i+1]} {$j < 12} {incr j} {
  84. set b LSR$j
  85. eval $ns LDP-peer $$a $$b
  86. }
  87. set m [eval $$a get-module "MPLS"]
  88. $m enable-reroute "new"
  89. }
  90. #
  91. # Set ldp-message color in NAM
  92. #
  93. $ns ldp-request-color       blue
  94. $ns ldp-mapping-color       red
  95. $ns ldp-withdraw-color      magenta
  96. $ns ldp-release-color       orange
  97. $ns ldp-notification-color  yellow
  98. # Define trigger strategy, Label Distribution Control Mode
  99. # and Label Allocation and Distribution Scheme
  100. #
  101. # when the following line is omitted, trigger strategy is
  102. # set to data-driven
  103. Classifier/Addr/MPLS set control_driven_ 1
  104. Classifier/Addr/MPLS enable-on-demand
  105. Classifier/Addr/MPLS enable-ordered-control
  106. #
  107. # Trigger strategy can also be defined per LSR
  108. #
  109. [$LSR4 get-module "MPLS"] enable-control-driven
  110. [$LSR3 get-module "MPLS"] enable-data-driven
  111. #
  112. # Turn on all traces to stdout
  113. #
  114. Agent/LDP set trace_ldp_ 1
  115. Classifier/Addr/MPLS set trace_mpls_ 1
  116. #
  117. # use 'List' scheduling of events
  118. #
  119. $ns use-scheduler List
  120. #
  121. # Define procedure to create a CBR traffic flow and connect it to a UDP agent
  122. #
  123. proc attach-expoo-traffic { node sink size burst idle rate } {
  124. global ns
  125. set udp [new Agent/UDP]
  126. $ns attach-agent $node $udp
  127. set traffic [new Application/Traffic/Exponential]
  128. $traffic set packetSize_ $size
  129. $traffic set burst_time_ $burst
  130. $traffic set idle_time_ $idle
  131. $traffic set rate_ $rate
  132. $traffic attach-agent $udp
  133. $ns connect $udp $sink
  134. return $traffic
  135. }
  136. #
  137. # Create a traffic sink and attach it to the node node12
  138. #
  139. set sink0 [new Agent/LossMonitor]
  140. $ns attach-agent $node12  $sink0
  141. #
  142. # Create a traffic source
  143. #
  144. set src0 [attach-expoo-traffic $node0  $sink0 200 0 0 400k]
  145. #
  146. # Create a TCP agent and connect it to an application like FTP or Telnet, which
  147. # generates the data
  148. #
  149. set tcp [new Agent/TCP]
  150. $ns attach-agent $node0 $tcp
  151. set ftp [new Application/FTP]
  152. $tcp set packetSize_ 1024
  153. $ftp attach-agent $tcp
  154. set sink [new Agent/TCPSink]
  155. $ns attach-agent $node12 $sink 
  156. $ns connect $tcp $sink
  157. #
  158. # Procedure which dumps the nr of packets sent/received at the prompt
  159. # (in case of a TCP source)
  160. #
  161. proc monitor {} { 
  162.    global tcp 
  163.    $tcp instvar ndatapack_ 
  164.    puts "packets send: $ndatapack_" 
  165.    $tcp instvar nackpack_
  166.    puts "packets received: $nackpack_"
  167. #
  168. # Define a procedure which periodically records the bandwidth received by the
  169. # traffic sink sink0 and writes it to the file f0.
  170. #
  171. set totalpkt 0
  172. proc record {} {
  173.         global sink0 f0 totalpkt
  174. set ns [Simulator instance]
  175. #Set the time after which the procedure should be called again
  176.         set time 0.005
  177. #How many bytes have been received by the traffic sink?
  178.         set bw0 [$sink0 set bytes_]
  179. #Get the current time
  180.         set now [$ns now]
  181. #Calculate the bandwidth (in MBit/s) and write it to the file
  182.         puts $f0 "$now [expr $bw0/$time*8/1000000]"
  183. #Reset the bytes_ values on the traffic sink
  184.         $sink0 set bytes_ 0
  185. #Re-schedule the procedure
  186.         $ns at [expr $now+$time] "record"
  187.         
  188.         set bw0 [expr $bw0 / 200]
  189.         set totalpkt [expr $totalpkt + $bw0]
  190. }
  191. #
  192. # Procedure to dump the number of received packets calculated by the procedure
  193. # record at the command prompt
  194. #
  195. proc recv-pkts {} {
  196.      global totalpkt
  197.      flush stdout
  198.      puts "The Number of Total received packet is $totalpkt"
  199. }
  200. #
  201. # From here on the simulation events are defined
  202. #
  203. # Start procedure "record"
  204. #
  205. $ns at 0.0   "record"
  206. #
  207. # Source start
  208. #
  209. $ns at 0.1   "$src0 start"
  210. #
  211. # Example of defining protection paths according to Haskin's model
  212. #
  213. $ns at 0.1 "[$LSR4 get-module MPLS] make-explicit-route 11  1_2_3_10_11  1000  -1"
  214. $ns at 0.2 "[$LSR11 get-module MPLS] make-explicit-route 11 11_10_9_8_7_4_1000 1005 -1"
  215. #
  216. # Reroute option used to simulate Haskin's model
  217. #
  218. $ns at 0.3   "[$LSR9 get-module MPLS] reroute-binding   12   -1   1005"
  219. #
  220. # Define link failures
  221. #
  222. $ns rtmodel-at 0.3 down $LSR5 $LSR6
  223. $ns rtmodel-at 0.3 down $LSR6 $LSR3
  224. :
  225. $ns rtmodel-at 0.4 down $LSR9 $LSR10
  226. #
  227. # Define when the link have to be restored
  228. #
  229. $ns rtmodel-at 0.5 up   $LSR5 $LSR6
  230. $ns rtmodel-at 0.5 up   $LSR6 $LSR3
  231. :
  232. $ns rtmodel-at 0.5 up   $LSR9 $LSR10
  233. #
  234. # Trace results (MPLS/LDP packets) at a given LSR are dumped at the prompt
  235. #
  236. $ns at 0.1 "[$LSR3 get-module MPLS] trace-mpls"
  237. $ns at 0.1 "[$LSR4 get-module MPLS] trace-LDP"
  238. #
  239. # Source stop
  240. #
  241. $ns at 0.6 "$src0 stop"
  242. #
  243. # Calls procedure "recv-pkts" (and dumps the nr of received packets at the 
  244. # command prompt
  245. #
  246. $ns at 0.7 "recv-pkts"
  247. #
  248. # Displays the erb/lib/pft-table of the given LSR at the command prompt
  249. #
  250. $ns at 0.7 "[$LSR1 get-module MPLS] erb-dump"
  251. $ns at 0.7 "[$LSR1 get-module MPLS] lib-dump"
  252. $ns at 0.7 "[$LSR1 get-module MPLS] pft-dump"
  253. #
  254. # Calls the procedure "finish"
  255. #
  256. $ns at 0.7 "finish"
  257. #
  258. # The last line finally starts the simulation
  259. #
  260. $ns run