how to integrate the "Resource/Energy" leach class into NS-2.34?
Linux - SoftwareThis forum is for Software issues.
Having a problem installing a new program? Want to know which application is best for the job? Post your question in this forum.
Notices
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
If you have any problems with the registration process or your account login, please contact us. If you need to reset your password, click here.
Having a problem logging in? Please visit this page to clear all LQ-related cookies.
Get a virtual cloud desktop with the Linux distro that you want in less than five minutes with Shells! With over 10 pre-installed distros to choose from, the worry-free installation life is here! Whether you are a digital nomad or just looking for flexibility, Shells can put your Linux machine on the device that you want to use.
Exclusive for LQ members, get up to 45% off per month. Click here for more info.
@deepa_2111
hi deepa i want to add encryption function in leach. so for that do i have to write a seperate cpp file to generate encrypted packet or add function in existing ns-leach.tcl. please help!
Can you let me know what changes you made? I have the same error.
Thanks
Quote:
Originally Posted by shanky
Hi,
I have been trying to run leach protocol on ns-2.34 using ubuntu 10.10 as platform for quite sometime now but am stuck with some problems please be kind enough to help me.
I have been referring to posts # 51,52,53,56,58 of this thread since i was facing similar errors but to no avail.
I have edited my uAMPs.tcl as in the mentioned posts in this way
Code:
############################################################################
#
# This code was developed as part of the MIT uAMPS project. (June, 2000)
#
############################################################################
global opt bs
#source $env(RCA_LIBRARY)/ns-ranode.tcl
source /opt/ns-allinone-2.34/ns-2.34/mit/rca/ns-ranode.tcl
#source $env(uAMPS_LIBRARY)/ns-bsapp.tcl
source /opt/ns-allinone-2.34/ns-2.34/mit/uAMPS/ns-bsapp.tcl
#source $env(uAMPS_LIBRARY)/extras.tcl
source /opt/ns-allinone-2.34/ns-2.34/mit/uAMPS/extras.tcl
#source $env(uAMPS_LIBRARY)/stats.tcl
source /opt/ns-allinone-2.34/ns-2.34/mit/uAMPS/stats.tcl
#Uncomment these lines to use gdb to debug the c code
#source mit/uAMPS/ns-bsapp.tcl
#source mit/uAMPS/extras.tcl
#source mit/uAMPS/stats.tcl
#source $env(RCA_LIBRARY)/resources/ns-resource-manager.tcl
source /opt/ns-allinone-2.34/ns-2.34/mit/rca/resources/ns-resource-manager.tcl
#source $env(RCA_LIBRARY)/resources/ns-energy-resource.tcl
source /opt/ns-allinone-2.34/ns-2.34/mit/rca/resources/ns-energy-resource.tcl
#source $env(RCA_LIBRARY)/resources/ns-neighbor-resource.tcl
source /opt/ns-allinone-2.34/ns-2.34/mit/rca/resources/ns-neighbor-resource.tcl
# ========================================================================
# Default Script Options
# ========================================================================
set opt(bsapp) "Application/BSApp" ;# BS application type
set opt(mtype) "" ;# No meta-data used
set opt(nn_) [expr $opt(nn) - 1] ;# Number of non-BS nodes
set opt(bsID) $opt(nn_) ;# BS node number
set opt(bsCode) 0 ;# Spreading code for BS
set opt(quiet) 1 ;# 0=print info, 1=quiet
set opt(bw) 1e6 ;# 1 Mbps radio speed
set opt(delay) 1e-12 ;# Links delay
set opt(prop_speed) 3e8; ;# Meters per second
set opt(ll) RCALinkLayer ;# Arpless link-layer
set opt(mac) Mac/Sensor ;# Sensor mac protocol
set opt(ifq) Queue/DropTail ;# DropTail Q
set opt(ifqlen) 100 ;# Max packets in ifq
set opt(netif) Phy/WirelessPhy ;# Wireless channel
set opt(ant) Antenna/OmniAntenna ;# Omnidirectional antena
# Time required to transmit numbytes bytes of data
proc TxTime {numbytes} {
global opt
return [expr $numbytes*8/$opt(bw)]
}
set opt(hdr_size) 25 ;# Bytes for header
set opt(sig_size) 500 ;# Bytes for data signal
# Packet transmission time
set opt(slot_time) [expr [TxTime [expr $opt(sig_size)+$opt(hdr_size)]]]
# Spread-spectrum packet transmission time
set opt(ss_slot_time) [expr $opt(slot_time) * $opt(spreading)]
# Maximum TDMA frame time (if all nodes in one cluster)
set opt(frame_time) [expr $opt(ss_slot_time) * $opt(nn_)]
set opt(ch_change) [expr 10 * $opt(init_energy)] ;# Time for each round
set opt(check_energy) 10 ;# Time btwn energy traces
set opt(freq) 914e+6 ;# Carrier frequency
set opt(L) 1.0 ;# System (non-propogation) loss
set opt(Gt) 1.0 ;# Tx antenna gain
set opt(Gr) 1.0 ;# Rx antenna gain
set opt(ht) 1.5 ;# Antenna height
set opt(CSThresh) 1e-9 ;# Receive threshold is 1 nW
set opt(RXThresh) 6e-9 ;# Success threshold is 6 nW
set PI 3.1415926
set l [expr 3e8 / $opt(freq)] ;# Wavelength of carrier
############################################################################
#
# Energy Models
#
############################################################################
# Efriss_amp = RXThresh * (4pi)^2 / (Rb Gt Gr lambda^2)
set opt(Efriss_amp) [expr [expr 1.1 * $opt(RXThresh) * 16 * $PI * $PI] / \
[expr $opt(bw) * $opt(Gt) * $opt(Gr) * $l * $l]]
# Etwo_ray_amp = RXThresh / (Rb Gt Gr ht^2 hr^2)
set opt(Etwo_ray_amp) [expr 1.1 * $opt(RXThresh) / \
[expr $opt(bw) * $opt(Gt) * $opt(Gr) * \
$opt(ht) * $opt(ht) * $opt(ht) * $opt(ht)]]
set opt(EXcvr) 50e-9 ;# Energy for radio circuitry
set opt(e_bf) 5e-9 ;# Beamforming energy (J/bit)
set opt(Esense) 0 ;# Sensing energy (J/bit)
set opt(thresh_energy) 0.00 ;# Threshold for power adaptation
set opt(Pidle) 0 ;# Idle power (W)
set opt(Psleep) 0 ;# Sleep power (W)
# ===== Get rid of the warnings in bind ================================
Resource/Energy set energyLevel_ $opt(init_energy)
Resource/Energy set alarmLevel_ $opt(thresh_energy)
Resource/Energy set expended_ 0
Agent/RCAgent set sport_ 0
Agent/RCAgent set dport_ 0
Agent/RCAgent set packetMsg_ 0
Agent/RCAgent set distEst_ 0
Agent/RCAgent set packetSize_ 0
Agent/BSAgent set packetMsg_ 0
Agent/BSAgent set packetSize_ 0
Agent/BSAgent set recv_code_ 0
RCALinkLayer set delay_ 25us
RCALinkLayer set bandwidth_ 0
RCALinkLayer set off_prune_ 0
RCALinkLayer set off_CtrMcast_ 0
RCALinkLayer set macDA_ 0
RCALinkLayer set debug_ 0
RCALinkLayer set avoidReordering_ 0
Phy/WirelessPhy set bandwidth_ $opt(bw)
Phy/WirelessPhy set CSThresh_ $opt(CSThresh)
Phy/WirelessPhy set RXThresh_ $opt(RXThresh)
Phy/WirelessPhy set Efriss_amp_ $opt(Efriss_amp)
Phy/WirelessPhy set Etwo_ray_amp_ $opt(Etwo_ray_amp)
Phy/WirelessPhy set EXcvr_ $opt(EXcvr)
Phy/WirelessPhy set freq_ $opt(freq)
Phy/WirelessPhy set L_ $opt(L)
Phy/WirelessPhy set sleep_ 0
Phy/WirelessPhy set alive_ 1
Phy/WirelessPhy set ss_ $opt(spreading)
Phy/WirelessPhy set dist_ 0
Antenna/OmniAntenna set Gt_ $opt(Gt)
Antenna/OmniAntenna set Gr_ $opt(Gr)
Antenna/OmniAntenna set Z_ $opt(ht)
set MacTrace OFF
Mac set bandwidth_ $opt(bw)
Mac/Sensor set code_ 0
Mac/Sensor set node_num_ 0
Mac/Sensor set ss_ $opt(spreading)
Mac/Sensor set CHheard_ 0
Mac/Sensor set myADVnum_ 0
set bs[list $opt(bs_x) $opt(bs_y)]
set BS_NODE 1
set outf [open "$opt(dirname)/conditions.txt" a]
puts $outf "Simulation will stop after $opt(stop) seconds."
puts $outf "Base station at ($opt(bs_x), $opt(bs_y))"
if {$opt(eq_energy) == 1} {
puts $outf "Each node starting with $opt(init_energy) Joules of energy.\n"
}
puts $outf "Energy Model:"
puts $outf "\t\tRXThresh = $opt(RXThresh)"
puts $outf "\t\tCSThresh = $opt(CSThresh)"
puts $outf "\t\tRb = $opt(bw)"
puts $outf "\t\tExcvr = $opt(EXcvr)"
puts $outf "\t\tEfriss_amp = $opt(Efriss_amp)"
puts $outf "\t\tEtwo_ray_amp = $opt(Etwo_ray_amp)"
puts $outf "\t\tEbf = $opt(e_bf)"
puts $outf "\t\tPidle = $opt(Pidle)"
puts $outf "\t\tPsleep = $opt(Psleep)\n"
close $outf
set initialized 0
set rng_ [new RNG]
proc leach-create-mobile-node { id } {
global ns_ chan prop topo tracefd opt node_
global initialized BS_NODE rng_
if {$initialized == 0} {
sens_init
set initialized 1
}
# Create nodes.
if {$id != $opt(nn_)} {
puts -nonewline "$id "
set node_($id) [new MobileNode/ResourceAwareNode]
} else {
puts "($opt(nn_) == BS)"
set node_($id) [new MobileNode/ResourceAwareNode $BS_NODE]
}
set node $node_($id)
if {$id != $opt(nn_)} {
# Set initial node energy.
if {$opt(eq_energy) == 1} {
$node set-energy $opt(init_energy) $opt(thresh_energy)
} else {
#set E [$rng_ uniform $opt(lower_e) $opt(upper_e)]
#set rn [$rng_ uniform 0 1]
#if {$rn < 0.1} {
# set E 200
#} else {
# set E 2
#}
set high_e_nodes[list 97 19 12 87 8 22 83 55 34 72]
if {[lsearch $high_e_nodes $id] == -1} {
set E 2
} else {
set E 200
}
$node set-energy $E $opt(thresh_energy)
set initf [open "$opt(dirname)/init.energy" a]
puts $initf "$id\t$E"
close $initf
}
} else {
# Base station has an infinite amount of energy.
$node set-energy 50000 $opt(thresh_energy)
}
# Disable random motion.
$node random-motion 0
$node topography $topo
if ![info exist inerrProc_] {
set inerrProc_ ""
}
if ![info exist outerrProc_] {
set outerrProc_ ""
}
if ![info exist FECProc_] {
set FECProc_ ""
}
# Connect the node to the channel.
$node add-interface $chan $prop $opt(ll) $opt(mac) \
$opt(ifq) $opt(ifqlen) $opt(netif) $opt(ant) \
$topo $inerrProc_ $outerrProc_ $FECProc_
# Set up the trace target.
set T [new Trace/Generic]
$T target [$ns_ set nullAgent_]
$T attach $tracefd
$T set src_ $id
$node log-target $T
$ns_ at 0.0 "$node_($id) start-app"
}
proc sens_init {} {
global ns_ opt ns
# The timer code has hard-coded the global variable ns to
# be the simulator.
set ns $ns_
# Remove old trace files.
catch "eval exec rm [glob -nocomplain $opt(dirname)/TDMAschedule.*.txt]"
catch "exec rm $opt(dirname)/$opt(filename).energy"
catch "exec rm $opt(dirname)/$opt(filename).data"
catch "exec rm $opt(dirname)/$opt(filename).alive"
catch "exec rm $opt(dirname)/startup.energy"
catch "exec rm $opt(dirname)/init.energy"
puts "Creating sensor nodes..."
sens_init_stats "$opt(dirname)/$opt(filename)"
$ns_ at $opt(stop) "sens_finish"
# Start logging simulation statistics.
$ns_ at $opt(check_energy) "sens_gather_stats"
}
but in leach.err i still get an error like this
Code:
couldn't read file "/opt/ns-allinone-2.34/ns-2.34/mit/rca/ns-ranode.tcl": no such file or directory
while executing
"source.orig /opt/ns-allinone-2.34/ns-2.34/mit/rca/ns-ranode.tcl"
("uplevel" body line 1)
invoked from within
"uplevel source.orig[list $fileName]"
invoked from within
"if [$instance_ is_http_url $fileName] {
set buffer [$instance_ read_url $fileName]
uplevel eval $buffer
} else {
uplevel source.orig[list $fileName]
..."
(procedure "source" line 8)
invoked from within
"source /opt/ns-allinone-2.34/ns-2.34/mit/rca/ns-ranode.tcl"
(file "mit/uAMPS/sims/uamps.tcl" line 10)
invoked from within
"source.orig mit/uAMPS/sims/uamps.tcl"
("uplevel" body line 1)
invoked from within
"uplevel source.orig[list $fileName]"
invoked from within
"if [$instance_ is_http_url $fileName] {
set buffer [$instance_ read_url $fileName]
uplevel eval $buffer
} else {
uplevel source.orig[list $fileName]
..."
(procedure "source" line 8)
invoked from within
"source mit/uAMPS/sims/uamps.tcl"
(file "tcl/mobility/leach.tcl" line 18)
invoked from within
"source.orig tcl/mobility/leach.tcl"
("uplevel" body line 1)
invoked from within
"uplevel source.orig[list $fileName]"
invoked from within
"if [$instance_ is_http_url $fileName] {
set buffer [$instance_ read_url $fileName]
uplevel eval $buffer
} else {
uplevel source.orig[list $fileName]
..."
(procedure "source" line 8)
invoked from within
"source tcl/mobility/$opt(rp).tcl"
(file "tcl/ex/wireless.tcl" line 187)
Also i get the leach.out file as an empty file and as usual the get the warnings on the console.
Please help me out.
hi every one...!
whenever i run leach_test file then in leach_sims
1. I found two files named leach.save1 and leach.sav2,
can anyone plz tel me what are these files about?
2. I want to change/modify CH election algorithm for leach, where can i do that i mean in which file,
3. does anyone know where to change mobility scenario file, I tried to chnge in wireless.tcl but no change in results if anyone worked on mobility with leach plz tell me what would be the difference?
here is my version of uAMPS extension. I added option for protocol PEGASIS simulations.
You can also simulate modified version of LEACH and LEACH-C. By default number of cluster nodes is
5% from all nodes (5 CH nodes for 100 sensor nodes). In these modified version, number of CH nodes is
changed dynamically - 5% nodes from actual alive nodes. The simulations are longer a more data is send
with this modified version.
Manual how to use modified LEACH,LEACH-C and PEGASIS
1. In folder mit/uAMPS are files ns-leach_2.tcl and ns-bsapp_2.tcl
2. You have to rename file to ns-leach_2 to ns-leach.tcl and you can simulate modified protocol LEACH
3. You have to rename file to ns-bsapp_2.tcl to ns-bsapp.tcl and you can simulate modified protocol LEACH-C
4. You have to use option alg=pegasis in leach_test. Option num_clusters MUST BE 1 like this: num_clusters=1. Only if you want to simulate PEGASIS of course
Which version of Debian ? Important for the compiler choice.
( gcc / g++ version 4.1 must be used for ns-allinone-2.34.
Or edit ns-allinone-2.34, if you have Debian Squeeze, Wheezy : http://erl1.wordpress.com/2011/10/14...neiric-ocelot/ )
Which version of Debian ? Important for the compiler choice.
( gcc / g++ version 4.1 must be used for ns-allinone-2.34.
Or edit ns-allinone-2.34, if you have Debian Squeeze, Wheezy : http://erl1.wordpress.com/2011/10/14...neiric-ocelot/ )
Which version of Debian ? Important for the compiler choice.
( gcc / g++ version 4.1 must be used for ns-allinone-2.34.
Or edit ns-allinone-2.34, if you have Debian Squeeze, Wheezy : http://erl1.wordpress.com/2011/10/14...neiric-ocelot/ )
.
for this moment i just install the protocol leach.
but how to run it in ns? (i have debian squezy and leach is installed in ns 2.34).
I suppose that ns-2.34 is installed with the compiler gcc-4.3.
The home directory of ns-2.34 is "/opt/ns-allinone-2.34"
1- download the package "ns-234-leach.tar.gz" into the directory "/opt/ns-allinone-2.34/ns-2.34". https://docs.google.com/uc?id=0BzLWx...CNWG1NQK&hl=en
2- download the bash file "leach-setup.sh" into the directory "/opt/ns-allinone-2.34/ns-2.34". https://docs.google.com/uc?id=0BzLWx...CJSU5ZYG&hl=en
3- If the home directory of your "ns-2.34" is other than "/opt/...", then you need to find "/opt/ns-allinone-2.34" and replace with "yourpath/ns-allinone-2.34" for the file "leach-setup.sh".
4- move to the directory "/opt/ns-allinone-2.34/ns-2.34" and patch the file "leach-setup.sh"
wsn@ubuntu:~$ cd /opt/ns-allinone-2.34/ns-2.34/
wsn@ubuntu:/opt/ns-allinone-2.34/ns-2.34$ bash leach-setup.sh
5- If the home directory of your "ns-2.34" is other than "/opt/...", then you need to find "/opt/ns-allinone-2.34" and replace with "yourpath/ns-allinone-2.34" for the follwoing two files:
- "Makefile" : found in the directory "yourpath/ns-allinone-2.34/ns-2.34".
- "Makefile.in" : found in the directory "yourpath/ns-allinone-2.34/ns-2.34".
6. Edit both “Makefile” & “Makefile.in” as following:
CC = gcc-4.3
CPP = g++-4.3
7- run the following commands
wsn@ubuntu:/opt/ns-allinone-2.34/ns-2.34$./configure
wsn@ubuntu:/opt/ns-allinone-2.34/ns-2.34$make clean
wsn@ubuntu:/opt/ns-allinone-2.34/ns-2.34$make
7- If the previous commands passed successfully then you are ready to test your "Leach" by running ./test:
wsn@ubuntu:/opt/ns-allinone-2.34/ns-2.34$./test
8. check the file "leach.err", if no error reported then go to "leach.out" and enjoy your results!
HI, My Tamer
when i chek the file leach.err i got this erreurs
can't read "env(RCA_LIBRARY)": no such variable
while executing
"source $env(RCA_LIBRARY)/ns-ranode.tcl"
(file "mit/uAMPS/sims/uamps.tcl" line 9)
invoked from within
"source.orig mit/uAMPS/sims/uamps.tcl"
("uplevel" body line 1)
invoked from within
"uplevel source.orig[list $fileName]"
invoked from within
"if [$instance_ is_http_url $fileName] {
set buffer [$instance_ read_url $fileName]
uplevel eval $buffer
} else {
uplevel source.orig[list $fileName]
..."
(procedure "source" line 8)
invoked from within
"source mit/uAMPS/sims/uamps.tcl"
(file "tcl/mobility/leach.tcl" line 18)
invoked from within
"source.orig tcl/mobility/leach.tcl"
("uplevel" body line 1)
invoked from within
"uplevel source.orig[list $fileName]"
invoked from within
"if [$instance_ is_http_url $fileName] {
set buffer [$instance_ read_url $fileName]
uplevel eval $buffer
} else {
uplevel source.orig[list $fileName]
..."
(procedure "source" line 8)
invoked from within
"source tcl/mobility/$opt(rp).tcl"
(file "tcl/ex/wireless.tcl" line 187)
dear farab can you please send me some examples of leach. i don't know how to use it. i install leach correct but i want to cluster my nodes, how can i?can u help me plz?
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.