📄 mpls-sim-template.txt
字号:
# NS tcl script template - tested on snapshot 18-09-00## Jan-Rutger Schrader, KPN Research, the Netherlands# j.h.r.schrader@kpn.com# version 0.3# contributed by Schrader, J.H.R. <J.H.R.Schrader@kpn.com># $Header: /nfs/jade/vint/CVSROOT/ns-2/tcl/ex/MPLS-sim-template.txt,v 1.4 2000/10/30 17:27:34 haoboy Exp $## Create simulator object#set ns [new Simulator]## Open files to write trace-data for NAM and Xgraph#set nf [open mpls.nam w]$ns namtrace-all $nfset f0 [open mpls.tr w]## Finish procedure which closes the trace file and opens Xgraph and NAM#proc finish {} { global ns nf f0 $ns flush-trace close $nf close $f0 exec nam mpls.nam & exit 0}## Set dynamic distance-vector routing protocol#$ns rtproto DV## define nodes and MPLS LSRs (in case of a LSR, the [$ns node]# command has to be preceded by node-config -MPLS ON# and succeeded by node-config -MPLS OFF#set node0 [$ns node]$ns node-config -MPLS ONset LSR1 [$ns node] : :set LSR11 [$ns node]$ns node-config -MPLS OFFset node12 [$ns node]## Define links, bandwidth 1 Mb, delay 10ms, queue managementDropTail #$ns duplex-link $node0 $LSR4 1Mb 10ms DropTail $ns duplex-link $LSR1 $LSR2 1Mb 10ms DropTail : : $ns duplex-link $LSR10 $LSR11 1Mb 10ms DropTail $ns duplex-link $LSR11 $node12 1Mb 10ms DropTail## Control layout of the network#$ns duplex-link-op $node0 $LSR4 orient right$ns duplex-link-op $LSR1 $LSR2 orient right$ns duplex-link-op $LSR1 $LSR4 orient left-down : :$ns duplex-link-op $LSR9 $LSR10 orient right-up$ns duplex-link-op $LSR10 $LSR11 orient right$ns duplex-link-op $LSR11 $node12 orient right## The default value of a link cost (1) can be adjusted # Notice that the procedure sets the cost along one direction only! #$ns cost $LSR4 $LSR5 3$ns cost $LSR5 $LSR4 3 ## Install/configure LDP agents on all MPLS nodes,# and set path restoration function that reroutes traffic# around a link failure in a LSP to an alternative LSP.# There are 2 options as follows:# "new": create new alternative path if one doesn't exist# "drop": do not create any new alternative path## Adjust loop length to address all LSRs (MPLS nodes).#for {set i 1} {$i < 12} {incr i} { set a LSR$i for {set j [expr $i+1]} {$j < 12} {incr j} { set b LSR$j eval $ns LDP-peer $$a $$b } set m [eval $$a get-module "MPLS"] $m enable-reroute "new"}## Set ldp-message color in NAM#$ns ldp-request-color blue$ns ldp-mapping-color red$ns ldp-withdraw-color magenta$ns ldp-release-color orange$ns ldp-notification-color yellow# # Define trigger strategy, Label Distribution Control Mode# and Label Allocation and Distribution Scheme## when the following line is omitted, trigger strategy is# set to data-drivenClassifier/Addr/MPLS set control_driven_ 1Classifier/Addr/MPLS enable-on-demandClassifier/Addr/MPLS enable-ordered-control## Trigger strategy can also be defined per LSR#[$LSR4 get-module "MPLS"] enable-control-driven[$LSR3 get-module "MPLS"] enable-data-driven## Turn on all traces to stdout#Agent/LDP set trace_ldp_ 1Classifier/Addr/MPLS set trace_mpls_ 1## use 'List' scheduling of events#$ns use-scheduler List## Define procedure to create a CBR traffic flow and connect it to a UDP agent#proc attach-expoo-traffic { node sink size burst idle rate } { global ns set udp [new Agent/UDP] $ns attach-agent $node $udp set traffic [new Application/Traffic/Exponential] $traffic set packetSize_ $size $traffic set burst_time_ $burst $traffic set idle_time_ $idle $traffic set rate_ $rate $traffic attach-agent $udp $ns connect $udp $sink return $traffic}## Create a traffic sink and attach it to the node node12#set sink0 [new Agent/LossMonitor]$ns attach-agent $node12 $sink0## Create a traffic source#set src0 [attach-expoo-traffic $node0 $sink0 200 0 0 400k]## Create a TCP agent and connect it to an application like FTP or Telnet, which# generates the data#set tcp [new Agent/TCP]$ns attach-agent $node0 $tcpset ftp [new Application/FTP]$tcp set packetSize_ 1024$ftp attach-agent $tcpset sink [new Agent/TCPSink]$ns attach-agent $node12 $sink $ns connect $tcp $sink## Procedure which dumps the nr of packets sent/received at the prompt# (in case of a TCP source)#proc monitor {} { global tcp $tcp instvar ndatapack_ puts "packets send: $ndatapack_" $tcp instvar nackpack_ puts "packets received: $nackpack_"} ## Define a procedure which periodically records the bandwidth received by the# traffic sink sink0 and writes it to the file f0.#set totalpkt 0proc record {} { global sink0 f0 totalpkt set ns [Simulator instance] #Set the time after which the procedure should be called again set time 0.005 #How many bytes have been received by the traffic sink? set bw0 [$sink0 set bytes_] #Get the current time set now [$ns now] #Calculate the bandwidth (in MBit/s) and write it to the file puts $f0 "$now [expr $bw0/$time*8/1000000]" #Reset the bytes_ values on the traffic sink $sink0 set bytes_ 0 #Re-schedule the procedure $ns at [expr $now+$time] "record" set bw0 [expr $bw0 / 200] set totalpkt [expr $totalpkt + $bw0]}## Procedure to dump the number of received packets calculated by the procedure# record at the command prompt#proc recv-pkts {} { global totalpkt flush stdout puts "The Number of Total received packet is $totalpkt"}## From here on the simulation events are defined## Start procedure "record"#$ns at 0.0 "record"## Source start#$ns at 0.1 "$src0 start"## Example of defining protection paths according to Haskin's model#$ns at 0.1 "[$LSR4 get-module MPLS] make-explicit-route 11 1_2_3_10_11 1000 -1"$ns at 0.2 "[$LSR11 get-module MPLS] make-explicit-route 11 11_10_9_8_7_4_1000 1005 -1"## Reroute option used to simulate Haskin's model#$ns at 0.3 "[$LSR9 get-module MPLS] reroute-binding 12 -1 1005"## Define link failures#$ns rtmodel-at 0.3 down $LSR5 $LSR6$ns rtmodel-at 0.3 down $LSR6 $LSR3 :$ns rtmodel-at 0.4 down $LSR9 $LSR10## Define when the link have to be restored#$ns rtmodel-at 0.5 up $LSR5 $LSR6$ns rtmodel-at 0.5 up $LSR6 $LSR3 :$ns rtmodel-at 0.5 up $LSR9 $LSR10## Trace results (MPLS/LDP packets) at a given LSR are dumped at the prompt#$ns at 0.1 "[$LSR3 get-module MPLS] trace-mpls"$ns at 0.1 "[$LSR4 get-module MPLS] trace-LDP"## Source stop#$ns at 0.6 "$src0 stop"## Calls procedure "recv-pkts" (and dumps the nr of received packets at the # command prompt#$ns at 0.7 "recv-pkts"## Displays the erb/lib/pft-table of the given LSR at the command prompt#$ns at 0.7 "[$LSR1 get-module MPLS] erb-dump"$ns at 0.7 "[$LSR1 get-module MPLS] lib-dump"$ns at 0.7 "[$LSR1 get-module MPLS] pft-dump"## Calls the procedure "finish"#$ns at 0.7 "finish"## The last line finally starts the simulation#$ns run
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -