Skip to main content

OLSR protocol in NS-2.35 (ns2)

OLSR protocol is called as Optimized link State routing protocol and is defined by http://tools.ietf.org/html/draft-ietf-manet-olsr-03
The OLSR is available as a patch for ns2 for various versions. There is a new version UM-OLSR patch in the given link below.

OS Used: Linux Mint 14 and Ubuntu 12.10

The following files are modified in ns-2.35 for OLSR
~ns-2.35/Makefile.in
~ns-2.35/common/packet.h
~ns-2.35/queue/priqueue.cc
~ns-2.35/tcl/lib/ns-agent.tcl
~ns-2.35/tcl/lib/ns-default.tcl
~ns-2.35/tcl/lib/ns-lib.tcl
~ns-2.35/tcl/lib/ns-packet.tcl
~ns-2.35/trace/cmu-trace.cc
~ns-2.35/trace/cmu-trace.h

Download the OLSR File here (the original OLSR may contain some bug, so download from this location for bug free OLSR Code)
Copy the file from ns-modified files/ to the corresponding location

Ensure that you have a fresh installation of ns-2.35 (else pasting these files will overwrite the information what you have earlier)

The zip file also has a patch file that can be patched for various ns2 versions. if you encounter any errors, go for manual patching.

You can also see: SUMO and MOVE Installation for VANETs

OLSR Installation

Once all the files were copied to their location. Open the terminal and go to the ~ns-2.35/ folder and execute the commands one by one.

./configure
make

Thats it, the code gets recompiled and download this source code to test the OLSR protocol
here is the code
# ======================================================================
# Define options
# ======================================================================
set opt(chan) Channel/WirelessChannel ;# channel type
set opt(prop) Propagation/TwoRayGround ;# radio-propagation model
set opt(netif) Phy/WirelessPhy ;# network interface type
set opt(mac) Mac/802_11 ;# MAC type
set opt(ifq) Queue/DropTail/PriQueue ;# interface queue type
set opt(ll) LL ;# link layer type
set opt(ant) Antenna/OmniAntenna ;# antenna model
set opt(ifqlen) 50 ;# max packet in ifq
set opt(nn) 5 ;# number of mobilenodes
set opt(adhocRouting) OLSR ;# routing protocol
set opt(cp) "" ;# connection pattern file
set opt(sc) "" ;# node movement file.
set opt(x) 400 ;#
set opt(y) 600 ;#
set opt(seed) 0.0 ;#
set opt(stop) 45 ;#
set opt(cbr-start) 30.0
# ============================================================================
#
# check for random seed
#
if {$opt(seed) > 0} {
puts "Seeding Random number generator with $opt(seed)\n"
ns-random $opt(seed)
}
#
# create simulator instance
#
set ns_ [new Simulator]
#
# control OLSR behaviour from this script -
# commented lines are not needed because
# those are default values
#
Agent/OLSR set use_mac_ true
#Agent/OLSR set debug_ false
#Agent/OLSR set willingness 3
#Agent/OLSR set hello_ival_ 2
#Agent/OLSR set tc_ival_ 5
#
# open traces
#
set tracefd [open olsr_example.tr w]
set namtrace [open olsr_example.nam w]
$ns_ trace-all $tracefd
$ns_ namtrace-all-wireless $namtrace $opt(x) $opt(y)
#
# create topography object
set topo [new Topography]
#
# define topology
#
$topo load_flatgrid $opt(x) $opt(y)
#
# create God
#
create-god $opt(nn)

set chan_1_ [new $opt(chan)]

#
# configure mobile nodes
#
$ns_ node-config -adhocRouting $opt(adhocRouting) \
-llType $opt(ll) \
-macType $opt(mac) \
-ifqType $opt(ifq) \
-ifqLen $opt(ifqlen) \
-antType $opt(ant) \
-propType $opt(prop) \
-phyType $opt(netif) \
-channel $chan_1_ \
-topoInstance $topo \
-wiredRouting OFF \
-agentTrace ON \
-routerTrace ON \
-macTrace OFF
for {set i 0} {$i < $opt(nn)} {incr i} {
set node_($i) [$ns_ node]
}

#
# define initial node position in nam
#
for {set i 0} {$i < $opt(nn)} {incr i} {
$ns_ initial_node_pos $node_($i) 20
}

#
# positions
#
$node_(0) set X_ 350.0
$node_(0) set Y_ 200.0
$node_(1) set Z_ 0.0
$node_(0) set Z_ 0.0
$node_(1) set X_ 200.0
$node_(1) set Y_ 350.0
$node_(2) set X_ 200.0
$node_(2) set Y_ 550.0
$node_(2) set Z_ 0.0
$node_(3) set X_ 50.0
$node_(3) set Y_ 200.0
$node_(3) set Z_ 0.0
$node_(4) set X_ 200.0
$node_(4) set Y_ 50.0
$node_(4) set Z_ 0.0
#
# setup UDP connection
set udp [new Agent/UDP]
set null [new Agent/Null]
$ns_ attach-agent $node_(0) $udp
$ns_ attach-agent $node_(2) $null
$ns_ connect $udp $null
set cbr [new Application/Traffic/CBR]
$cbr set packetSize_ 512
$cbr set rate_ 20Kb
$cbr attach-agent $udp
$ns_ at $opt(cbr-start) "$cbr start"
#
# print (in the trace file) routing table and other
# internal data structures on a per-node basis
#

$ns_ at 10.0 "[$node_(0) agent 255] print_rtable"
$ns_ at 15.0 "[$node_(0) agent 255] print_linkset"
$ns_ at 20.0 "[$node_(0) agent 255] print_nbset"
$ns_ at 25.0 "[$node_(0) agent 255] print_nb2hopset"
$ns_ at 30.0 "[$node_(0) agent 255] print_mprset"
$ns_ at 35.0 "[$node_(0) agent 255] print_mprselset"
$ns_ at 40.0 "[$node_(0) agent 255] print_topologyset"
#
# source connection-pattern and node-movement scripts
#
if { $opt(cp) == "" } {
puts "*** NOTE: no connection pattern specified."
set opt(cp) "none"
} else {
puts "Loading connection pattern..."
source $opt(cp)
}
if { $opt(sc) == "" } {
puts "*** NOTE: no scenario file specified."
set opt(sc) "none"
} else {
puts "Loading scenario file..."
source $opt(sc)
puts "Load complete..."
}
#
# tell all nodes when the simulation ends
#
for {set i 0} {$i < $opt(nn) } {incr i} {
$ns_ at $opt(stop) "$node_($i) reset";
}
$ns_ at $opt(stop) "puts \"NS EXITING...\" ; $ns_ halt"
$ns_ at $opt(stop) "stop"

proc stop {} {
global ns_ tracefd namtrace
$ns_ flush-trace
close $tracefd
close $namtrace
}
puts "Starting Simulation..."
$ns_ run

The above code tells the protocol to print the routing table, neighbour list, etc to the trace file. So open the trace file and see the routing table printing as various times 10.0, 15.0, 20.0, etc
Here is the sample output for the node 1 with various printing.
Screenshot
OLSR
OLSR Trace

P 10.000000 _1_ Routing Table
P dest next iface dist
P 0 0 1 1
P 2 2 1 1
P 3 3 1 1
P 4 3 1 2


P 15.000000 _1_ Link Set
P local nb sym asym lost time
P 1 0 20.563653 20.563653 0.000000 26.563653
P 1 2 20.457948 20.457948 0.000000 26.457948
P 1 3 20.511131 20.511131 0.000000 26.511131

P 20.000000 _1_ Neighbor Set
P nb status willingness
P 0 1 3
P 2 1 3
P 3 1 3

P 25.000000 _1_ Neighbor2hop Set
P nb nb2hop time
P 0 4 29.878606
P 3 4 30.756880

P 30.000000 _1_ MPR Set
P nb
P 0

P 35.000000 _1_ MPR Selector Set
P nb time
P 0 40.819322
P 2 39.935872
P 3 39.741881

P 40.000000 _1_ Topology Set
P dest last seq time
P 1 0 1 54.025467
P 4 0 1 54.025467

This shows the successful installation of OLSR in ns-2.35.  Comment on if you have any other queries.

Comments

  1. sir please help me in installing OSLR in ns-2.35 even though i tried what u said it doesn't work to me please kindly mail me more details sir my email is bharath.aor@gmail.com

    ReplyDelete
  2. Sir I tired you method but it showing me problem on ns 2.34 and ns 2.35.
    some for loop problem

    can't read "node_(0)": no such variable
    while executing
    "$ns_ initial_node_pos $node_($i) 20"
    ("for" body line 2)
    invoked from within
    "for {set i 0} {$i < $opt(nn)} {incr i} {
    $ns_ initial_node_pos $node_($i) 20
    }"
    (file "2.tcl" line 88)

    ReplyDelete

Post a Comment

Popular posts from this blog

Installation of ns2 in Ubuntu 18.04 - NS2 Tutorial # 2

ns2 installation in Ubuntu 18.04

Unlike earlier version of ubuntu, the 18,04 version does not support the direct installation of ns2, because of the latest C/C++ compiler (7.x), but the latest C/C++ compiler supported by ns2 is gcc-4.8. So this post and video tells you about the installation of gcc-4.8 version, then ns2 and then configuration.
Here are the steps, Please follow the video given below for more information.

$] tar zxvf ns-allinone-2.35.tar.gz


$] sudo apt install gcc-4.8 g++-4.8

if you have installed ubuntu just now, you can try these commands also in the beginning

$] sudo apt update
$] sudo apt install build-essential autoconf automake libxmu-dev

$] cd ns-allinone-2.35/ns-2.35
$] gedit Makefile.in
$] gedit linkstate/ls.h

line number 137, change erase to this->erase
$] cd ..
$] ./install

export PATH=$PATH:/home/pradeepkumar/ns-allinone-2.35/bin:/home/pradeepkumar/ns-allinone-2.35/tcl8.5.10/unix:/home/pradeepkumar/ns-allinone-2.35/tk8.5.10/unix
export LD_LIBRARY_PATH=$L…

AWK Scripts for NS2 to process data from Trace Files

AWK Scripts are very good in processing the data from the log (trace files) which we get from NS2. If you want to process the trace file manually, here is the detailHere is a sample of trace file from NS2 (However ns2 supports a new type of trace file also), but this post will make you understand the old trace format only.r 0.030085562 _0_ MAC  --- 0 message 32 [0 ffffffff 1 800] ------- [1:255 -1:255 32 0] r 0.030110562 _0_ RTR  --- 0 message 32 [0 ffffffff 1 800] ------- [1:255 -1:255 32 0] s 1.119926192 _0_ RTR  --- 1 message 32 [0 0 0 0] ------- [0:255 -1:255 32 0]
AWK Scripts are very good in processing the data column wise. For example
the first column in the above trace file represents r, s which indicates receive, sent respectively. If we want to trace the entire r and s alone from this trace file we can represent it as $1
So
$1 represents ACTION
$2 Time
$3 Node ID
$4 Layer
$5 Flags
$6 seqno
$7 type
$8 Size
$14 Energy (if the network nodes includes EnergyModel)To run the awk script in Li…

ns3 installation in Ubuntu 16.04

This post serves the installation instructions of ns3 in ubuntu 16.04 version. Some of my students are working in ns3, this post will benefit them in installing ns3.

OS Used: Ubuntu 16.04.4
ns3 version: ns3 version 3.27

The same procedure will be applied for OS like Debian, Linux Mint.

Fresh installation of Ubuntu 16.04 Let you try the fresh installation of ubuntu in your hard disk along with windows.
Installation of ns3 dependencies ns3 needs so many dependencies, developmental libraries, drivers, etc. so install all those
$] sudo apt update  $] sudo apt upgrade
$] sudo apt-get install build-essential autoconf automake libxmu-dev python-pygoocanvas python-pygraphviz cvs mercurial bzr git cmake p7zip-full python-matplotlib python-tk python-dev python-kiwi python-gnome2 python-gnome2-desktop-dev python-rsvg qt4-dev-tools qt4-qmake qt4-qmake qt4-default gnuplot-x11 wireshark
The above command make take some time to download, compile and install it, Be Patient. 
Installing ns3 Download the…