www.pudn.com > Router.rar > update.h


#include"DVsim.h" 
void AddtoTable(Route *a,Route *b); 
void AltertoTable(Route *a,Route *b); 
void UpdateTable(Route *newr)//接收到邻接路由器的路由信息,要更新路由表 
{ 
	if(routetable[newr->dest_addr].dest_addr==newr->dest_addr) 
	{ 
		if(newr->cost+1dest_addr].cost) 
		{//发现了一条到达某目的的、距离更短的新路由,则用该路由替换原有的路由 
			AltertoTable(&routetable[newr->dest_addr],newr); 
		} 
	} 
	else 
	{//在此路由表中没有到达目的地的路径,发现了一条到达某目的的新路由, 
	//而该路由在原来的路由表中不存在(即发现了一条新路由),则在路由表中增加该路由 
		if(newr->dest_addr!=routetable[newr->dest_addr].src_addr) 
			AddtoTable(&routetable[newr->dest_addr],newr);//将newr添加到路由表 
	} 
} 
 
void AddtoTable(Route *a,Route *b) 
{   //发现了一条到达某目的的新路由 
	//加入到路由表中,将b中的路由信息添加到路由表中 
	a->routpath[0]=b->src_addr;//经过的第一个路由为b 
	for(int i=0;iroutpath[i+1]=b->routpath[i];//除第一个路由外,其他的路由路径直接拷过来 
	a->cost=b->cost+1;//距离向量加1 
} 
void AltertoTable(Route *a,Route *b) 
{//发现了一条到达某目的的、距离更短的新路由,则用该路由替换原有的路由 
	//改变路由表,用b中的路由信息修改a中的信息 
	a->routpath[0]=b->src_addr;//经过的第一个路由为b 
	for(int i=0;iroutpath[i+1]=b->routpath[i]; 
	a->cost=b->cost+1;//修改距离向量 
}