Elmurod A. Talipov
24Oct/09Off

Adding Malicious Node to AODV

Many people have asked me how to implement malicious drop in AODV. I have decided to write simple code for adding malicious node in AODV ( or in any routing protocol).

First you need to modify aodv.cc and aodv.h files. In aodv.h after

/*  The Routing Agent */
class AODV: public Agent {
...
/*
* History management
*/
double 		PerHopTime(aodv_rt_entry *rt);
...

add following line

bool     malicious;

With this variable we are trying to define if the node is malicious or not. In aodv.cc after

/*
  Constructor
*/
AODV::AODV(nsaddr_t id) : Agent(PT_AODV), btimer(this), htimer(this), ntimer(this), rtimer(this), lrtimer(this), rqueue() {
index = id;
seqno = 2;
bid = 1;
...

add following line

malicious = false;

The above code is needed to initialize, and all nodes are initially not malicious. Then we will write a code to catch which node is set as malicious. In aodv.cc after

if(argc == 2) {
  Tcl& tcl = Tcl::instance();

    if(strncasecmp(argv[1], "id", 2) == 0) {
      tcl.resultf("%d", index);
      return TCL_OK;
    }

add following line

if(strcmp(argv[1], "hacker") == 0) {
    malicious = true;
   return TCL_OK;
}

Now we will do some work in TCL to set a malicious node. Using script in my post , we add following line to set node 5 as malicious node.

$ns at 0.0 "[$mnode_(5) set ragent_] hacker"

You may add this line after

for {set i 0} {$i < $val(nn)} { incr i } {
$ns initial_node_pos $mnode_($i) 10
}
...

Alright, we have set malicious node but we did not tell malicious node what to do. As it is known, rt_resolve(Packet *p) function is used to select next hop node when routing data packets. So, we tell malicious node just drop any packet when it receives. To do that after

/*
Route Handling Functions
*/
void
AODV::rt_resolve(Packet *p) {
struct hdr_cmn *ch = HDR_CMN(p);
struct hdr_ip *ih = HDR_IP(p);
aodv_rt_entry *rt;
...

We add a few lines

// if I am malicious node
 if (malicious == true ) {
    drop(p, DROP_RTR_ROUTE_LOOP);
    // DROP_RTR_ROUTE_LOOP is added for no reason.
 }

And implementing malicious node is done. I hope the post will be helpful to design your secure routing protocol.

P.S. Guys please don't ask me c/c++ questions, check your book first :)