14#define _CRT_SECURE_NO_DEPRECATE
21_declspec(dllexport)
int fn_NetSim_RIP_Configure(
void** var)
23 return fn_NetSim_RIP_Configure_F(var);
29 NetSim_EVENTDETAILS *pstruEventDetails_Formal,
char *pszAppPath_Formal,\
30 char *pszWritePath_Formal,
int nVersion_Type,
void **fnPointer)
32 fn_NetSim_RIP_Init_F(NETWORK_Formal,pstruEventDetails_Formal,pszAppPath_Formal,\
33 pszWritePath_Formal,nVersion_Type,fnPointer);
40_declspec(dllexport)
int fn_NetSim_RIP_Finish()
42 fn_NetSim_RIP_Finish_F();
49_declspec (dllexport)
char *fn_NetSim_RIP_Trace(
int nSubEvent)
51 return (fn_NetSim_RIP_Trace_F(nSubEvent));
56_declspec(dllexport)
int fn_NetSim_RIP_FreePacket(NetSim_PACKET* pstruPacket)
58 return fn_NetSim_RIP_FreePacket_F(pstruPacket);
64_declspec(dllexport)
int fn_NetSim_RIP_CopyPacket(NetSim_PACKET* pstruDestPacket,NetSim_PACKET* pstruSrcPacket)
66 return fn_NetSim_RIP_CopyPacket_F(pstruDestPacket,pstruSrcPacket);
71_declspec(dllexport)
int fn_NetSim_RIP_Metrics(PMETRICSWRITER metricsWriter)
73 return fn_NetSim_RIP_Metrics_F(metricsWriter);
78_declspec(dllexport)
char* fn_NetSim_RIP_ConfigPacketTrace()
85_declspec(dllexport)
char* fn_NetSim_RIP_WritePacketTrace()
95_declspec(dllexport)
int fn_NetSim_RIP_Run()
97 if(pstruEventDetails->pPacket && !fnCheckRoutingPacket())
99 return fnRouter[pstruEventDetails->nProtocolId?pstruEventDetails->nProtocolId%100:pstruEventDetails->pPacket->nControlDataType/100%100]();
102_declspec(dllexport)
int fn_NetSim_RIP_TriggeredUpdate(
struct stru_NetSim_Network *pstruNETWORK,NetSim_EVENTDETAILS *pstruEventDetails)
104 int nLoop1=0,nLink_Id=0;
105 NETSIM_ID nConnectedDevId=0,nDeviceid;
106 NETSIM_ID nConnectedInterfaceId=0;
107 NETSIM_ID nInterfaceId,nLoop=0;
108 NETSIM_ID nInterfaceCount;
109 DEVICE_ROUTER *pstruRouter;
110 RIP_PACKET *pstruRIPPacket = NULL;
111 NetSim_PACKET* pstruControlPacket=NULL;
112 RIP_ROUTING_DATABASE *pstrudatabase;
113 RIP_ENTRY *pstruRIPNewEntry,*pstruRIPCurrentEntry;
114 NETWORK=pstruNETWORK;
115 nDeviceid=pstruEventDetails->nDeviceId;
116 nInterfaceCount=NETWORK->ppstruDeviceList[nDeviceid-1]->nNumOfInterface;
118 for(nLoop=0;nLoop<nInterfaceCount;nLoop++)
120 if(NETWORK->ppstruDeviceList[nDeviceid-1]->ppstruInterfaceList[nLoop]->szAddress &&
121 NETWORK->ppstruDeviceList[nDeviceid-1]->ppstruInterfaceList[nLoop]->nInterfaceType==INTERFACE_WAN_ROUTER)
123 nLink_Id = fn_NetSim_Stack_GetConnectedDevice(nDeviceid,nLoop+1,&nConnectedDevId,&nConnectedInterfaceId);
126 if(NETWORK->ppstruDeviceList[nDeviceid-1]->pstruApplicationLayer)
128 pstruRouter = get_RIP_var(nDeviceid);
129 if(pstruRouter && pstruRouter->RoutingProtocol[nLoop] == APP_PROTOCOL_RIP)
132 pstruRIPPacket=calloc(1,
sizeof(RIP_PACKET));
134 pstruRIPPacket->
nVersion=pstruRouter->uniInteriorRouting.struRIP.n_RIP_Version;
135 pstrudatabase=pstruRouter->pstruRoutingTables->pstruRIP_RoutingTable;
137 while(pstrudatabase!=NULL)
145 if(pstruRIPPacket->pstruRIPEntry)
147 pstruRIPCurrentEntry = pstruRIPPacket->pstruRIPEntry;
148 while(pstruRIPCurrentEntry->pstru_RIP_NextEntry != NULL)
149 pstruRIPCurrentEntry = pstruRIPCurrentEntry->pstru_RIP_NextEntry;
150 pstruRIPCurrentEntry->pstru_RIP_NextEntry = pstruRIPNewEntry;
153 pstruRIPPacket->pstruRIPEntry = pstruRIPNewEntry;
155 pstrudatabase=pstrudatabase->pstru_Router_NextEntry;
157 nInterfaceId=nLoop+1;
159 pstruControlPacket=fn_NetSim_Packet_CreatePacket(APPLICATION_LAYER);
160 pstruControlPacket->nControlDataType=RIP_Packet;
161 pstruControlPacket->nPacketId=0;
162 pstruControlPacket->nPacketType=PacketType_Control;
163 pstruControlPacket->nSourceId=nDeviceid;
164 add_dest_to_packet(pstruControlPacket, nConnectedDevId);
165 pstruControlPacket->nTransmitterId=nDeviceid;
166 pstruControlPacket->nReceiverId=nConnectedDevId;
168 pstruControlPacket->pstruAppData->dArrivalTime=pstruEventDetails->dEventTime;
169 pstruControlPacket->pstruAppData->dEndTime=pstruEventDetails->dEventTime;
170 pstruControlPacket->pstruAppData->dStartTime=pstruEventDetails->dEventTime;
171 pstruControlPacket->pstruAppData->dPayload=RIP_PACKET_SIZE_WITH_HEADER;
172 pstruControlPacket->pstruAppData->dOverhead=0;
173 pstruControlPacket->pstruAppData->dPacketSize=pstruControlPacket->pstruAppData->dPayload+pstruControlPacket->pstruAppData->dOverhead;
174 pstruControlPacket->pstruAppData->nApplicationProtocol=APP_PROTOCOL_RIP;
175 pstruControlPacket->pstruAppData->Packet_AppProtocol=pstruRIPPacket;
177 pstruControlPacket->pstruNetworkData->nNetworkProtocol=NW_PROTOCOL_IPV4;
178 pstruControlPacket->pstruNetworkData->nTTL = 1;
179 pstruControlPacket->pstruNetworkData->szSourceIP=IP_COPY(fn_NetSim_Stack_GetIPAddressAsId(nDeviceid,nInterfaceId));
180 pstruControlPacket->pstruNetworkData->szDestIP=IP_COPY(fn_NetSim_Stack_GetIPAddressAsId(nConnectedDevId,nConnectedInterfaceId));
181 if(!pstruControlPacket->pstruNetworkData->szDestIP)
184 sprintf(str,
"Unable to get the connected device IP address for Router %d Interface %d",nDeviceid,nInterfaceId);
188 pstruControlPacket->pstruTransportData->nSourcePort=RIP_PORT+1;
189 pstruControlPacket->pstruTransportData->nDestinationPort=RIP_PORT;
190 if(NETWORK->ppstruDeviceList[nDeviceid-1]->pstruTransportLayer->isUDP)
191 pstruControlPacket->pstruTransportData->nTransportProtocol=TX_PROTOCOL_UDP;
192 else if(NETWORK->ppstruDeviceList[nDeviceid-1]->pstruTransportLayer->isTCP)
193 pstruControlPacket->pstruTransportData->nTransportProtocol=TX_PROTOCOL_TCP;
195 pstruControlPacket->pstruTransportData->nTransportProtocol=0;
197 if(!fn_NetSim_Socket_GetBufferStatus(pstruRouter->sock))
199 fn_NetSim_Socket_PassPacketToInterface(nDeviceid, pstruControlPacket, pstruRouter->sock);
200 pstruEventDetails->dEventTime=pstruEventDetails->dEventTime;
201 pstruEventDetails->dPacketSize=pstruControlPacket->pstruAppData->dPacketSize;
202 pstruEventDetails->nApplicationId=0;
203 pstruEventDetails->nProtocolId=pstruControlPacket->pstruTransportData->nTransportProtocol;
204 pstruEventDetails->nDeviceId=nDeviceid;
205 pstruEventDetails->nInterfaceId=0;
206 pstruEventDetails->nEventType=TRANSPORT_OUT_EVENT;
207 pstruEventDetails->nSubEventType=0;
208 pstruEventDetails->pPacket=NULL;
209 pstruEventDetails->szOtherDetails = pstruRouter->sock;
210 fnpAddEvent(pstruEventDetails);
214 fn_NetSim_Socket_PassPacketToInterface(nDeviceid, pstruControlPacket, pstruRouter->sock);
223int fn_NetSim_RIP_Run_F()
225 SUB_EVENT nSub_Event_Type;
227 nEventType=pstruEventDetails->nEventType;
229 nSub_Event_Type = pstruEventDetails->nSubEventType;
234 case APPLICATION_IN_EVENT:
235 switch(nSub_Event_Type)
237 case ROUTING_TABLE_UPDATION:
238 fn_NetSim_RIP_DistanceVectorAlgorithm(NETWORK,pstruEventDetails);
240 fn_NetSim_RIPTrace(NETWORK,pstruEventDetails->nDeviceId,1);
244 fn_NetSim_RIP_ReceivingOf_RIP_Message(NETWORK,pstruEventDetails);
249 switch(nSub_Event_Type)
251 case SEND_RIP_UPDATE_PKT:
252 fn_NetSim_RIP_Update_Timer(NETWORK,pstruEventDetails);
255 fn_NetSim_RIP_Timeout_Timer(NETWORK,pstruEventDetails);
257 case RIP_GARBAGE_COLLECTION:
258 fn_NetSim_RIP_Garbage_Collection_Timer(NETWORK,pstruEventDetails);
261 printf(
"\nInvalid sub event");
266 printf(
"\nInvalid event");
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.