📄 aodvsec_rtable.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 + -