📄 mflood-seqtable.cc
字号:
#include <mflood/mflood-seqtable.h>
// The Routing Table
MFlood_RTEntry::MFlood_RTEntry() {
src_ = 0;
// seq_ = 0;
for(int i=0;i<REM_SEQ_COUNT;i++)
rt_seqnos[i] = 0xffffffff;
max_seqno = 0;
min_seqno = 0;
seq_it = 0;
};
// The Routing Table
MFlood_RTEntry::MFlood_RTEntry(nsaddr_t src,u_int32_t seq) {
src_ = src;
// seq_ = seq;
for(int i=0;i<REM_SEQ_COUNT;i++)
rt_seqnos[i] = 0xffffffff;
rt_seqnos[0] = seq;
max_seqno = seq;
min_seqno = 0;
seq_it = 1;
};
bool MFlood_RTEntry::isNewSeq(u_int32_t seq)
{
if(seq > max_seqno)
return true;
//采用min_seqno来抛弃掉太久以前的包
if(seq < min_seqno)
return false;
for(int i=0;i<REM_SEQ_COUNT;i++)
if(seq == rt_seqnos[i])
return false;
return true;
}
void MFlood_RTEntry::addSeq(u_int32_t seq)
{
u_int16_t min_it = 0;
if(seq < min_seqno)
return;
if(seq > max_seqno)
max_seqno = seq;
/*
for(int i=0;i<REM_SEQ_COUNT;i++)
if(seq == rt_seqnos[i])
return;
*/
rt_seqnos[seq_it++] = seq;
seq_it %= REM_SEQ_COUNT;
min_seqno = 0xffffffff;
//计算出min_seqno
for(int i=0;i<REM_SEQ_COUNT;i++)
if(min_seqno > rt_seqnos[i])
min_seqno = rt_seqnos[i];
}
// The Routing Table
MFlood_RTEntry*
MFlood_RTable::rt_lookup(nsaddr_t id) {
MFlood_RTEntry *rt = rthead.lh_first;
for(; rt; rt = rt->rt_link.le_next) {
if(rt->src_ == id)
break;
}
return rt;
}
void
MFlood_RTable::rt_delete(nsaddr_t id) {
MFlood_RTEntry *rt = rt_lookup(id);
if(rt) {
LIST_REMOVE(rt, rt_link);
delete rt;
}
}
void
MFlood_RTable::rt_print() {
MFlood_RTEntry *rt = rthead.lh_first;
//printf("\n Seq table:\n");
for(; rt; rt = rt->rt_link.le_next) {
//printf("index: %d , seq: %d \n",rt->src_,rt->max_seqno);
}
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -