Jumat, 24 Juni 2011

contoh simulasi wpan (wireless personal area network) dengan menggunakan ns-2

Elektronikatelekomunikasi - Berikut ini adalah contoh simulasi WPAN (wireless Personal Area Network) dengan menggunakan Network Simulator Versi 2 (NS2), simulasi wpan ini menggunakan protokol routing AODV (Ad-Hoc On-demand Distance Vector).

tampilan-nsnam-simulasi-aodv-wireless-routing-protocol-network-simulator-ns2

NS2 adalah sebuah software simulasi jaringan yang bersifat open source, sehingga semua orang dapat menggunakan dan mengembangkan secara bersama-sama. NS2 ini adalah software simulator yang berbasis unix machine, atau biasa berjalan di OS linux. 

Berikut ini adalah script code program simulasi Wireless PAN dengan AODV routing protocol pada network simulator NS2.


###########################################
# AODV over 802.15.4 #
# Copyright (c) 2003 Samsung/CUNY #
# - - - - - - - - - - - - - - - - - - - - #
# Prepared by Jianliang Zheng #
# (zheng@ee.ccny.cuny.edu) #
###########################################

# ======================================================================
# Define options
# ======================================================================
set val(chan) Channel/WirelessChannel ;# Channel Type
set val(prop) Propagation/TwoRayGround ;# radio-propagation model
set val(netif) Phy/WirelessPhy/802_15_4
set val(mac) Mac/802_15_4
set val(ifq) Queue/DropTail/PriQueue ;# interface queue type
set val(ll) LL ;# link layer type
set val(ant) Antenna/OmniAntenna ;# antenna model
set val(ifqlen) 50 ;# max packet in ifq
set val(nn) 25 ;# number of mobilenodes
set val(rp) AODV ;# routing protocol
set val(x) 50
set val(y) 50

set val(nam) wpan_demo1.nam
set val(traffic) ftp ;# cbr/poisson/ftp

#read command line arguments
proc getCmdArgu {argc argv} {
global val
for {set i 0} {$i < $argc} {incr i} {
set arg [lindex $argv $i]
if {[string range $arg 0 0] != "-"} continue
set name [string range $arg 1 end]
set val($name) [lindex $argv [expr $i+1]]
}
}
getCmdArgu $argc $argv

set appTime1 0.0 ;# in seconds
set appTime2 0.3 ;# in seconds
set appTime3 0.7 ;# in seconds
set stopTime 100 ;# in seconds

# Initialize Global Variables
set ns_ [new Simulator]
set tracefd [open ./wpan_demo1.tr w]
$ns_ trace-all $tracefd
if { "$val(nam)" == "wpan_demo1.nam" } {
set namtrace [open ./$val(nam) w]
$ns_ namtrace-all-wireless $namtrace $val(x) $val(y)
}

