Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #Create a simulator object set ns [new Simulator]
- #Open the output files
- set f0 [open out0.tr w]
- set f1 [open out1.tr w]
- set f2 [open out2.tr w]
- #Create 5 nodes
- set n0 [$ns node]
- set n1 [$ns node]
- set n2 [$ns node]
- set n3 [$ns node]
- set n4 [$ns node]
- #Connect the nodes
- $ns duplex-link $n0 $n3 1Mb 100ms DropTail
- $ns duplex-link $n1 $n3 1Mb 100ms DropTail
- $ns duplex-link $n2 $n3 1Mb 100ms DropTail
- $ns duplex-link $n3 $n4 1Mb 100ms DropTail
- #Define a 'finish' procedure
- proc finish {} {
- global f0 f1 f2
- #Close the output files
- close $f0
- close $f1
- close $f2
- exit 0
- }
- #Define a procedure that attaches a UDP agent to a previously created node
- #'node' and attaches an Expoo traffic generator to the agent with the
- #characteristic values 'size' for packet size 'burst' for burst time,
- #'idle' for idle time and 'rate' for burst peak rate. The procedure connects
- #the source with the previously defined traffic sink 'sink' and returns the
- #source object.
- proc attach-expoo-traffic { node sink size burst idle rate } {
- #Get an instance of the simulator
- set ns [Simulator instance]
- #Create a UDP agent and attach it to the node
- set source [new Agent/UDP]
- $ns attach-agent $node $source
- #Create an Expootraffic agent and set its configuration parameters
- set traffic [new Application/Traffic/Exponential]
- $traffic set packetSize_ $size
- $traffic set burst_time_ $burst
- $traffic set idle_time_ $idle
- $traffic set rate_ $rate
- # Attach traffic source to the traffic generator
- $traffic attach-agent $source
- #Connect the source and the sink
- $ns connect $source $sink
- return $traffic
- }
- #Define a procedure which periodically records the bandwidth received by the
- #three traffic sinks sink0/1/2 and writes it to the three files f0/1/2.
- proc record {} {
- global sink0 sink1 sink2 f0 f1 f2
- #Get an instance of the simulator
- set ns [Simulator instance]
- #Set the time after which the procedure should be called again
- set time 0.5
- #How many bytes have been received by the traffic sinks?
- set bw0 [$sink0 set bytes_]
- set bw1 [$sink1 set bytes_]
- set bw2 [$sink2 set bytes_]
- #Get the current time
- set now [$ns now]
- #Calculate the bandwidth (in MBit/s) and write it to the files
- puts $f0 "$now [expr $bw0/$time*8/1000000]"
- puts $f1 "$now [expr $bw1/$time*8/1000000]"
- puts $f2 "$now [expr $bw2/$time*8/1000000]"
- #Reset the bytes_ values on the traffic sinks
- $sink0 set bytes_ 0
- $sink1 set bytes_ 0
- $sink2 set bytes_ 0
- #Re-schedule the procedure
- $ns at [expr $now+$time] "record"
- }
- #Create three traffic sinks and attach them to the node n4
- set sink0 [new Agent/LossMonitor]
- set sink1 [new Agent/LossMonitor]
- set sink2 [new Agent/LossMonitor]
- $ns attach-agent $n4 $sink0
- $ns attach-agent $n4 $sink1
- $ns attach-agent $n4 $sink2
- #Create three traffic sources
- set source0 [attach-expoo-traffic $n0 $sink0 200 2s 1s 100k]
- set source1 [attach-expoo-traffic $n1 $sink1 200 2s 1s 200k]
- set source2 [attach-expoo-traffic $n2 $sink2 200 2s 1s 300k]
- #Start logging the received bandwidth
- $ns at 0.0 "record"
- #Start the traffic sources
- $ns at 10.0 "$source0 start"
- $ns at 10.0 "$source1 start"
- $ns at 10.0 "$source2 start"
- #Stop the traffic sources
- $ns at 50.0 "$source0 stop"
- $ns at 50.0 "$source1 stop"
- $ns at 50.0 "$source2 stop"
- #Call the finish procedure after 60 seconds simulation time
- $ns at 60.0 "finish"
- #Run the simulation
- $ns run
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement