Obtaining Node Position and Energy Dynamically in NS2.34

To read this article in Scribd go <here>

For an alternative method to obtain a nodes position, go <here>

Happy to meet you in another interesting task in NS2!

This time we will “dynamically” calculate a nodes position and remaining energy.This post is based on the valuable tips mentioned <here>  by Elmurod Talipov.
Now to the task…
I will be modifying the sample script simple-wireless.tcl found at ~/ns-allinone-2.34/ns-2.34/tcl/ex and all my tasks in ns2 would be based on AODV protocol.

1. In simple-wireless.tcl, change the routing protocol to AODV, enable Energy model and set the initial energy value.

2. In the node configuration set the EnergyModel, Initial Energy value, power spent in receiving mode,transmit mode,idle mode and sleep mode.

3. Now we will move to the backend code(c++). Our edits would be performed only in aodv.cc and aodv.h.

4. In aodv.h,first include the following header file that contains the procedures/functions needed to access node postion,energy and several other functions.

#include <mobilenode.h>
You will find class AODV,  something like the one shown below.

5. In that, declare the following variables in “protected” scope.

With that, no more work to be done in aodv.h. What we have actually done here is to declare the variables that we will using in aodv.cc to record a nodes position and energy.

6. In aodv.cc, we will initialize the variables that we have just declared in aodv.h. This we do in the AODV “constructor“(invoked only once during node creation).

7. Next, we include the code to access the functions in mobilenode.h, that fetch the nodes current position and energy.

I have included that code AODV::forward() function, so that the nodes position and energy are printed each time it forwards a packet. Where and When you want them to be printed is your choice. Alternatively, you may have the code included in the function of your choice and have the output redirected to a file.

8. Thats all! All we have to do now is to run simple-wireless.tcl
$ns simple-wireless.tcl
and the output would be something like this:

If you find any discrepancies in this post, please feel free to drop me a mail at micman.manoj@gmail.com. By doing so, You would be saving the valuable time of many researchers.

This article is licensed under GNU GENERAL PUBLIC LICENSE