18int flushIerpTable(NODE_IERP* ierp)
20 IERP_ROUTE_TABLE* table= ierp->routeTable;
25 LIST_FREE((
void**)&ierp->routeTable,table);
26 table= ierp->routeTable;
29 table=(IERP_ROUTE_TABLE*)LIST_NEXT(table);
33ptrIP_ROUTINGTABLE findInIarpTable(ptrIP_ROUTINGTABLE table, NETSIM_IPAddress ip)
37 if (!IP_COMPARE(table->networkDestination, ip))
41 table = (ptrIP_ROUTINGTABLE)LIST_NEXT(table);
46int addToIERPTableFromIARP(NODE_IERP* ierp,ptrIP_ROUTINGTABLE iarpTable)
48 ptrIP_ROUTINGTABLE table= iarpTable;
51 ptrIP_ROUTINGTABLE temp = iarpTable;
53 IERP_ROUTE_TABLE* entry = IERP_ROUTE_TABLE_ALLOC();
54 entry->DestAddr = IP_COPY(iarpTable->networkDestination);
55 entry->SubnetMask=IP_COPY(iarpTable->netMask);
56 entry->count = iarpTable->Metric-1;
58 entry->Route = (NETSIM_IPAddress*)calloc(entry->count,
sizeof* entry->Route);
59 for(i=0;i<entry->count;i++)
61 entry->Route[i]=IP_COPY(iarpTable->gateway);
62 iarpTable=findInIarpTable(table,iarpTable->gateway);
64 LIST_ADD_LAST((
void**)&ierp->routeTable,entry);
65 iarpTable=(ptrIP_ROUTINGTABLE)LIST_NEXT(temp);
70int extractRouteFromreply(IERP_PACKET* reply)
74 NETSIM_IPAddress current = DEVICE_NWADDRESS(pstruEventDetails->nDeviceId,1);
75 NETSIM_IPAddress dest = reply->RouteSourceAddress;
76 NODE_ZRP* zrp=(NODE_ZRP*)DEVICE_NWROUTINGVAR(pstruEventDetails->nDeviceId);
77 NODE_IERP* ierp=(NODE_IERP*)zrp->ierp;
78 IERP_ROUTE_TABLE* table = ierp->routeTable;
79 IERP_ROUTE_TABLE* entry;
82 if(!IP_COMPARE(table->DestAddr,dest))
84 table=(IERP_ROUTE_TABLE*)LIST_NEXT(table);
86 entry=IERP_ROUTE_TABLE_ALLOC();
87 entry->DestAddr=IP_COPY(dest);
89 entry->SubnetMask=IP_COPY(DEVICE_INTERFACE(pstruEventDetails->nDeviceId,1)->szSubnetMask);
90 for(i=0;i<reply->IntermediateNodeCount;i++)
92 if(!IP_COMPARE(reply->IntermediateNodeAddress[i],current))
99 entry->Route=(NETSIM_IPAddress*)calloc(max(count,1),
sizeof* entry->Route);
101 entry->Route[i]=IP_COPY(reply->IntermediateNodeAddress[count-i-1]);
102 LIST_ADD_LAST((
void**)&ierp->routeTable,entry);
106int flushIERPTableFromIARP(NODE_IERP* ierp,ptrIP_ROUTINGTABLE iarpTable)
108 IERP_ROUTE_TABLE* table = ierp->routeTable;
109 ptrIP_ROUTINGTABLE temp;
114 NETSIM_IPAddress nextHop=table->Route[0];
118 if(!IP_COMPARE(temp->networkDestination,nextHop) && temp->Metric==1)
120 temp=(ptrIP_ROUTINGTABLE)LIST_NEXT(temp);
125 LIST_FREE((
void**)&ierp->routeTable,table);
126 table=ierp->routeTable;
130 table=(IERP_ROUTE_TABLE*)LIST_NEXT(table);