Monday, 17 June 2013

How to print Routing table of each node in NS2

You need to pass node id as an argument to this method.
e.g. in aodv.cc withing rt_resolve() method,

rt_print(0);

This will print node 0's routing table at that time with file name as node_0.

void AODV::rt_print(nsaddr_t node_id)
{
    FILE * tmpFile;
    char tmpFileName[50] = "node_";
    char tmp[10] = "";
    sprintf(tmp,"%d",node_id);
    strcat(tmpFileName,tmp);   
    tmpFile = fopen(tmpFileName, "w");

    aodv_rt_entry *rt;   

    for (rt = rtable.head(); rt; rt = rt->rt_link.le_next)
    {

        fprintf(
            tmpFile,
            "Node Id:%i Current time:%.4lf Destination:%i Next hop:%i No. of hops:%i Seq. No.:%i Route expire:%f Flags:%.4lf %d \n",
            node_id, CURRENT_TIME, rt->rt_dst, rt->rt_nexthop, rt->rt_hops,rt->rt_seqno, rt->rt_expire, rt->rt_flags);
    }

    fclose(tmpFile);
}




All the Best!

How to add trust table in NS2.

I am assuming AODV protocol. In rtable.cc add below code


trust_entry::trust_entry()
{
   //Initialize as per your need.
}
trust_entry::~trust_entry()
{
  //Deconstruct as per your need.
}

trust_entry* trust_store::trust_lookup(
nsaddr_t node_id)
{
     trust_entry *rp = trusthead.lh_first;
     for (; rp; rp = rp->trust_link.le_next) {
             if (rp->node_id == node_id)
                 break;
     }
    return rp;
}
void trust_store::trust_delete(
nsaddr_t node_id)
{
    trust_entry *rp = trust_lookup(node_id);

    if (rp)
    {
        LIST_REMOVE(rp, trust_link);
        delete rp;
    }

}

trust_entry*
trust_store::trust_insert(
nsaddr_t node_id, nsaddr_t prev_node,nsaddr_t next_node,int32_t trust_value)
{
    trust_entry *rp;
    //assert(tr_lookup(dst_seq_no) == 0);
    rp = new trust_entry;
    assert(rp);
    rp->node_id = node_id;
    rp->prev_node = prev_node;
    rp->next_node = next_node;
    rp->trust_value = trust_value;
    LIST_INSERT_HEAD(&trusthead, rp, trust_link);
    return rp;
}

trust_entry* trust_store::trust_update(
nsaddr_t node_id,nsaddr_t prev_node,nsaddr_t next_node, int32_t trust_value)
{    trust_delete(node_id);
    trust_insert(node_id,prev_
node,next_node,trust_value);
}
In rtable.h add below code


class trust_entry
{
    friend class AODV;
    friend class trust_store;
public:
    trust_entry();
    ~trust_entry();
    nsaddr_t node_id;
    nsaddr_t prev_node;
    nsaddr_t next_node;
    int32_t trust_value;
protected:
    LIST_ENTRY(trust_entry) trust_link;
};

class trust_store
{

public:
    trust_store()
    {
        LIST_INIT(&trusthead);
    }
    trust_entry* head()
    {
        return trusthead.lh_first;
    }
    trust_entry* trust_insert(nsaddr_t node_id,nsaddr_t prev_node,nsaddr_t next_node,int32_t trust_value);
    trust_entry* trust_lookup(nsaddr_t node_id);
    void trust_delete(nsaddr_t node_id);
    trust_entry* trust_update(nsaddr_t node_id,nsaddr_t prev_node,nsaddr_t next_node, int32_t trust_value);
private:
    LIST_HEAD(trust_head, trust_entry) trusthead;
};


while using in aodv code i.e. aodv.cc add below code to aodv.h

trust_store             tstore;

and if u want to access functions for adding route entry in aodv.cc then add below code in aodv.cc
tstore.trust_insert(node_id,prev_node,next_node,trust_value);
Note:- replace above four parameters with your own. Like wise u can access update, delete and lookup.

All the best!