How to Trace a subset of trace events?

Tracing A subset of events
6-April- 2014
How to Trace a subset of trace events?
We already mentioned how to trace all simulated events. Now, we will indicate ways to
trace only a subset of these.
1- The first way to do so is by replacing the command $ns
<filename> by the command $ns
trace-queue
trace-all
<first
node>
<second node> <filename>.
For example, the command $ns trace-queue $n2
$n3 $tracefile1,
will result in an output trace file that contains only events that occurred over the link
between nodes n2 & n3.
Important notes:The trace-queue command line should appear of course after
the definition of the links!!!. As we will see in the next
example:
#Create a simulator object
set ns [new Simulator]
#Open the Trace file
set tracefile1 [open output.tr w]
#Open the NAM trace file
set namfile [open output.nam w]
$ns namtrace-all $namfile
#Define a 'finish' procedure
proc finish {} {
global ns tracefile1 namfile
$ns flush-trace
close $tracefile1
close $namfile
exec nam output.nam &
exit 0
}
Tracing A subset of events
#create five nodes
set n0 [$ns node]
set n1 [$ns node]
set n2 [$ns node]
set n3 [$ns node]
set n4 [$ns node]
#Create a link between the nodes
$ns duplex-link $n0 $n1 2.4Mb 40ms DropTail
$ns duplex-link $n2 $n1 3.1Mb 35ms DropTail
$ns duplex-link $n2 $n3 2.2Mb 13ms DropTail
$ns simplex-link $n3 $n4 1.8Mb 21ms DropTail
$ns trace-queue $n2 $n3 $tracefile1
#Setup a TCP connection between nodes n0-n3
set tcp [new Agent/TCP]
$ns attach-agent $n0 $tcp
set sink [new Agent/TCPSink]
$ns attach-agent $n3 $sink
$ns connect $tcp $sink
#Setup an FTP over TCP connection
set ftp [new Application/FTP]
$ftp attach-agent $tcp
#Setup a UDP connection between nodes n2-n4
set udp [new Agent/UDP]
$ns attach-agent $n2 $udp
set null [new Agent/Null]
$ns attach-agent $n4 $null
$ns connect $udp $null
#Setup a CBR over UDP connection
set cbr [new Application/Traffic/CBR]
$cbr attach-agent $udp
#scheduling events
$ns at 0.5 "$cbr start"
$ns at 1.0 "$ftp start"
$ns at 45.0 "$ftp stop"
6-April- 2014
Tracing A subset of events
6-April- 2014
$ns at 48.5 "$cbr stop"
#Call the finish procedure after 60 seconds of simulation time
$ns at 60.0 "finish"
#Run the simulation
$ns run
2. It is also possible to filter events using unix command
"grep" explained previously within the tcl script, so as
to make the filtering to be done while the calling of the
finish procedure, as we did with the command "exec nam
out.nam
&"
for
example
the
command
exec
grep
"tcp"
output.tr > output100.tr could be used inside the finish
procedure
to
filtering
the
lines
existed
in
the
file
output.tr and produce a new file called output100.tr that
include the lines that have the word "tcp" only, or this
could
be
done
to
start
the
processing
of
data
while
writing the file. For example, another way to limit the
trace file ( or in general, to process them online while
they
are
being
written),
is
to
use
linux
commands related to file processing within the tcl command
set tracefile1 [ open out.tr w] with the command
Set tracefile1 [ open "| grep \"tcp\" > output.tr"
w]
This command will result in filtering the lines written to
the file "out.tr"
and leaving only those that contains
the word "tcp", as we will do with the next example:
#Create a simulator object
set ns [new Simulator]
#Open the Trace file
Set tracefile1 [ open "| grep \"tcp\" > output.tr"
$ns trace-all $tracefile1
w]
Tracing A subset of events
#Open the NAM trace file
set namfile [open output.nam w]
$ns namtrace-all $namfile
#Define a 'finish' procedure
proc finish {} {
global ns tracefile1 namfile
$ns flush-trace
close $tracefile1
close $namfile
exec grep "2 3" output.tr > output100.tr
exec nam output.nam &
exit 0
}
#create five nodes
set n0 [$ns node]
set n1 [$ns node]
set n2 [$ns node]
set n3 [$ns node]
set n4 [$ns node]
#Create a link between the nodes
$ns duplex-link $n0 $n1 2.4Mb 40ms DropTail
$ns duplex-link $n2 $n1 3.1Mb 35ms DropTail
$ns duplex-link $n2 $n3 2.2Mb 13ms DropTail
$ns simplex-link $n3 $n4 1.8Mb 21ms DropTail
#Setup s TCP connection between nodes n0-n3
set tcp [new Agent/TCP]
$ns attach-agent $n0 $tcp
set sink [new Agent/TCPSink]
$ns attach-agent $n3 $sink
$ns connect $tcp $sink
#Setup an FTP over TCP connection
set ftp [new Application/FTP]
$ftp attach-agent $tcp
#Setup a UDP connection between nodes n2-n4
6-April- 2014
Tracing A subset of events
set
$ns
set
$ns
$ns
6-April- 2014
udp [new Agent/UDP]
attach-agent $n2 $udp
null [new Agent/Null]
attach-agent $n4 $null
connect $udp $null
#Setup a CBR over UDP connection
set cbr [new Application/Traffic/CBR]
$cbr attach-agent $udp
#scheduling events
$ns at 0.5 "$cbr start"
$ns at 1.0 "$ftp start"
$ns at 45.0 "$ftp stop"
$ns at 48.5 "$cbr stop"
#Call the finish procedure after 60 seconds of simulation time
$ns at 60.0 "finish"
#Run the simulation
$ns run