Dear NS2 Users
I am facing a very serious problem regarding modification to AODV protocol.
I have customized AODV Protocol to work as VANET Beaconing Protocol
according to DSRC Standard.
I also having implemented the duplicity mechansim where each node on
receiving a beacon, stores it for certain time to check for duplicity,
because i want the beacons to travel for multihops.
i have divided the road into regions and there is a linked list for every
region which stores the hashes of certain values taken from every beacon.
i have implemented all this, and when i run my tcl script, it gives
segmentation fault.

basically i get the segmentation fault after adding the following code (This
whole code is included in aodv.cc and aodv is no more a routing protocol. it
is just a VANET Beaconing protocol now which i optimized for my
simulations).

aodv/aodv.cc
recev_beacon()
{
...
...
.....
receive the beacon and calculate the hash from some values
////////// Now Save the Beacons

 if (xx<=x && x<(xx+200))
   {
     bool flag=obj.search(hash2);
     if (flag==TRUE)
       {
     cout<<"Already exists in the linked list"<<endl;
       }
     else
       {
           obj.add(hash2, 1);
       //ofstream list1;//for saving hash values
       //list1.open("linkedlist1.dat", ios::app);
       //list1<<hash2<<endl;
       }
    } // end of if
 else if (x>=xx && (xx<=x && x<(xx+400)))
   {
   obj.add(hash2, 2);
ofstream list2;//for saving hash values
 list2.open("linkedlist2.dat", ios::app);
 list2<<hash2<<endl;
   }
 else if (x>=xx && (xx<=x && x<(xx+600)))
   {
   obj.add(hash2, 3);
   }
 else if (x>=xx && (xx<=x && x<(xx+1000)))
   {
   obj.add(hash2, 4);
   }

the linked list implemented is given below
//++++++++++++++++++++++++++++++++++++
// Defining Linked Lists
//++++++++++++++++++++++++++++++++++++
struct list1{
unsigned int  bid;list1  *link;
};

struct list2{
unsigned int  bid;list2  *link;
};


struct list3{
unsigned int  bid;list3  *link;
};

struct list4{
unsigned int  bid;list4  *link;
};

class list{
private:
int i;
  list1  *cur1,*temp1,*start1;
  list2  *cur2,*temp2,*start2;
  list3  *cur3,*temp3,*start3;
  list4  *cur4,*temp4,*start4;

public:

list()
{
start1=NULL;
start2=NULL;
start3=NULL;
start4=NULL;
}

void add(unsigned int hashval, int listno)
{
//cout<<"Enter the list number to add element to";cin>>i;
// check for list no.
 if (listno==1)
 {

   if(start1==NULL)
   {
     start1=new list1;
     cur1=start1;
     cur1->bid=hashval;
     cur1->link=NULL;
   }
   else
   {
    cur1->link=new list1;
    cur1=cur1->link;
    cur1->bid=hashval;
    cur1->link=NULL;
   }

  }
 else if (listno==2)
   {
    if(start2==NULL)
     {
     start2=new list2;
     cur2=start2;
     cur2->bid=hashval;
     cur2->link=NULL;
     }
   else
    {
    cur2->link=new list2;
    cur2=cur2->link;
    cur2->bid=hashval;
    cur2->link=NULL;
    }
   }
else if (listno==3)
   {
    if(start3==NULL)
     {
     start3=new list3;
     cur3=start3;
     cur3->bid=hashval;
     cur3->link=NULL;
     }
   else
    {
    cur3->link=new list3;
    cur3=cur3->link;
    cur3->bid=hashval;
    cur3->link=NULL;
    }
   }
else if (listno==4)
   {
    if(start4==NULL)
     {
     start4=new list4;
     cur4=start4;
     cur4->bid=hashval;
     cur4->link=NULL;
     }
   else
    {
    cur4->link=new list4;
    cur4=cur4->link;
    cur4->bid=hashval;
    cur4->link=NULL;
    }
   }
}
  ////////////////// searching method
  bool search(unsigned int hashval)
  {
    bool b;
 cur1=start1;
     while (cur1->link!=NULL)
       {
     if(cur1->bid==hashval)
       b=TRUE;
     else
       b=FALSE;
     cur1=cur1->link;
    }
 return b;
  }

I will be looking for some help as soon as possible.
THanks to all concerned in advance!!


Rasheed

Reply via email to