update.h

来自「一个距离向量算法的路由器 路由表更新规则: 发现了一条到达某目的的新路由」· C头文件 代码 · 共 36 行

H
36
字号
#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+1<routetable[newr->dest_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;i<MAX_ROUTES-1;i++)
		a->routpath[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;i<MAX_ROUTES-1;i++)
		a->routpath[i+1]=b->routpath[i];
	a->cost=b->cost+1;//修改距离向量
}

⌨️ 快捷键说明

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