$ns_ puts-nam-traceall {# nam4wpan #} ;# inform nam that this is a trace file for wpan (special handling needed)

Mac/802_15_4 wpanNam namStatus on ;# default = off (should be turned on before other 'wpanNam' commands can work)
#Mac/802_15_4 wpanNam ColFlashClr gold ;# default = gold
#Mac/802_15_4 wpanNam NodeFailClr grey ;# default = grey


# For model 'TwoRayGround'
set dist(5m) 7.69113e-06
set dist(9m) 2.37381e-06
set dist(10m) 1.92278e-06
set dist(11m) 1.58908e-06
set dist(12m) 1.33527e-06
set dist(13m) 1.13774e-06
set dist(14m) 9.81011e-07
set dist(15m) 8.54570e-07
set dist(16m) 7.51087e-07
set dist(20m) 4.80696e-07
set dist(25m) 3.07645e-07
set dist(30m) 2.13643e-07
set dist(35m) 1.56962e-07
set dist(40m) 1.20174e-07
Phy/WirelessPhy set CSThresh_ $dist(15m)
Phy/WirelessPhy set RXThresh_ $dist(15m)

# set up topography object
set topo [new Topography]
$topo load_flatgrid $val(x) $val(y)

# Create God
set god_ [create-god $val(nn)]

set chan_1_ [new $val(chan)]

# configure node

$ns_ node-config -adhocRouting $val(rp) \
-llType $val(ll) \
-macType $val(mac) \
-ifqType $val(ifq) \
-ifqLen $val(ifqlen) \
-antType $val(ant) \
-propType $val(prop) \
-phyType $val(netif) \
-topoInstance $topo \
-agentTrace OFF \
-routerTrace OFF \
-macTrace ON \
-movementTrace OFF \
#-energyModel "EnergyModel" \
#-initialEnergy 1 \
#-rxPower 0.3 \
#-txPower 0.3 \
-channel $chan_1_

for {set i 0} {$i < $val(nn) } {incr i} {
set node_($i) [$ns_ node]
$node_($i) random-motion 0 ;# disable random motion
}

source ./wpan_demo1.scn

# Setup traffic flow between nodes

proc cbrtraffic { src dst interval starttime } {
global ns_ node_
set udp($src) [new Agent/UDP]
eval $ns_ attach-agent \$node_($src) \$udp($src)
set null($dst) [new Agent/Null]
eval $ns_ attach-agent \$node_($dst) \$null($dst)
set cbr($src) [new Application/Traffic/CBR]
eval \$cbr($src) set packetSize_ 70
eval \$cbr($src) set interval_ $interval
eval \$cbr($src) set random_ 0
#eval \$cbr($src) set maxpkts_ 10000
eval \$cbr($src) attach-agent \$udp($src)
eval $ns_ connect \$udp($src) \$null($dst)
$ns_ at $starttime "$cbr($src) start"
}

proc poissontraffic { src dst interval starttime } {
global ns_ node_
set udp($src) [new Agent/UDP]
eval $ns_ attach-agent \$node_($src) \$udp($src)
set null($dst) [new Agent/Null]
eval $ns_ attach-agent \$node_($dst) \$null($dst)
set expl($src) [new Application/Traffic/Exponential]
eval \$expl($src) set packetSize_ 70
eval \$expl($src) set burst_time_ 0
eval \$expl($src) set idle_time_ [expr $interval*1000.0-70.0*8/250]ms ;# idle_time + pkt_tx_time = interval
eval \$expl($src) set rate_ 250k
eval \$expl($src) attach-agent \$udp($src)
eval $ns_ connect \$udp($src) \$null($dst)
$ns_ at $starttime "$expl($src) start"
}

if { ("$val(traffic)" == "cbr") || ("$val(traffic)" == "poisson") } {
puts "\nTraffic: $val(traffic)"
#Mac/802_15_4 wpanCmd ack4data on
puts [format "Acknowledgement for data: %s" [Mac/802_15_4 wpanCmd ack4data]]
set lowSpeed 0.5ms
set highSpeed 1.5ms
Mac/802_15_4 wpanNam PlaybackRate $lowSpeed
$ns_ at [expr $appTime1+0.1] "Mac/802_15_4 wpanNam PlaybackRate $highSpeed"
$ns_ at $appTime2 "Mac/802_15_4 wpanNam PlaybackRate $lowSpeed"
$ns_ at [expr $appTime2+0.1] "Mac/802_15_4 wpanNam PlaybackRate $highSpeed"
$ns_ at $appTime3 "Mac/802_15_4 wpanNam PlaybackRate $lowSpeed"
$ns_ at [expr $appTime3+0.1] "Mac/802_15_4 wpanNam PlaybackRate $highSpeed"
eval $val(traffic)traffic 19 6 0.2 $appTime1
eval $val(traffic)traffic 10 4 0.2 $appTime2
eval $val(traffic)traffic 3 2 0.2 $appTime3
Mac/802_15_4 wpanNam FlowClr -p AODV -c tomato
Mac/802_15_4 wpanNam FlowClr -p ARP -c green
if { "$val(traffic)" == "cbr" } {
set pktType cbr
} else {
set pktType exp
}
Mac/802_15_4 wpanNam FlowClr -p $pktType -s 19 -d 6 -c blue
Mac/802_15_4 wpanNam FlowClr -p $pktType -s 10 -d 4 -c green4
Mac/802_15_4 wpanNam FlowClr -p $pktType -s 3 -d 2 -c cyan4
$ns_ at $appTime1 "$node_(19) NodeClr blue"
$ns_ at $appTime1 "$node_(6) NodeClr blue"
$ns_ at $appTime1 "$ns_ trace-annotate \"(at $appTime1) $val(traffic) traffic from node 19 to node 6\""
$ns_ at $appTime2 "$node_(10) NodeClr green4"
$ns_ at $appTime2 "$node_(4) NodeClr green4"
$ns_ at $appTime2 "$ns_ trace-annotate \"(at $appTime2) $val(traffic) traffic from node 10 to node 4\""
$ns_ at $appTime3 "$node_(3) NodeClr cyan3"
$ns_ at $appTime3 "$node_(2) NodeClr cyan3"
$ns_ at $appTime3 "$ns_ trace-annotate \"(at $appTime3) $val(traffic) traffic from node 3 to node 2\""
}

proc ftptraffic { src dst starttime } {
global ns_ node_
set tcp($src) [new Agent/TCP]
eval \$tcp($src) set packetSize_ 60
set sink($dst) [new Agent/TCPSink]
eval $ns_ attach-agent \$node_($src) \$tcp($src)
eval $ns_ attach-agent \$node_($dst) \$sink($dst)
eval $ns_ connect \$tcp($src) \$sink($dst)
set ftp($src) [new Application/FTP]
eval \$ftp($src) attach-agent \$tcp($src)
$ns_ at $starttime "$ftp($src) start"
}

if { "$val(traffic)" == "ftp" } {
puts "\nTraffic: ftp"
#Mac/802_15_4 wpanCmd ack4data off
puts [format "Acknowledgement for data: %s" [Mac/802_15_4 wpanCmd ack4data]]
set lowSpeed 0.20ms
set highSpeed 1.5ms
Mac/802_15_4 wpanNam PlaybackRate $lowSpeed
$ns_ at [expr $appTime1+0.2] "Mac/802_15_4 wpanNam PlaybackRate $highSpeed"
$ns_ at $appTime2 "Mac/802_15_4 wpanNam PlaybackRate $lowSpeed"
$ns_ at [expr $appTime2+0.2] "Mac/802_15_4 wpanNam PlaybackRate $highSpeed"
$ns_ at $appTime3 "Mac/802_15_4 wpanNam PlaybackRate $lowSpeed"
$ns_ at [expr $appTime3+0.2] "Mac/802_15_4 wpanNam PlaybackRate 1ms"
ftptraffic 19 6 $appTime1
ftptraffic 10 4 $appTime2
ftptraffic 3 2 $appTime3
Mac/802_15_4 wpanNam FlowClr -p AODV -c tomato
Mac/802_15_4 wpanNam FlowClr -p ARP -c green
Mac/802_15_4 wpanNam FlowClr -p tcp -s 19 -d 6 -c blue
Mac/802_15_4 wpanNam FlowClr -p ack -s 6 -d 19 -c blue
Mac/802_15_4 wpanNam FlowClr -p tcp -s 10 -d 4 -c green4
Mac/802_15_4 wpanNam FlowClr -p ack -s 4 -d 10 -c green4
Mac/802_15_4 wpanNam FlowClr -p tcp -s 3 -d 2 -c cyan4
Mac/802_15_4 wpanNam FlowClr -p ack -s 2 -d 3 -c cyan4
$ns_ at $appTime1 "$node_(19) NodeClr blue"
$ns_ at $appTime1 "$node_(6) NodeClr blue"
$ns_ at $appTime1 "$ns_ trace-annotate \"(at $appTime1) ftp traffic from node 19 to node 6\""
$ns_ at $appTime2 "$node_(10) NodeClr green4"
$ns_ at $appTime2 "$node_(4) NodeClr green4"
$ns_ at $appTime2 "$ns_ trace-annotate \"(at $appTime2) ftp traffic from node 10 to node 4\""
$ns_ at $appTime3 "$node_(3) NodeClr cyan3"
$ns_ at $appTime3 "$node_(2) NodeClr cyan3"
$ns_ at $appTime3 "$ns_ trace-annotate \"(at $appTime3) ftp traffic from node 3 to node 2\""
}

# defines the node size in nam
for {set i 0} {$i < $val(nn)} {incr i} {
$ns_ initial_node_pos $node_($i) 2
}

# Tell nodes when the simulation ends
for {set i 0} {$i < $val(nn) } {incr i} {
$ns_ at $stopTime "$node_($i) reset";
}

$ns_ at $stopTime "stop"
$ns_ at $stopTime "puts \"\nNS EXITING...\""
$ns_ at $stopTime "$ns_ halt"

proc stop {} {
global ns_ tracefd val env
$ns_ flush-trace
close $tracefd
set hasDISPLAY 0
foreach index [array names env] {
#puts "$index: $env($index)"
if { ("$index" == "DISPLAY") && ("$env($index)" != "") } {
set hasDISPLAY 1
}
}
if { ("$val(nam)" == "wpan_demo1.nam") && ("$hasDISPLAY" == "1") } {
exec nam wpan_demo1.nam &
}
}

puts "\nStarting Simulation..."
$ns_ run

Sabtu, 18 Juni 2011

Mengatasi Error "make: *** [libotcl.so] Error 1" Pada Network Simulator (NS2)

Elektronikatelekomunikasi - Malam minggu bingung ga ada kerjaan, pacar juga belum punya, iseng-iseng ngutak utik laptop, mencoba meresolved masalah kesalahan instalasi ns2 (network simulator 2) pada ubuntu, sekalian itung-itung menyicil tugas akhir. akhirnya dapat pencerahan juga. Alhamdulillah.

mengatasi-error-make-lib-o-tcl-linux-the-best-internet-explorer-error-message-ever.jpg

Disinilah pokok permasalahan kegagalan instalasi ns2 saya, sebenarnya instalasi NS2 sudah berhasil dan sudah bisa ngerunning nam-nya. Namun karena masih terjadi error dan dari kemarin nge-patch routing protocol tambahan untuk manet gagal terus. Saya berpikir mungkin disebabkan karena masih adanya error saat instalasi. Errornya biasanya nampak seperti dibawah ini :

otcl.o: In function `OTclDispatch':
/home/ns/ns-allinone-2.34/otcl/otcl.c:495: undefined reference to `__stack_chk_fail_local'
otcl.o: In function `Otcl_Init':
/home/ns/ns-allinone-2.34/otcl/otcl.c:2284: undefined reference to `__stack_chk_fail_local'
ld: libotcl.so: hidden symbol `__stack_chk_fail_local' isn't defined
ld: final link failed: Nonrepresentable section on output
make: *** [libotcl.so] Error 1



Error diatas muncul disebabkan karena kegagalan linking pada otcl saat instalasi ns2 di ubuntu. dan muncul pada saat akhir instalasi. Dan cara mengatasinya adalah buka file "configure" pada direktori "otcl-1.13/configure". Lalu tambahkan satu baris SHLIB_LD="gcc -shared" setelah SHLIB_LD="ld -shared" :



--- configure.orig      2009-11-02 12:14:52.556167945 -0800
+++ configure   2009-11-02 12:17:28.966706099 -0800
@@ -6301,7 +6301,7 @@       
      ;;
   Linux*)       
     SHLIB_CFLAGS="-fpic"
-     SHLIB_LD="ld -shared"
+     SHLIB_LD="gcc -shared"       
     SHLIB_SUFFIX=".so"       
     DL_LIBS="-ldl"       
     SHLD_FLAGS="" 


kemudian setelah disave ulangi lagi instalasi ns2 anda. Setelah berhasil, untuk lebih yakinnya anda dapat mem validate ns2 (network simulator versi 2)  anda.

Demikian dulu tulisan saya, semoga bisa bermanfaat bagi semua. Dan saya juga mohon doanya agar Tugas Akhir Saya tentang protokol telekomunikasi pada jaringan wireless segera selesai. amin...

Selasa, 14 Juni 2011

Cara Meremove atau Menguninstall NS-2

Saya mau berbagi lagi, baru saja menemukan caranya kemarin tentang bagaimanakah caranya menguninstall atau meremove program NS-2 (network simulator 2) pada ubuntu. NS 2 adalah sebuah software open source yang bersifat gratis atau free, dan bebas dipakai dan dikembangkan oleh semua orang. NS 2 berjalan pada sistem operasi unix, biasanya para pengguna software simulasi jaringan gratis ini banyak mengaplikasikannya pada OS ubuntu atau debian beserta turunannya, alasanya karena banyak forum yang membahas mengenai semua proses instalasinya di Operating System tersebut.

NS 2 sering digunakan di area lab telekomunikasi atau biasanya banyak digunakan untuk menganalisa protokol-protokol routing baru dalam dunia telekomunikasi, terutama telekomunikasi wireless yang mana memungkinkan untuk diaplikasikan pada perangkat-perangkat telekomunikasi masa depan.

Pada artikel kali ini saya mencoba untuk menjelaskan bagaimana cara meng-uninstall software NS-2 yang mengalami error. Proses Uninstall atau Remove ns2 ini bisa bermanfaat jika ada kesalahan dalam menginstall program ns2 kamu dan kamu bisa menginstall ulang nantinya, karena saat ada instalasi yang kurang lengkap misal ada eror di beberapa bagian, maka ns 2 tidak akan dapat berjalan dengan sempurna.

Dibawah ini adalah baris command (command line) yang digunakan untuk meremove software NS2 yang sudah terinstall kurang sempurna. command line ini diketikan pada program terminal di ubuntu atau OS linux lainnya dimana software simulasi network open source NS-2 anda terinstall.

$ sudo apt-get autoremove ns

setelah mengetikkan perintah diatas, lalu masukan password dari admin kamu

maka hasilnya NS2 kamu akan langsung di uninstall dari direktori file.

Semoga bisa bermanfaat. dan satu kata "Trust Me It's Worked". :)

Sabtu, 04 Juni 2011

cara menginstall / install NS-2 versi berapapun di ubuntu LTS 10.04 (Lucid Lynx) maupun yang lainnya

Tulisan ini saya persembahkan kepada teman, temin, temon dan para saudara dan saudari yang sedang melakukan Tugas Akhir maupun yang sedang melakukan penelitian dan membutuhkan NS2 (Network Simulator 2) sebagai simulator jaringannya, namun masih kebingungan dengan cara menginstall ns-2 versi sembarang atau versi apapun di komputer maupun laptopnya. Karena menginstall NS-2 di linux memang susah-susah gampang. saya menyebutnya sebagai "Menginstall Aplikasi Yang Berdasarkan Amal dan Perbuatan".

Jadi, saran saya sebelum menginstall aplikasi NS2 ini ada baiknya saudara dan saudari sekalian sholat terlebih dahulu bagi yang beragama islam dan berdoa sesuai kepercayaan masing-masing bagi yang beragama non muslim (ini bukan sara), atau jika diperlukan cium tangan mama dan papa dulu, minta restu dan jangan melakukan banyak dosa jika akan memulai menginstall aplikasi ini.

Saya kira cukup sekian intro dari saya yang saya rasa cukup kepanjangan, karena memang demikian adanya, berdasarkan pengalaman saya dari menginstall aplikasi gratis dan open source untuk simulasi jaringan telekomunikasi ini ke beberapa laptop milik teman-teman saya dan anehnya masalah ditiap-tiap laptop harus diselesaikan dengan berbagai cara yang berbeda padahal tipe OS (operating system) dan versi NS2 yang digunakan kembar identik. hehe

OK menuju kebahasan utama, untuk menginstall NS2 disini saya menggunakan Software Versi (ns-allinone-2.33) dan OS-nya Ubuntu 10.04 LTS (Lucid Lynx). berikut tahapan-tahapannya :

1. Copykan file ns-allinone-2.33.tar.gz di directory home.
2. Kemudian Extract dengan perintah
$ tar -xzvf ns-allinone-2.33.tar.gz
3. Masuk ke direktori ns-allinone-2.33
$ cd ns-allinone-2.33
4. Install build – essential, automake, autoconf dan libxmu-dev
$ sudo apt-get install build-essential autoconf automake libxmu-dev
5. Edit file Makefile.in di ns-allinone-2.33/ns-2.33, kemudian ganti CC = @CC@ menjadi :
CC=gcc-4.3
6. Buka file ns-allinone-2.33/octl-1.13/configure dengan editor (gedit atau vi) dan ubah beberapa baris berikut :
SHLIB_LD="ld -shared -rdata_shared" menjadi SHLIB_LD="gcc -share -rdata_shared"
dan
SHLIB_LD="ld -shared" menjadi SHLIB_LD="gcc -shared".
7. Kemudian Install !! Banyak-banyak berdoa supaya berhasil. :)
$./install
8. Kemudian Setting environment variabel dan execution file sesuai permintaan NS-2, dengan cara :
$ gedit ~/.bashrc
9. Copy paste konfigurasi dibawah ini lalu letakkan pada baris yang paling bawah . Pada file bashrc Ganti “/home/septian/” dengan letak program NS-2 saudara dan saudari.

# LD_LIBRARY_PATH
OTCL_LIB=/home/septian/ns-allinone-2.33/otcl-1.13
NS2_LIB=/home/septian/ns-allinone-2.33/lib
X11_LIB=/usr/X11R6/lib
USR_LOCAL_LIB=/usr/local/lib
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$OTCL_LIB:$NS2_LIB:$X11_LIB:$USR_LOCAL_LIB

# TCL_LIBRARY
TCL_LIB=/home/septian/ns-allinone-2.33/tcl8.4.18/library
USR_LIB=/usr/lib
export TCL_LIBRARY=$TCL_LIB:$USR_LIB

# PATH
XGRAPH=/home/septian/ns-allinone-2.33/bin:/home/septian/ns-allinone-2.33/tcl8.4.18/unix:/home/septian/ns-allinone-2.33/tk8.4.18/unix
NS=/home/septian/ns-allinone-2.33/ns-2.33/
NAM=/home/septian/ns-allinone-2.33/nam-1.13/
PATH=$PATH:$XGRAPH:$NS:$NAM

10. update source bashrc
$source ~/.bashrc
11. Coba jalankan Network Simulator anda dengan parintah :

$ns
12. Jika muncul, berarti instalasi anda berhasil
"%"

13. Namun jika semua cara diatas gagal, maka perbanyaklah doa saudara-saudari dan perbanyaklah istighfar, karena mungkin masih banyak dosa maupun amal buruk diwaktu lampau. hihi :)
Dan untuk itulah, untuk membantu teman, temin, temon dan saudara-saudari semua saya persembahkan cara pamungkas, dan "Trust me it's worked" :

$sudo add-apt-repository ppa:wouterh && sudo apt-get update && sudo apt-get install ns nam xgraph

Kemudian ulangi lagi langkah 11 dan 12, dan ucapkan syukur Alahamdulillah jika berhasil dan jangan lupa berbagi pada sesama dan juga kepada saya. hehe

jika memiliki materi seputar Network Simulator versi 2. saya juga mau dibagi juga dan satu kata "Mari Belajar Bersama" :)

Dan jika ingin meng-uninstall Network Simulator 2 (NS2) dapat dilihat disini.