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;
}
'공대생의 일기 > 2009年 1학기' 카테고리의 다른 글
[리눅스시스템프로그래밍]Shell의 이해 (0) | 2010.12.21 |
---|---|
[리눅스시스템프로그래밍]레코드의 이해 (0) | 2010.12.21 |
[객체지향윈도우프로그래밍]MFC를 이용하여 도형그리기 (0) | 2010.12.21 |
[데이터베이스프로그래밍]인터넷뱅킹 서비스 (0) | 2010.12.21 |