'거리벡터프로토콜'에 해당되는 글 1건

  1. 2010.12.21 [인터넷프로토콜]RIP, OSPF 테이블 갱신
2009년 5월 20일
사용한 개발 툴 : Microsoft Visual Studio2005
특징 : 파일읽기, 구조체 사용

<RIP>

void modified_table(Rpt *send, Rpt *recv){

int i;
tmp.name=send->name; 
//send가 보낸 라우팅 테이블의 값을 임시 라우팅 테이블에 옮긴다. 이 과정에서 hop의 값은 1증가시켜서 옮긴다.
for(i=0; i<7; i++){

tmp.dest[i]=send->dest[i];
tmp.hop[i]=send->hop[i]+1;
tmp.next[i]=send->name;// 문제 


//복사된 임시 라우팅 테이블값과 비교하여 임시 라우팅 테이블의 hop값이 더 효과적일 경우 recv의 라우팅 테이블 값을 수정

for(i=0; i<7; i++){

if(recv->hop[i]>tmp.hop[i]){
recv->hop[i]=tmp.hop[i];
recv->next[i]=tmp.next[i];

}

//임시 라우팅 테이블에 값이 중첩되면서 실제 hop의 값이 16을 넘을 수 있다. 그렇게 될 경우 next의 값을 삭제시키면 이는 곧 도달불가를 의미한다.
//주어진 테이블에서는 발생하지 않지만 일종의 예외처리라고 할 수 있다.

if(recv->hop[i]>MAX_HOP) recv->next[i]=' '; 

}



<OSPF>

for(test=0; test<10; test++){

mincost.cost=A.cost[0];
mincost.idx=0; 

for(i=0; i<A.idx; i++){

if(A.cost[i]<mincost.cost){
mincost.idx=i;
mincost.cost=A.cost[i];
//printf("%d %d\n", mincost.idx, mincost.cost); 
}


if(A.node[mincost.idx]>=60){ 
pre_router=A.node[mincost.idx]; 

if(A.node[mincost.idx]<60){

At.network[At.idx]=A.node[mincost.idx];
At.cost[At.idx]=A.cost[mincost.idx];
At.nextrouter[At.idx]=pre_router;
//printf("%d %d\n", At.network[At.idx], At.cost[At.idx]);
At.idx++;

//printf("%d %d\n", A.node[mincost.idx], A.cost[mincost.idx]);
if(A.node[mincost.idx]==10) A.idx=update_Rt(a, &A, mincost.idx, A.idx); 
if(A.node[mincost.idx]==20) A.idx=update_Rt(b, &A, mincost.idx, A.idx); 
if(A.node[mincost.idx]==30) A.idx=update_Rt(c, &A, mincost.idx, A.idx); 
if(A.node[mincost.idx]==40) A.idx=update_Rt(d, &A, mincost.idx, A.idx); 
if(A.node[mincost.idx]==50) A.idx=update_Rt(e, &A, mincost.idx, A.idx); 
if(A.node[mincost.idx]==65) A.idx=update_Rt(A, &A, mincost.idx, A.idx); 
if(A.node[mincost.idx]==66) A.idx=update_Rt(B, &A, mincost.idx, A.idx); 
if(A.node[mincost.idx]==67) A.idx=update_Rt(C, &A, mincost.idx, A.idx); 
if(A.node[mincost.idx]==68) A.idx=update_Rt(D, &A, mincost.idx, A.idx); 
if(A.node[mincost.idx]==69) A.idx=update_Rt(E, &A, mincost.idx, A.idx); 
if(A.node[mincost.idx]==70) A.idx=update_Rt(F, &A, mincost.idx, A.idx);

int update_Rt(Rt ref, Rt *modified, int idx, int Rtidx){

int i;
int tmp_idx=idx;
int tmp_Rtidx=Rtidx; 

for(i=0; i<Rtidx-idx-1; i++){

tmp.node[i]=modified->node[tmp_idx+1];
tmp.cost[i]=modified->cost[tmp_idx+1];
tmp_idx++;

}

tmp.idx=i;
tmp.idx=idx;
for(i=0; i<ref.idx; i++){

if(ref.node[i]!=modified->name){

modified->node[tmp_idx]=ref.node[i];
modified->cost[tmp_idx]=ref.cost[i];
tmp_idx++;

}



for(i=0; i<tmp.idx;i++){

modified->node[tmp_idx]=tmp.node[i];
modified->cost[tmp_idx]=tmp.cost[i];
tmp_idx++;


return tmp_idx;

}


Posted by 검지발가락♡