More and more about NS-2

Compile cc file to exe file

in ns-allinone-2.34/ns-2.34/indep-utils/propagation/

g++ -lm -o threshold threshold.cc

threshold of Cthresh and Rthresh can be calculated.

Read More......

Another app is currently holding the yum lock; waiting for it to exit…

Another app is currently holding the yum lock; waiting for it to exit…

error though I was not using yum any where else, but this crap was coming every time when I run the command, After googling a bit finally got the solution that I this error was coming coz there was something in the yum.pid.
We can this issue by two means
First
one killing the pid by doing follwing command.

# ps aux | grep yum

this command will show all the process with process id which is running by yum. so now you can kill the process. Say process Id 31542 is using the yum so you can do

# kill -9 31542
or
# kill 31542

Second:

If above method doesn’t work for you. you can remove the yum process from the machine. Now the question arise where you will get the process file. yum process resides in /var/run folder so simply type the following command and hit enter.
# rm -f /var/run/yum.pid


Read More......

Some useful stuff about ns-2

http://jsun74.blogspot.com/2010/10/fwd-ns2.html

Read More......

Command for AWK

I have been always in search for the command to run AWK script. To ease my job next time, I should have put in here too.. :)


The command is:

awk -f awkfilename tracefilename > outputfilename

Read More......

Adding new routing protocol in ns-2

Thanks to Elmurod A. Talipov

Writing routing protocol is fairly easy in NS2, but for beginners it seems very difficult. Therefore, if you are new to NS2 and want to write your own routing protocol, I would strongly recommend to revise AODV source code. Because, I believe AODV source code is straightforward and fairly easy to understand due to the simplicity of the AODV protocol.

Before you begin reading this post, I assume that you have already installed NS2 on Linux. I have used version 2.34, which is current release. If you have not installed yet, DOWNLOAD HERE and INSTALL. Okey, simple requirements to write your own routing protocol

NS2 installed
You should know how to program in C/C++.
Optionally, shell scripting and perl.
Let's start with creating directory of routing protocol. Goto the "$NS_ROOT/ ns-2.34/". Create directory named as wfrp, we call it WSN Flooding-based Routing Protocol in which sink nodes periodically send a beacon message and other nodes construct route towards the sink nodes. Then nodes report to sink node every certain period using UDP protocol. Direct Diffusion may be an example of such protocol, but what we are writing is simpler and has more functionalities.

mkdir wfrp
In the directory we create three files : wrfp.cc, wrfp.h, wrfp_packet.h. Download and put these files in wfrp directory. I will not explain the code here, and if you don't understand just leave comment I will try to answer.

Now, we are going to modify following files. Therefore it is better you backup these files before you start adding new protocol, so that you can easily go back.

$NS_ROOT/Makefile
$NS_ROOT/queue/priqueue.cc
$NS_ROOT/common/packet.h
$NS_ROOT/trace/cmu-trace.h
$NS_ROOT/trace/cmu-trace.cc
$NS_ROOT/tcl/lib/ns-packet.tcl
$NS_ROOT/tcl/lib/ns-lib.tcl
$NS_ROOT/tcl/lib/ns-agent.tcl
$NS_ROOT/tcl/lib/ns-mobilenode.tcl
Let's start with ~/ns-allinone-2.34/ns-2.34/Makefile just add following lien at 269

wfrp/wfrp.o \
Add following lines to ~/ns-allinone-2.34/ns-2.34/queue/priqueue.cc from line 93.

// WFRP patch
case PT_WFRP:
To define new routing protocol packet type we have to modify ~/ns-allinone-2.34/ns-2.34/common/packet.h file. We change PT_NTYPE to 63, and for our protocol PT_WFRP = 62. If you have already installed another routing protocol. Just make sure PT_NTYPE is last, and protocol number is ordered sequentially. From line 85 changes would be :

// WFRP packet
static const packet_t PT_WFRP = 62;

// insert new packet types here
static packet_t PT_NTYPE = 63; // This MUST be the LAST one
We make following code change at line 254 of ~/ns-allinone-2.34/ns-2.34/common/packet.h. The code is used that the packet is routing protocol packet and has high priority.

type == PT_AODV ||
type == PT_WFRP)
And at line 390 of the same file

// WFRP patch
name_[PT_WFRP] = "WFRP";
Now we will make NS2 trace our simulation and write it to *something*.tr, in order to do that we have to modify cmu-trace.h and cmu-trace.cc.

To add trace function we add following line to ~/ns-allinone-2.34/ns-2.34/trace/cmu-trace.h at line 163:

void format_wfrp(Packet *p, int offset);
~/ns-allinone-2.34/ns-2.34/trace/cmu-trace.cc must be added following code at line 1071

