27int fn_NetSim_RIP_DistanceVectorAlgorithm(
struct stru_NetSim_Network *NETWORK,NetSim_EVENTDETAILS *pstruEventDetails)
29 NETSIM_ID nDeviceId,i;
30 RIP_ROUTING_DATABASE *pstru_Router_RIP_TempTable=NULL;
31 RIP_ROUTING_DATABASE *pstru_Router_RIP_TempTraverse=NULL,*pstru_Router_RIP_InsertTable=NULL;
33 NetSim_PACKET *pstruControlPacket = NULL;
34 RIP_ENTRY *pstru_Router_RIP_RIPEntry=NULL;
36 RIP_PACKET *pstruPacketRIP = NULL;
37 pstruControlPacket=pstruEventDetails->pPacket;
38 nDeviceId=pstruEventDetails->nDeviceId;
39 pstruPacketRIP=pstruControlPacket->pstruAppData->Packet_AppProtocol;
40 pstru_Router_RIP_RIPEntry=pstruPacketRIP->pstruRIPEntry;
42 pstru_Router_RIP_TempTable = ((DEVICE_ROUTER*)DEVICE_APPVAR(nDeviceId, APP_PROTOCOL_RIP))->pstruRoutingTables->pstruRIP_RoutingTable;
43 fn_NetSim_Stack_GetDeviceId_asIP(pstruControlPacket->pstruNetworkData->szNextHopIp,&i);
44 while(pstru_Router_RIP_RIPEntry)
46 pstru_Router_RIP_TempTraverse=pstru_Router_RIP_TempTable;
48 while(pstru_Router_RIP_TempTraverse)
52 if((pstru_Router_RIP_TempTraverse->
nMetric > pstru_Router_RIP_RIPEntry->
nMetric+1))
54 IP_FREE(pstru_Router_RIP_TempTraverse->
szAddress);
55 IP_FREE(pstru_Router_RIP_TempTraverse->
szRouter);
57 pstru_Router_RIP_TempTraverse->
szRouter = IP_COPY(pstruControlPacket->pstruNetworkData->szGatewayIP);
58 pstru_Router_RIP_TempTraverse->
nMetric = pstru_Router_RIP_RIPEntry->
nMetric + 1;
60 pstru_Router_RIP_TempTraverse->
dTimer = pstruEventDetails->dEventTime;
62 iptable_add(IP_WRAPPER_GET(nDeviceId),
66 pstruControlPacket->pstruNetworkData->szGatewayIP,
68 &pstruControlPacket->pstruNetworkData->szNextHopIp,
70 pstru_Router_RIP_RIPEntry->
nMetric + 1,
76 pstru_Router_RIP_TempTraverse = pstru_Router_RIP_TempTraverse->pstru_Router_NextEntry;
79 if(!pstru_Router_RIP_TempTraverse)
82 pstru_Router_RIP_InsertTable=calloc(1,
sizeof(RIP_ROUTING_DATABASE));
83 pstru_Router_RIP_InsertTable->szAddress=pstru_Router_RIP_RIPEntry->
szIPv4_address;
84 pstru_Router_RIP_InsertTable->szSubnetmask = IP_COPY(pstru_Router_RIP_RIPEntry->
szSubnet_Mask);
85 pstru_Router_RIP_InsertTable->szRouter= IP_COPY(pstruControlPacket->pstruNetworkData->szGatewayIP);
86 pstru_Router_RIP_InsertTable->nInterface=i;
87 pstru_Router_RIP_InsertTable->nMetric=pstru_Router_RIP_RIPEntry->
nMetric+1;
88 pstru_Router_RIP_InsertTable->dTimer=pstruEventDetails->dEventTime;
89 fn_NetSim_UpdateEntryinRoutingTable(NETWORK,pstruEventDetails,nDeviceId,pstru_Router_RIP_InsertTable->nInterface,0,pstru_Router_RIP_InsertTable->szAddress,pstru_Router_RIP_InsertTable->szRouter,pstru_Router_RIP_InsertTable->szSubnetmask,0,pstru_Router_RIP_InsertTable->nMetric,1);
90 ((DEVICE_ROUTER*)(DEVICE_APPVAR(nDeviceId,APP_PROTOCOL_RIP)))->uniInteriorRouting.struRIP.nRIP_Update++;
94 iptable_add(IP_WRAPPER_GET(nDeviceId),
98 pstruControlPacket->pstruNetworkData->szGatewayIP,
100 &pstruControlPacket->pstruNetworkData->szNextHopIp,
102 pstru_Router_RIP_RIPEntry->
nMetric + 1,
105 fnpFreeMemory(pstru_Router_RIP_InsertTable);
108 pstru_Router_RIP_RIPEntry=pstru_Router_RIP_RIPEntry->pstru_RIP_NextEntry;
110 if(pstruControlPacket)
112 fn_NetSim_Packet_FreePacket(pstruControlPacket);
113 pstruEventDetails->pPacket=NULL;
unsigned int nMetric
Cost to reach the destination.
NETSIM_IPAddress szSubnet_Mask
Destination Subnet Mask.
NETSIM_IPAddress szIPv4_address
Destination IPv4 address.
NETSIM_ID nInterface
The physical network which must be used to reach the first router.
double dTimer
The amount of time since the entry was last updated.
unsigned int nMetric
Distance to the destination.
NETSIM_IPAddress szRouter
The first router along the route to the destination.
NETSIM_IPAddress szAddress
IP address of the destination host or destination network.
NETSIM_IPAddress szSubnetmask
Subnet mask for the destination network.