26int fn_NetSim_RIP_Update_Timer(
struct stru_NetSim_Network *pstruNETWORK,NetSim_EVENTDETAILS *pstruEventDetails)
28 int nLoop1=0,nLink_Id=0;
29 NETSIM_ID nConnectedDevId=0,nDeviceid;
30 NETSIM_ID nConnectedInterfaceId=0;
31 NETSIM_ID nInterfaceId,nLoop=0;
32 NETSIM_ID nInterfaceCount;
33 DEVICE_ROUTER *pstruRouter;
35 RIP_PACKET *pstruRIPPacket = NULL;
36 NetSim_PACKET* pstruControlPacket=NULL;
37 RIP_ROUTING_DATABASE *pstrudatabase;
38 RIP_ENTRY *pstruRIPNewEntry,*pstruRIPCurrentEntry;
40 nDeviceid=pstruEventDetails->nDeviceId;
41 nInterfaceCount=NETWORK->ppstruDeviceList[nDeviceid-1]->nNumOfInterface;
42 for(nLoop=0;nLoop<nInterfaceCount;nLoop++)
44 if(NETWORK->ppstruDeviceList[nDeviceid-1]->ppstruInterfaceList[nLoop]->szAddress &&
45 NETWORK->ppstruDeviceList[nDeviceid-1]->ppstruInterfaceList[nLoop]->nInterfaceType==INTERFACE_WAN_ROUTER)
47 nLink_Id = fn_NetSim_Stack_GetConnectedDevice(nDeviceid,nLoop+1,&nConnectedDevId,&nConnectedInterfaceId);
50 pstruRouter = get_RIP_var(nDeviceid);
51 if(pstruRouter && pstruRouter->RoutingProtocol[nLoop] == APP_PROTOCOL_RIP)
56 pstruRIPPacket=calloc(1,
sizeof(RIP_PACKET));
58 pstruRIPPacket->
nVersion=pstruRouter->uniInteriorRouting.struRIP.n_RIP_Version;
59 pstrudatabase=pstruRouter->pstruRoutingTables->pstruRIP_RoutingTable;
61 while(pstrudatabase!=NULL)
69 if(pstruRIPPacket->pstruRIPEntry)
71 pstruRIPCurrentEntry = pstruRIPPacket->pstruRIPEntry;
72 while(pstruRIPCurrentEntry->pstru_RIP_NextEntry != NULL)
73 pstruRIPCurrentEntry = pstruRIPCurrentEntry->pstru_RIP_NextEntry;
74 pstruRIPCurrentEntry->pstru_RIP_NextEntry = pstruRIPNewEntry;
77 pstruRIPPacket->pstruRIPEntry = pstruRIPNewEntry;
78 pstrudatabase=pstrudatabase->pstru_Router_NextEntry;
82 pstruControlPacket=fn_NetSim_Packet_CreatePacket(APPLICATION_LAYER);
83 pstruControlPacket->nControlDataType=RIP_Packet;
84 pstruControlPacket->nPacketId=0;
85 pstruControlPacket->nPacketType=PacketType_Control;
86 pstruControlPacket->nSourceId=nDeviceid;
87 add_dest_to_packet(pstruControlPacket, nConnectedDevId);
88 pstruControlPacket->nTransmitterId=nDeviceid;
89 pstruControlPacket->nReceiverId=nConnectedDevId;
91 pstruControlPacket->pstruAppData->dArrivalTime=pstruEventDetails->dEventTime;
92 pstruControlPacket->pstruAppData->dEndTime=pstruEventDetails->dEventTime;
93 pstruControlPacket->pstruAppData->dStartTime=pstruEventDetails->dEventTime;
94 pstruControlPacket->pstruAppData->dPayload=RIP_PACKET_SIZE_WITH_HEADER;
95 pstruControlPacket->pstruAppData->dOverhead=0;
96 pstruControlPacket->pstruAppData->dPacketSize=pstruControlPacket->pstruAppData->dPayload+pstruControlPacket->pstruAppData->dOverhead;
97 pstruControlPacket->pstruAppData->nApplicationProtocol=APP_PROTOCOL_RIP;
98 pstruControlPacket->pstruAppData->Packet_AppProtocol=pstruRIPPacket;
100 pstruControlPacket->pstruNetworkData->nNetworkProtocol=NW_PROTOCOL_IPV4;
101 pstruControlPacket->pstruNetworkData->nTTL = 1;
102 pstruControlPacket->pstruNetworkData->szSourceIP=IP_COPY(fn_NetSim_Stack_GetIPAddressAsId(nDeviceid,nInterfaceId));
103 pstruControlPacket->pstruNetworkData->szDestIP=IP_COPY(fn_NetSim_Stack_GetIPAddressAsId(nConnectedDevId,nConnectedInterfaceId));
104 if(!pstruControlPacket->pstruNetworkData->szDestIP)
107 sprintf(str,
"Unable to get the connected device IP address for Router %d Interface %d",nDeviceid,nInterfaceId);
111 pstruControlPacket->pstruTransportData->nSourcePort=RIP_PORT+1;
112 pstruControlPacket->pstruTransportData->nDestinationPort=RIP_PORT;
113 if(NETWORK->ppstruDeviceList[nDeviceid-1]->pstruTransportLayer->isUDP)
114 pstruControlPacket->pstruTransportData->nTransportProtocol=TX_PROTOCOL_UDP;
115 else if(NETWORK->ppstruDeviceList[nDeviceid-1]->pstruTransportLayer->isTCP)
116 pstruControlPacket->pstruTransportData->nTransportProtocol=TX_PROTOCOL_TCP;
118 pstruControlPacket->pstruTransportData->nTransportProtocol=0;
120 if(!fn_NetSim_Socket_GetBufferStatus(pstruRouter->sock))
122 fn_NetSim_Socket_PassPacketToInterface(nDeviceid, pstruControlPacket, pstruRouter->sock);
123 pstruEventDetails->dEventTime=pstruEventDetails->dEventTime;
124 pstruEventDetails->dPacketSize=pstruControlPacket->pstruAppData->dPacketSize;
125 pstruEventDetails->nApplicationId=0;
126 pstruEventDetails->nProtocolId=pstruControlPacket->pstruTransportData->nTransportProtocol;
127 pstruEventDetails->nDeviceId=nDeviceid;
128 pstruEventDetails->nInterfaceId=0;
129 pstruEventDetails->nEventType=TRANSPORT_OUT_EVENT;
130 pstruEventDetails->nSubEventType=0;
131 pstruEventDetails->pPacket=NULL;
132 pstruEventDetails->szOtherDetails = pstruRouter->sock;
133 fnpAddEvent(pstruEventDetails);
137 fn_NetSim_Socket_PassPacketToInterface(nDeviceid, pstruControlPacket, pstruRouter->sock);
145 pstruEventDetails->nPacketId=0;
146 pstruEventDetails->nApplicationId= 0;
147 pstruEventDetails->nEventType=TIMER_EVENT;
148 pstruEventDetails->nSubEventType=SEND_RIP_UPDATE_PKT;
149 pstruEventDetails->nProtocolId=APP_PROTOCOL_RIP;
150 pstruEventDetails->dEventTime=pstruEventDetails->dEventTime+get_RIP_var(nDeviceid)->uniInteriorRouting.struRIP.n_Update_timer;
151 pstruEventDetails->pPacket = NULL;
152 fnpAddEvent(pstruEventDetails);
unsigned int nVersion
The version field is used to specify the RIP version (version 1 or 2)
unsigned int nMetric
Cost to reach the destination.
unsigned int nAddress_family_identifier
This is used to identify the Address family of the IP address.
NETSIM_IPAddress szSubnet_Mask
Destination Subnet Mask.
NETSIM_IPAddress szIPv4_address
Destination IPv4 address.
NETSIM_IPAddress szNext_Hop
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.