// WFRP patch
void
CMUTrace::format_wfrp(Packet *p, int offset)
{
struct hdr_wfrp *wh = HDR_WFRP(p);
struct hdr_wfrp_beacon *wb = HDR_WFRP_BEACON(p);
struct hdr_wfrp_error *we = HDR_WFRP_ERROR(p);

switch(wh->pkt_type) {
case WFRP_BEACON:

if (pt_->tagged()) {
sprintf(pt_->buffer() + offset,
"-wfrp:t %x -wfrp:h %d -wfrp:b %d -wfrp:s %d "
"-wfrp:px %d -wfrp:py %d -wfrp:ts %f "
"-wfrp:c BEACON ",
wb->pkt_type,
wb->beacon_hops,
wb->beacon_id,
wb->beacon_src,
wb->beacon_posx,
wb->beacon_posy,
wb->timestamp);
} else if (newtrace_) {

sprintf(pt_->buffer() + offset,
"-P wfrp -Pt 0x%x -Ph %d -Pb %d -Ps %d -Ppx %d -Ppy %d -Pts %f -Pc BEACON ",
wb->pkt_type,
wb->beacon_hops,
wb->beacon_id,
wb->beacon_src,
wb->beacon_posx,
wb->beacon_posy,
wb->timestamp);

} else {

sprintf(pt_->buffer() + offset,
"[0x%x %d %d [%d %d] [%d %f]] (BEACON)",
wb->pkt_type,
wb->beacon_hops,
wb->beacon_id,
wb->beacon_src,
wb->beacon_posx,
wb->beacon_posy,
wb->timestamp);
}
break;

case WFRP_ERROR:
// TODO: need to add code
break;

default:
#ifdef WIN32
fprintf(stderr,
"CMUTrace::format_wfrp: invalid WFRP packet type\n");
#else
fprintf(stderr,
"%s: invalid WFRP packet type\n", __FUNCTION__);
#endif
abort();
}
}
Now we will modify tcl files to create routing agent. First we define protocol name to use in tcl file. It would done by modifying ~/ns-allinone-2.34/ns-2.34/tcl/lib/ns-packet.tcl @ line 172

# WFRP patch
WFRP
Now we set routing agent by modifying ~/ns-allinone-2.34/ns-2.34/tcl/lib/ns-lib.tcl @ line 633

WFRP {
set ragent [$self create-wfrp-agent $node]
}
From line 860 of the same file following code should be added.

Simulator instproc create-wfrp-agent { node } {
# Create WFRP routing agent
set ragent [new Agent/WFRP [$node node-addr]]
$self at 0.0 "$ragent start"
$node set ragent_ $ragent
return $ragent
}
Now we will set port numbers of routing agent. sport is source port, dport is destination port. Modify ~/ns-allinone-2.34/ns-2.34/tcl/lib/ns-agent.tcl line 202

Agent/WFRP instproc init args {
$self next $args
}

Agent/WFRP set sport_ 0
Agent/WFRP set dport_ 0
Frankly speaking I have no idea why I have to add following things. But I believe it should be done according to some tutorial : ~/ns-allinone-2.34/ns-2.34/tcl/lib/ns-mobilenode.tcl line 201

# Special processing for WFRP
set wfrponly [string first "WFRP" [$agent info class]]
if {$wfrponly != -1 } {
$agent if-queue [$self set ifq_(0)] ;# ifq between LL and MAC
}
We are done. got to ~/ns-allinone-2.34/ns-2.34/ directory and do

make clean
make
When the compile is finished, you can test using wfrp_802_15_4.tcl file as :

ns wfrp_802_15_4.tcl
In this test the NODE 0 is sink node, starts sending beacon 1 second after simulation i started, and NODE 10 is reporting node. It starts sending report over CBR/UDP at 5.0 seconds (after simulation is started). Report interval is 2 seconds.

To remove debugging WFRP, uncomment #define DEBUG (line 36 of wfrp.cc & re-make it).

Read More......

Fedora 10 Enable GUI Root Login

Q. How do I enable root login under Fedora 10 Gnome GUI login screen / manager?

A. Fedora 10 uses pam module called pam_succeed_if.so. This module is designed to succeed or fail authentication based on characteristics of the account belonging to the user being authenticated. One use is to select whether to load other modules based on this test. This module blocks root login using GUI.

Login as root

Log in as normal user

Then open GUI terminal (bash prompt) and type the following command to become root user:
$ su -

WARNING! These examples may crash your computer if not executed properly. It is recommended that you always login as normal user to avoid any damage to your system and then use su - to get root level access as required.

Fedora 10 update GDM config to allow root login

Type your root password. Next, make a backup of /etc/pam.d/gdm, enter:
cp /etc/pam.d/gdm /root
Now open /etc/pam.d/gdm using gedit or vi text editor, enter:
gedit /etc/pam.d/gdm
OR
vi /etc/pam.d/gdm
Alternatively, you can do everything in a one command:
su -c 'gedit /etc/pam.d/gdm'
Find line that read as follows:

auth required pam_succeed_if.so user != root quiet

Remove or comment out line by prefixing #.

# auth required pam_succeed_if.so user != root quiet

Save and close the file. Logout from terminal and from GUI itself. Now you should be able login as root user using GDM GUI login manager.

Read More......