⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 aodvsec_rtable.cc

📁 本文件是基于NS2的AODVSEC协议的仿真源代码
💻 CC
字号:
#include <aodvsec/aodvsec_rtable.h>
//#include <cmu/aodvsec/aodvsec.h>

/*
  The Routing Table
*/

aodvsec_rt_entry::aodvsec_rt_entry()
{
int i;

 rt_req_timeout = 0.0;
 rt_req_cnt = 0;

 rt_dst = 0;
 rt_seqno = 0;
 rt_hops = rt_last_hop_count = INFINITY2;
 rt_nexthop = 0;
 LIST_INIT(&rt_pclist);
 rt_expire = 0.0;
 rt_flags = RTF_DOWN;
 signe_for_rrep[0]=0;//对比签名的过程用对比源IP代替
 signe=0;//.................................................
 sip=0;//..........................................................................
 lifetime=0;//...................................................................


 /*
 rt_errors = 0;
 rt_error_time = 0.0;
 */


 for (i=0; i < MAX_HISTORY; i++) {
   rt_disc_latency[i] = 0.0;
 }
 hist_indx = 0;
 rt_req_last_ttl = 0;

 LIST_INIT(&rt_nblist);

}


aodvsec_rt_entry::~aodvsec_rt_entry()
{
AODVSEC_Neighbor *nb;

 while((nb = rt_nblist.lh_first)) {
   LIST_REMOVE(nb, nb_link);
   delete nb;
 }

AODVSEC_Precursor *pc;

 while((pc = rt_pclist.lh_first)) {
   LIST_REMOVE(pc, pc_link);
   delete pc;
 }

}


void
aodvsec_rt_entry::nb_insert(nsaddr_t id)
{
AODVSEC_Neighbor *nb = new AODVSEC_Neighbor(id);
        
 assert(nb);
 nb->nb_expire = 0;
 LIST_INSERT_HEAD(&rt_nblist, nb, nb_link);

}


AODVSEC_Neighbor*
aodvsec_rt_entry::nb_lookup(nsaddr_t id)
{
AODVSEC_Neighbor *nb = rt_nblist.lh_first;

 for(; nb; nb = nb->nb_link.le_next) {
   if(nb->nb_addr == id)
     break;
 }
 return nb;

}


void
aodvsec_rt_entry::pc_insert(nsaddr_t id)
{
	if (pc_lookup(id) == NULL) {
	AODVSEC_Precursor *pc = new AODVSEC_Precursor(id);
        
 		assert(pc);
 		LIST_INSERT_HEAD(&rt_pclist, pc, pc_link);
	}
}


AODVSEC_Precursor*
aodvsec_rt_entry::pc_lookup(nsaddr_t id)
{
AODVSEC_Precursor *pc = rt_pclist.lh_first;

 for(; pc; pc = pc->pc_link.le_next) {
   if(pc->pc_addr == id)
   	return pc;
 }
 return NULL;

}

void
aodvsec_rt_entry::pc_delete(nsaddr_t id) {
AODVSEC_Precursor *pc = rt_pclist.lh_first;

 for(; pc; pc = pc->pc_link.le_next) {
   if(pc->pc_addr == id) {
     LIST_REMOVE(pc,pc_link);
     delete pc;
     break;
   }
 }

}

void
aodvsec_rt_entry::pc_delete(void) {
AODVSEC_Precursor *pc;

 while((pc = rt_pclist.lh_first)) {
   LIST_REMOVE(pc, pc_link);
   delete pc;
 }
}	

bool
aodvsec_rt_entry::pc_empty(void) {
AODVSEC_Precursor *pc;

 if ((pc = rt_pclist.lh_first)) return false;
 else return true;
}	

/*
  The Routing Table
*/

aodvsec_rt_entry*
aodvsec_rtable::rt_lookup(nsaddr_t id)
{
aodvsec_rt_entry *rt = rthead.lh_first;

 for(; rt; rt = rt->rt_link.le_next) {
   if(rt->rt_dst == id)
     break;
 }
 return rt;

}

void
aodvsec_rtable::rt_delete(nsaddr_t id)
{
aodvsec_rt_entry *rt = rt_lookup(id);

 if(rt) {
   LIST_REMOVE(rt, rt_link);
   delete rt;
 }

}

aodvsec_rt_entry*
aodvsec_rtable::rt_add(nsaddr_t id)
{
aodvsec_rt_entry *rt;

 assert(rt_lookup(id) == 0);
 rt = new aodvsec_rt_entry;
 assert(rt);
 rt->rt_dst = id;
 LIST_INSERT_HEAD(&rthead, rt, rt_link);
 return rt;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -