Showing posts with label ns2. Show all posts
Showing posts with label ns2. Show all posts

Friday, October 31, 2014

NS 2 - Tutorial for beginners 2

NS2 program for simulation of TCP packets in a network

set ns [new Simulator]

set nf [open out.nam w]
$ns namtrace-all $nf

set nt [open out.tr w]
$ns trace-all $nt

proc finish {} {
        global ns nf
        $ns flush-trace
        close $nf
        exec nam out.nam &
        exit 0
        }

set n0 [$ns node]
set n1 [$ns node]
set n2 [$ns node]
set n3 [$ns node]

$ns duplex-link $n0 $n1 10Mb 10ms DropTail
$ns duplex-link $n1 $n2 1Mb 10ms DropTail
$ns duplex-link $n3 $n1 10Mb 10ms DropTail

$ns duplex-link-op $n0 $n1 orient right-down
$ns duplex-link-op $n1 $n2 orient right
$ns duplex-link-op $n3 $n1 orient right-up

set tcp [new Agent/TCP]
$ns attach-agent $n0 $tcp

set ftp [new Application/FTP]
#$ftp set packet_size_ 4.5Mb
$ftp set interval_ 0.05
$ftp attach-agent $tcp

set sink [new Agent/TCPSink]
$ns attach-agent $n2 $sink

$ns connect $tcp $sink

$ns at 0.3 "$ftp start"
$ns at 3.0 "finish"

$ns run





NS2 program for simulation of UDP packets in a network

set ns [new Simulator]

set nf [open out.nam w]
$ns namtrace-all $nf

set nt [open out.tr w]
$ns trace-all $nt

proc finish {} {
        global ns nf nt
        $ns flush-trace
        close $nf
        close $nt
        exec nam out.nam &
        exit 0
        }

set n0 [$ns node]
set n1 [$ns node]
set n2 [$ns node]

$ns duplex-link $n0 $n1 1Mb 10ms DropTail
$ns duplex-link $n1 $n2 1Mb 10ms DropTail
$ns duplex-link $n0 $n2 1Mb 10ms DropTail

$ns duplex-link-op $n0 $n1 orient right-up
$ns duplex-link-op $n0 $n2 orient right

set udp0 [new Agent/UDP]
$ns attach-agent $n0 $udp0

set cbr0 [new Application/Traffic/CBR]
$cbr0 set packetSize_ 500
$cbr0 set interval_ 0.005
$cbr0 attach-agent $udp0

set null0 [new Agent/Null]
$ns attach-agent $n2 $null0

$ns connect $udp0 $null0

$ns at 0.5 "$cbr0 start"
$ns at 4.5 "$cbr0 stop"

$ns run


NS2 program for simulation of both  TCP and UDP packets

set ns [new Simulator]

set nf [open out.nam w]
$ns namtrace-all $nf

set nt [open out.tr w]
$ns trace-all $nt

proc finish {} {
        global ns nf
        $ns flush-trace
        close $nf
        exec nam out.nam &
        exit 0
        }

set h1 [$ns node]
set r1 [$ns node]
set h2 [$ns node]
set h3 [$ns node]
set r2 [$ns node]
set h4 [$ns node]

$ns duplex-link $h1 $r1 10Mb 20ms DropTail
$ns duplex-link $h2 $r1 10Mb 20ms DropTail
$ns duplex-link $r1 $r2 1.5Mb 20ms DropTail
$ns duplex-link $r2 $h3 10Mb 20ms DropTail
$ns duplex-link $r2 $h4 5Mb 20ms DropTail

$ns duplex-link-op $h1 $r1 orient right-down
$ns duplex-link-op $h2 $r1 orient right-up
$ns duplex-link-op $r1 $r2 orient right
$ns duplex-link-op $r2 $h3 orient right-up
$ns duplex-link-op $r2 $h4 orient right-down

set udp [new Agent/UDP]
$ns attach-agent $h2 $udp

set cbr [new Application/Traffic/CBR]
#$cbr set interval_ 0.0005
$cbr attach-agent $udp

set null [new Agent/Null]
$ns attach-agent $h4 $null

set tcp [new Agent/TCP]
$ns attach-agent $h1 $tcp

set ftp [new Application/FTP]
#$ftp set interval_ 0.0005
$ftp attach-agent $tcp

set sink [new Agent/TCPSink]
$ns attach-agent $h3 $sink

$ns connect $udp $null
$ns connect $tcp $sink

$ns at 0.0 "$cbr start"
$ns at 0.0 "$ftp start"
$ns at 10.0 "finish"

$ns run

NS2 program for simulation of Distance Vector routing protocol

set ns [new Simulator]

set nf [open out.nam w]
$ns namtrace-all $nf

set tr [open out.tr w]
$ns trace-all $tr

proc finish {} {
        global nf ns tr
        $ns flush-trace
        close $tr
        exec nam out.nam &
        exit 0
        }

set n0 [$ns node]
set n1 [$ns node]
set n2 [$ns node]
set n3 [$ns node]

