## ns2graph: RPI NS-2 Graphing and Statistics Package

The Graphing and Statistics Package has been used since 2001 by researchers and students studying TCP/IP. It provides TCL/C++ graph classes that are instantiated from within simulation scripts. Here is a brief example excerpted from examples/ex1.tcl in the ns2graph distribution.

```   source \$env(NS)/tcl/rpi/graph.tcl                                         (1)
[...]
set ns [new Simulator]
[...]
proc finish {} {
global util_graph                                                     (2)
\$util_graph display                                                   (3)
exit 0
}
[...]
\$ns duplex-link \$s0 \$n0 10M 4ms DropTail
\$ns duplex-link \$s1 \$n0 10M 4ms DropTail
\$ns duplex-link \$n0 \$n1 1.544M 4ms DropTail
\$ns duplex-link \$n1 \$d0 10M 4ms DropTail
\$ns duplex-link \$n1 \$d1 10M 4ms DropTail
[...]
\$util_graph set util_graph [new Graph/UtilizationVersusTime \$n0 \$n1 0.1]  (4)
\$util_graph set title_ "Bottleneck Utilization vs Time"                   (5)

\$ns at 5 finish
\$ns run
```
As the above script completes execution, the following plot pops up:

Creation of the graph involved three steps:
1. Including the graph.tcl. See (1) in above script.
2. Inserting code in the finish proc to cause the graph to pop-up. See (2) and (3).
3. Inserting code to instantiate the Graph and to configure its appearance. See (4) and (5).

### Comparison to Tracegraph

Tracegraph and ns2graph are different. If you do not know what you want to plot, i.e., you want to run a short simulation and then create graphs as post-processing then use Tracegraph. If you want to run more complex simulations with reasonable execution times, you know what plots you want, and/or you want to be able to regenerate the graphs from your makefile as you tweak your protocol implementation then use ns2graph.
• ns2graph is a set of TCL classes and C++ components. It integrates directly into NS-2. Tracegraph post-processes traces generated by NS-2.
• ns2graph installs components for gathering statistics during simulation. It thus only collects the desired statistics. Depending on the number and resolution of statistics gathered, this can require several orders of magnitude less I/O resources than generating full traces (as used by tracegraph).
• Tracegraph uses MATLAB as a backend to generate graphs. ns2graph uses gnuplot as a back-end for generating most graphs.
• ns2graph uses only applications that are freely available: gnuplot, xgraph, latex, pdflatex, and others. Tracegraph uses MATLAB.

Updated Sunday, April 29, 2007