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
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

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.


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 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.
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.


  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



  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)

  3. hello sir
    I'm not able to download the olsr code and the program written here has some errors could you please share the program

  4. Sir I tired you method but it showing me problem on ns 2.34
    i cant installing olsr so please help me

  5. Replies
    1. Download here.

  6. Hello Sir,
    I'm getting a Segmentation fault (core dumped) while running the .tcl file.
    Where could have I gone wrong?
    Please Help! Thank You.
    num_nodes is set 5
    *** NOTE: no connection pattern specified.
    *** NOTE: no scenario file specified.
    Starting Simulation...
    Segmentation fault (core dumped)

  7. can you Make video explain the installation of OLSR Protocol IN ns2.35


Post a Comment

Popular posts from this blog

Installing ns-3.34 in Ubuntu 20.04

This post shows how to install ns 3.34 in Ubuntu 20.04 LTS Prerequisites: Fresh installation of Ubuntu Version 20.04 LTS  ns3.34 can be downloaded from here Follow the video link for complete step by step instructions on the installation.  This version fixes the compilation issues of (bug in ns3.33)  Issue the following commands after opening a terminal  $ sudo apt update $ sudo apt install g++ python3 python3-dev python-dev pkg-config sqlite3 python3-setuptools git qt5-default gir1.2-goocanvas-2.0 python3-gi python3-gi-cairo python3-pygraphviz gir1.2-gtk-3.0 ipython3 openmpi-bin openmpi-common openmpi-doc libopenmpi-dev autoconf cvs bzr unrar openmpi-bin openmpi-common openmpi-doc libopenmpi-dev tcpdump wireshark libxml2 libxml2-dev Unzip or untar the ns-allinone-3.34.tar.bz2 in the home folder (in my case its /home/pradeepkumar) $ cd ns-allinone-3.34/ $ ./ --enable-examples --enable-tests  Once the installation is completed, you may get an output show

Installation of ns3 in Windows 10 and Windows 11 OS using WSL (Windows Subsystem for Linux)

This post shows how to install ns-3.33 in Windows 10 through WSL (Windows Subsystem for Linux) This posts works for Windows 11 also (I have tested it on a Windows 11 ISO and it works the Same way as mentioned in the following post.) This post will work for ns-3.3x version. Prerequisites : Install Windows Subsystem for Linux with GUI: Please refer the following video  System Information: OS used: Windows 10 and WSL (Ubuntu 20.04) GUI: XServer for Windows NS3 Version: ns-3.33 See the following complete video on how to install ns3 in Windows 10 Step 0 : Open XLaunch Step 1 :  Open WSL using PowerShell and open it as Administrator Command:/  wsl $ xfce4-session The GUI of Ubuntu Opens within Windows 10 OS. Step 2 : Download ns3 from website through Mozilla Firefox browser Step 3: Open a Terminal  $ sudo apt update $ sudo apt install build-essential autoconf automake libxmu-dev python3-pygraphviz cvs mercurial bzr git cmake p7zip-full python3-matplotlib python-tk python3-dev qt5-q

Installing NS-3.32 in Ubuntu 20.04

This is about installing ns version 3.32 in Ubuntu 20.04 LTS. #ns3 #ns3 .32 #networksimulation The commands used in the video are given here. $] sudo apt update $] sudo apt install build-essential autoconf automake libxmu-dev python3-pygraphviz cvs mercurial bzr git cmake p7zip-full python3-matplotlib python-tk python3-dev qt5-qmake qt5-default gnuplot-x11 wireshark Download the ns-allinone-3.32.tar.bz2 package from and copy it to /home/ folder See the full video for detailed instructions Extract it either in GUI or using command $] tar jxvf ns-allinone-3.32.tar.bz2 $] cd ns-allinone-3.32/ $] ./ --enable-examples --enable-tests The above command will take some time to install all the packages  You can see the output as shown below ns3 To check whether ns3 installed successfully, use the following commands. $] cd ns-3.32/ $] ./waf --run hello-simulator You should get the output as Hello Simulator $] ./waf --run first This is the example from the ns-3.32/exa