$ns duplex-link $n0 $n1 10Mb 10ms DropTail
$ns duplex-link $n1 $n3 10Mb 10ms DropTail
$ns duplex-link $n2 $n1 10Mb 10ms DropTail

$ns duplex-link-op $n0 $n1 orient right-down
$ns duplex-link-op $n1 $n3 orient right
$ns duplex-link-op $n2 $n1 orient right-up

set tcp [new Agent/TCP]
$ns attach-agent $n0 $tcp

set ftp [new Application/FTP]
$ftp attach-agent $tcp

set sink [new Agent/TCPSink]
$ns attach-agent $n3 $sink

set udp [new Agent/UDP]
$ns attach-agent $n2 $udp

set cbr [new Application/Traffic/CBR]
$cbr attach-agent $udp

set null [new Agent/Null]
$ns attach-agent $n3 $null

$ns connect $tcp $sink
$ns connect $udp $null

$ns rtmodel-at 1.0 down $n1 $n3
$ns rtmodel-at 2.0 up $n1 $n3

$ns rtproto DV

$ns at 0.0 "$ftp start"
$ns at 0.0 "$cbr start"

$ns at 5.0 "finish"

$ns run

 

NS2 program for simulation of Link State routing protocol

set ns [new Simulator]

set nf [open out.nam w]
$ns namtrace-all $nf

set tr [open out.tr w]
$ns trace-all $tr

proc finish {} {
        global nf ns tr
        $ns flush-trace
        close $tr
        exec nam out.nam &
        exit 0
        }

set n0 [$ns node]
set n1 [$ns node]
set n2 [$ns node]
set n3 [$ns node]

$ns duplex-link $n0 $n1 10Mb 10ms DropTail
$ns duplex-link $n1 $n3 10Mb 10ms DropTail
$ns duplex-link $n2 $n1 10Mb 10ms DropTail

$ns duplex-link-op $n0 $n1 orient right-down
$ns duplex-link-op $n1 $n3 orient right
$ns duplex-link-op $n2 $n1 orient right-up

set tcp [new Agent/TCP]
$ns attach-agent $n0 $tcp

set ftp [new Application/FTP]
$ftp attach-agent $tcp

set sink [new Agent/TCPSink]
$ns attach-agent $n3 $sink

set udp [new Agent/UDP]
$ns attach-agent $n2 $udp

set cbr [new Application/Traffic/CBR]
$cbr attach-agent $udp

set null [new Agent/Null]
$ns attach-agent $n3 $null

$ns connect $tcp $sink
$ns connect $udp $null

$ns rtmodel-at 1.0 down $n1 $n3
$ns rtmodel-at 2.0 up $n1 $n3

$ns rtproto LS

$ns at 0.0 "$ftp start"
$ns at 0.0 "$cbr start"

$ns at 5.0 "finish"

$ns run


NS 2 - Tutorial for beginners 1

Explanation for a Simple Script

Step 1: To start we have to set a few variables like simulator object, trace file and object, nam file and object:
 
set ns [new Simulator]

This would set the simulator with the simulator object which is to be accessed in the script.

Step 2: Then, to set the nam (network animation) file with that 'ns' object and associate with it:

set nf [open out.nam w]

$ns namtrace-all $nf

set tr [open out.tr w]

$ns trace-all $tr
This would set the trace file and would connect to the simulator. The trace file is required to analyze the various packets which are send, received type of application used etc.

Step 3: Now the nodes could be set as many as you want, for loop could be used if many nodes are to be made.

set n0 [$ns node]

Step 4: Creating connection for the various nodes with each other with the band width and rate.

$ns duplex-link $n0 $n1 10Mb 10ms DropTail

Step 5: The nodes could be given with various orientations with this option. right, right-up and right down could be used depending on the node.

$ns duplex-link-op $n0 $n1 orient right-up

Step 6: For the application like TCP or UDP to run, we need to set two agents and the application which should run in between.

When using TCP, we have FTP as the application and TCPsink as the end agent. Connection must be made between TCP and TCPsink , same in udp with cbr and null respectively.

set tcp [new Agent/TCP]
$ns attach-agent $n0 $tcp

This would make a tcp agent and connect it with the node.

Step 7: Connecting the FTP application with TCP

set ftp [new Application/FTP]
$ftp attach-agent $tcp

Step 8: Setting TCPSink to the node where the TCP packets are received:

set agent [new Agent/TCPSink]
$ns attach-agent $n3 $sink

Step 9: Connecting TCP and sink(agents) for making the network flow:

$ns connect $tcp $sink

Step 10: Similarly, for UDP, 

set udp [new Agent/UDP]
$ns attach-agent $n2 $udp

set cbr [new Application/Traffic/CBR]
$cbr attach-agent $udp

set null [new Agent/Null]
$ns attach-agent $n3 $null

$ns connect $udp $null

Step 11: Routing protocols can be used in the simulator using rtmodel (to break the link), rtproto (to use the protocol)

