set ns [new Simulator] #On definit les codes couleurs $ns color 0 red $ns color 1 blue #On definit une serie de fichiers pour enregistrer: #les donnes NS set nsf [open flow_adv.tr w] $ns trace-all $nsf #les donnes NAM set namf [open flow_adv.nam w] $ns namtrace-all $namf #les donnees du flow-monitor 0 set flow_stat0 [open flow0_adv.stat w] #les donnees du flow-monitor 1 set flow_stat1 [open flow1_adv.stat w] #On cree les noeuds set n0 [$ns node] set n1 [$ns node] set n2 [$ns node] set n3 [$ns node] #On annote les noeuds $n1 label "Switch (25)" #la procedure de fin proc finish {} { global ns nsf namf flow_stat0 flow_stat1 flowmon_0 flowmon_1 $ns flush-trace close $nsf close $flow_stat0 close $flow_stat1 exec nam flow_adv.nam & } #On cree la procedure d'enregistrement proc record {} { global ns nsf namf flow_stat0 flow_stat1 flowmon_0 flowmon_1 set ns [Simulator instance] set time 0.1 set now [$ns now] $flowmon_0 dump $flowmon_1 dump $ns at [expr $now+$time] "record" } #la procedure pour le flow 0 proc set_flowMonitor0 {flowmon_0 output_lisya} { $flowmon_0 attach $output_lisya set bytesInt_ [new Integrator] set pktsInt_ [new Integrator] $flowmon_0 set-bytes-integrator $bytesInt_ $flowmon_0 set-pkts-integrator $pktsInt_ return $flowmon_0 } #la procedure pour le flow 1 proc set_flowMonitor1 {flowmon_1 output_lisya} { $flowmon_1 attach $output_lisya set bytesInt_ [new Integrator] set pktsInt_ [new Integrator] $flowmon_1 set-bytes-integrator $bytesInt_ $flowmon_1 set-pkts-integrator $pktsInt_ return $flowmon_1 } # post-simulation data processing procedure for flow from n1 -> n3 # for example to get barrivals (in bytes) for different flows: # from n0 -> n3 (barrivals_0), from n2 -> n3 (barrivals_2) and total (barrivals) proc get_barrivals {} { set flow_stat_0 [open flow0_adv.stat r] set barrivals_0 [open barrivals_0.stat w] set barrivals_2 [open barrivals_2.stat w] set total_barrivals [open barrivals.stat w] while {[gets $flow_stat_0 one_line_stat0] >=0} { # check file flowmon.cc for the format of the flow stats set time [lindex $one_line_stat0 0] ;# the first recorded variable is time set flowid [lindex $one_line_stat0 1] ;# the second variable is flow_ID # variable number 9 is barrival for that single flow with the specified flow id set single_flow_barrivals [lindex $one_line_stat0 8] set barrivals [lindex $one_line_stat0 12] # write the wanted stats to the associated files for displaying if {$flowid == 0} { puts $barrivals_0 "$time $single_flow_barrivals" } else { puts $barrivals_2 "$time $single_flow_barrivals" } puts $total_barrivals "$time $barrivals" } close $flow_stat_0 close $barrivals_0 close $barrivals_2 close $total_barrivals # Call xgraph to display the results of barrivals for different flow id exec xgraph barrivals_0.stat barrivals_2.stat barrivals.stat -geometry 800x400 & exit 0 } #On cree les liens $ns duplex-link $n1 $n3 2Mb 10ms DropTail $ns duplex-link $n0 $n1 10Mb 10ms DropTail $ns duplex-link $n2 $n1 10Mb 10ms DropTail $ns duplex-link-op $n1 $n3 orient right $ns duplex-link-op $n0 $n1 orient right-down $ns duplex-link-op $n2 $n1 orient right-up #On monitor la file d'attente dans le lien (NAM) $ns duplex-link-op $n1 $n3 queuePos 0.5 $ns duplex-link-op $n3 $n1 queuePos 0.5 $ns queue-limit $n1 $n3 25 ################### # FLOW MONiTORiNG # ################### #On cree 2 flow-monitor set flowmon_0 [$ns makeflowmon Fid] set flowmon_1 [$ns makeflowmon Fid] #On attache les flow-monitor aux liens $ns attach-fmon [$ns link $n1 $n3] $flowmon_0 0 $ns attach-fmon [$ns link $n3 $n1] $flowmon_1 0 set_flowMonitor0 $flowmon_0 $flow_stat0 set_flowMonitor1 $flowmon_1 $flow_stat1 #On cree les sources de traffic, les applicatifs et les recepteurs de traffic set tcp0 [$ns create-connection TCP $n0 TCPSink $n3 0] $tcp0 set packetSize_ 300 $tcp0 set fid_ 0 #Create a CBR traffic source and attach it to tcp0 set cbr0 [new Application/Traffic/CBR] $cbr0 set rate_ 10M $cbr0 attach-agent $tcp0 set tcp1 [$ns create-connection TCP $n2 TCPSink $n3 1] $tcp1 set packetSize_ 500 $tcp1 set fid_ 1 #Create a CBR traffic source and attach it to tcp1 set cbr1 [new Application/Traffic/CBR] $cbr1 set rate_ 10M $cbr1 attach-agent $tcp1 $ns at 0.0 "record" $ns at 0.1 "$cbr0 start" $ns at 0.2 "$cbr1 start" $ns at 2.1 "$cbr0 stop" $ns at 2.5 "$cbr1 stop" $ns at 3.5 "finish" $ns at 3.5 "get_barrivals" $ns run