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

📄 mflood-seqtable.cc

📁 如果有人搞网络协议仿真
💻 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 + -