📄 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+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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -