Installing Tracegraph2.02 application in Ubuntu

Tracegraph is a great application that comes handy to ns2 users. It eliminates the need to configure and run perl/awk scripts over the trace file. Trace file analysis simplified. Though I feel that Tracegraph is still in its infancy, its  existing scope just provides all that a researcher using ns2 needs.

The steps mentioned in this post were tested to be successful in Ubuntu 10.10 and I believe it would work in other Linux distros and Ubuntu versions too.(Remember that the command sudo doesn’t work in non-debian distributions of Linux.)

First, Download the following packages:

<Download Tracegraph>

<Download Mglinstaller>

Tracegraph seems to have been developed using Matlab and therefore supporting code is needed make it run in Linux. This is the reason behind installing mglinstaller.

Extract tracegraph202linux.tar.gz in  your homefolder. In my case this would result in /home/micman/tracegraph202

Next extract mglinstaller.gz into /home/micman/tracegraph202
A single executable named mglinstaller would appear in the tracegraph202 folder.

Next, provide executable permission to mglinstaller and run it using the following command:

$sudo chmod 777 mglinstaller



You would then be prompted with an information, all you have to do is to hit ENTER.

This would create a new folder named glnx86 in the following location: /home/micman/tracegraph202/bin/

Next, copy all the folders and files in /home/micman/tracegraph202/  location and paste them into /home/micman/tracegraph202/bin/glnx86/

Finally, enter the following line in Terminal:

 $ sudo export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/micman/tracegraph202/bin/glnx86

Remember, micman in the above line is my account name, replace it with your account name(user name).

Exit the Terminal and Re-invoke it.

Now, navigate to this location: /home/micman/tracegraph202/bin/glnx86/

$ cd /home/micman/tracegraph202/bin/glnx86 

List all the files in this location

$ ls 

you would see an executable named trgraph in this location.Provide executable permission to this file and execute it.

$ sudo su 


# chmod 777 trgraph


# ./trgraph

To run tracegraph every time, just navigate to /home/micman/tracegraph202/bin/glnx86 in Terminal and execute trgraph as follows:

$ ./trgraph 


Tip by Siddharth

Place the trgraph executable in the location /usr/bin/ so that you can execute it from the Terminal without having to “cd” into the installation directory everytime.  The command to copy the trgraph executable into /usr/bin/  looks like this:

$ sudo cp /home/micman/tracegraph202/bin/glnx86/trgraph /usr/bin


If you encounter an error something like the following:

bash: ./trgraph: No such file or directory
It is probably because you are trying to run this tracegraph on a 64-bit machione.

To fix this issue, you need to install 32bit libraries, by running the following command in the Terminal:

sudo apt-get install ia32-libs 

after this you can just execute ./trgraph as mentioned in the tutorial.
This link helped me find this solution.

Was this post helpful? Then thank me by clicking <this link>

Manual interpretation of ns2 trace file

If you have generated a trace file from running a ns tcl script, you should be able to analyze it without the use of any tools. This could come handy in emergencies when you don’t have any tools (Tracegraph,perl scripts etc) at hand.

The following method has been suggested at a ns mailing list.

To find the interpretation of all possible trace format when you do the wireless simulation, you’d better read the code of ns2 in file ns2home/trace/cmu-trace{.h, .cc}.

where ns2home denotes the location of ns-allinone-* installation folder.

Usually the format looks like this:

ACTION: [s|r|D|f]: s -- sent, r -- received, D -- dropped,f -- forwarded
WHEN: the time when the action happened
WHERE: the node where the action happened
LAYER: AGT -- application,
 RTR -- routing,
 LL  -- link layer (ARP is done here)
 IFQ -- outgoing packet queue (between link and mac layer)
 MAC -- mac,
 PHY -- physical
SEQNO: the sequence number of the packet
TYPE: the packet type
  cbr -- CBR data stream packet
  DSR -- DSR routing packet (control packet generated by routing)
  RTS -- RTS packet generated by MAC 802.11
  ARP -- link layer ARP packet
SIZE: the size of packet at current layer, when packet goes down,
  size increases, goes up size decreases
[a b c d]: a -- the packet duration in mac layer header
  b -- the mac address of destination
  c -- the mac address of source
  d -- the mac type of the packet body
[......]: [
  source node ip : port_number
  destination node ip (-1 means broadcast) : port_number
  ip header ttl
  ip of next hop (0 means node 0 or broadcast)

So if you have a line like this

s 76.000000000 _98_ AGT – – – – 1812 cbr 32 [0 0 0 0] ——- [98:0 0:0 32 0]

in your trace file.

You should interpret it as

Application 0 (port number) on node 98 sent a CBR packet whose ID is 1812 and size is 32 bytes, at time 76.0 second, to application 0 on node 0 with TTL is 32 hops. The next hop is not decided yet.

Similarly, You should be able to interpret a line such as this:

r 0.010176954 _9_ RTR – – – – 1 gpsr 29 [0 ffffffff 8 800] ——- [8:255 -1:255 32 0]


The routing agent on node 9 received a GPSR broadcast (mac address 0xff, and ip address is -1, either of them means broadcast) routing packet whose ID is 1 and size is 29 bytes, at time 0.010176954 second, from node 8 (both mac and ip addresses are 8), port 255 (routing agent).

If you choose to play safe by making use of Tracegraph, then <this> post might help you.


Recently, I chanced to read <this manual> by Eitman Altman and manual is well organised for intermediate learners in ns2. I have extraced the ns2 trace file part from that and presented it below.

r 40.639943289 _1_ AGT —- 1569 tcp 1032 [a2 1 2 800] —-  [0:0 1:0 32 1] [35 0] 2 0

* The first field is a letter that can have the values r,s,f,D for “received”,”sent”,”forwarded” and “dropped”, respectively.It can also be < for giving a location or a movement indication.
* The second field is the time.
* The third field is the node number.
* The fourth field is MAC to indicate if the packet concerns a MAC layer, it is AGT to indicate the transport layer(e.g. tcp) packet, or RTR if it concerns the routed packet. It can also be IFQ to indicate events related to the interference priority queue(like drop of packets).
* After the dashes come the global sequence number of the packet(this is not the tcp sequence number).
* At the next field comes more information on the packet type(eg. tcp,ack or udp).
* Then comes the packet size in bytes.
* The 4 numbers in the first square brackets concern the mac layer information. The first hexadecimal number,a2(which equals 162 in decimal) specifies the expected time in seconds to send this data packet over the wireless channel. The second number,1, stands for the MAC-id of the sending node, and the third,2, is that of the receiving node. The fourth number,800, specifies that the MAC type is ETHERTYPE_IP.
* The next numbers in the second square brackets concern the IP source and destination addresses, then the ttl(Time To Live) of the packet(in our case 32),
* The third bracket concern the tcp information: its sequence number and the acknowledgment number.

This article is proudly sponsored by Evansys Technologies

Was this post helpful? Then thank me by clicking <this link>


Introduction to Network Simulator NS2

Eitman Altman’s NS2 Tutorial for Beginners

Alternative Reading:

* How to interpret ns2 trace file for wireless simulation?

Recommended Reading:

* Using Eclipse to enhance your experience of ns2

* How to scale your simulation to more nodes (500 nodes) and speed up it?

* Method to analyse ns2 trace file