$ns rtmodel-at 1.0 down $n1 $n2

$ns rtmodel-at 2.0 up $n1 $n3

For distance vector we could use

$ns rtproto DV

For linkstate we could use

$ns rtproto LS

When all this is done, the TCP could be started at some point and could call the finish procedure to end. The out.tr file is used to trace the packets. A normal awk command could be used to analyse the packets.

 Step 12:   We could also stop the TCP or UDP in between using stop instead of start, hence nam out.nam need to be used if finish is not used.
$ns at 0.0 "$ftp start"
$ns at 0.0 "$cbr start"

$ns at 5.0 "finish"

Step 13: 'run' is used to run the whole simulation.

$ns run
Step 14: Save the file as example1.tcl; go to terminal and execute

ns example1.tcl 

 

Tuesday, August 5, 2014

NS-2 related popular blogs

Blogs play a vital role in letting us understand many complex issues in simple words. Even ns-2 is not exception for it. Here, follows few popular ns-2 blogs.

Popular NS-2 blogs:

1. Marc Greis' Tutorial

2. ns2Blogger
3. ns2 by pradeep kumar
4. durgeshkshirsagar Blog
5. elmurod
6. enggeddu
7. Karthick Siva's Blog
8. ns2 tutorials blog
9. script for black hole attack
10. Articles by norbert_jxl
11. ns-2sourcecode blog
12. byuvraj blog on ns2, nam and xgraph
13. Wireless Network security blog
14. Adding new packet types to NS-2
15. How to send user data in NS2
16. NS2 Wireless Sample Programs

TCL to C++ conversion:

http://cpptcl.sourceforge.net/
http://www.codeproject.com/Questions/73980/Convert-a-TCL-code-to-C


PS: I request you all to post in comments any such blogs, just as to help the ns-2 research community.

Saturday, July 19, 2014

NS-2 Network Simulator

For the latest information about the ns Network Simulator, go to the ns manual ay http://www.isi.edu/nsnam/ns/  or http://www.isi.edu/nsnam/ns/ns-documentation.html .

For examples, go to the downloaded ns package folder at ns-2/tcl/ex. In addition, other tutorials include the Marc Greis’s tutorial and the tutorial by Jae Chung - Mark Claypool.

Ns simulator is based on two languages: C++ as the back-end and the oTcl (object-oriented version of tool command language, tcl) as the front-end. NS is a discrete event simulator, where the advance of time depends on the timing of events, which are maintained by a scheduler.

Some Esssential Commands List:

ns – command to verify the installation of tcl shell script and ns network simulator
ns-version – command to return the ns version
ns-random – command to return a random number, uniformly distributed between [0-(231-1)].

ns-random varvar  is used to set the seed to random number generator. 

Saturday, July 5, 2014

MannaSim Script generator framework installation procedure

MannaSim framework

  • It is the Script generator used mainly for wireless sensor network research.
  • It was written in TCL and C++ for NS-2 network simulator. 
  • It is used for creating TCL scripts for the front-end activity done in MannaSim framework GUI.

MannaSim Installation: 

It can be installed in two ways: 
1. Installing Mannasim patch   (easier method)
2. Using Mannasim Source code

Method 1 - Installing Mannasim patch:

  • This is easier way for installing Mannsim; 
  • But, ensure that you didn't modify the ns-2 distribution files. At the time of writing this blog, the ns-2 distribution is with version 2.29.
Step 1: Click here to download ns-2.29 all-in-one package from ns site.
Step 2: Click here to download MannaSim Framework ns-2.29 patch.
Step 3: Type the following command on the ns-allinone-2.29 folder:
patch -p1 < file_name.diff
Step 4: Install ns-2.29 as usual typing ns-allinone-2.29 folder:
./install


Method 2 - Using Mannasim Source Code:

Step 1: Download Manasim.tar.gz file
Step 2: untar the file by typing
tar zxvf manasim.tar.gz
Step 3: A new folder titles manasim with appear. copy that file and paste it in /home/usernname/ns2.35-allinone/ns.2.35/
Step 4: Open the mansim folder. Then, go to ns-modified-files folder. There you can find a few files.
Copy the files from the ns-modified-files/ to these locations:
ns-allinone-2.35/ns-2.35/apps/udp.cc

ns-allinone-2.35/ns-2.35/common/ns-process.h

ns-allinone-2.35/ns-2.35/common/packet.cc

ns-allinone-2.35/ns-2.35/common/packet.h

ns-allinone-2.35/ns-2.35/Makefile.in

ns-allinone-2.35/ns-2.35/tcl/lib/ns-default.tcl

ns-allinone-2.35/ns-2.35/tcl/lib/ns-lib.tcl
Step 5:Then, go to /home/username/ns2.35-allinone/ns2.35
Then, type each command at terminal
$ ./configure

$ make


After installing and configuring using either of the methods above, to open the GUI, java is essential. So, to install java, run the following commands in terminal:
sudo apt-get install java
sudo apt-get install openjdk-7-jdk