16#define _CRT_SECURE_NO_DEPRECATE
32int fn_NetSim_ARP_Request_Timeout(NetSim_EVENTDETAILS *pstruEventDetails,
struct stru_NetSim_Network *NETWORK)
35 NETSIM_ID nInterfaceId;
36 NETSIM_ID nDestinationId,i;
37 NETSIM_IPAddress szDestIPadd;
40 int nDestinationPresentFlag = 0;
42 NetSim_PACKET *pstruTemp_Data;
43 ARP_VARIABLES *pstruArpVariables;
44 ARP_BUFFER *pstruPacketBuffer;
45 ARP_TABLE *pstruTableHead, *pstruCurrentTable;
47 pstruTemp_Data = pstruEventDetails->pPacket;
48 nDeviceId = pstruEventDetails->nDeviceId;
49 nInterfaceId = pstruEventDetails->nInterfaceId;
53 szDestIPadd = IP_COPY(pstruTemp_Data->pstruNetworkData->szNextHopIp);
68 pstruArpVariables = DEVICE_INTERFACE(nDeviceId,nInterfaceId)->ipVar;
69 pstruTableHead = pstruArpVariables->pstruArpTable;
91 pstruCurrentTable = pstruTableHead;
92 while(pstruCurrentTable != 0)
94 if(IP_COMPARE(pstruCurrentTable->
szIPAddress,szDestIPadd)== 0)
96 nDestinationPresentFlag = 1;
102 nDestinationId = fn_NetSim_Stack_GetDeviceId_asIP(pstruEventDetails->pPacket->pstruNetworkData->szNextHopIp,&i);
103 if(!nDestinationPresentFlag)
109 printf(
"\n%s\n",
"ARP---Reply not received with in the ARP_RETRY_INTERVAL, send request once again");
111 pstruEventDetails->nSubEventType = GENERATE_ARP_REQUEST;
112 fnpAddEvent(pstruEventDetails);
116 char ipstr[_NETSIM_IP_LEN];
117 pstruPacketBuffer = pstruArpVariables->pstruPacketBuffer;
118 IP_TO_STR(pstruPacketBuffer->
pstruPacket->pstruNetworkData->szGatewayIP,ipstr);
120 fn_NetSim_Arp_Drop_Buffered_Packet(nDeviceId,nInterfaceId,szDestIPadd,&nPktDropCount);
121 pstruPacketBuffer = pstruArpVariables->pstruPacketBuffer;
130 printf(
"\n%s\n",
"ARP---Request reached the ARP_RETRY_LIMIT, drop the packet");
131 printf(
"ARP---Packets Dropped at\tEventTime:%0.3lf\tSrcIP:%s\tDropCount:%d\n",pstruEventDetails->dEventTime,ipstr,nPktDropCount);
140 fn_NetSim_Packet_FreePacket(pstruTemp_Data);
141 pstruEventDetails->pPacket = NULL;
int * pnArpRequestFlag
Set when generate Request.
int * pnArpRetryCount
To keep track of number of retries.
int nArpRetryLimit
Store the ARP_RETRY_LIMIT from the config file.
ARP_METRICS * pstruArpMetrics
NetSim specific ARP metrics structure.
int nPacketsInBuffer
Number of packets in the buffer.
struct stru_ARP_Table * pstruNextEntry
Next entry pointer.
NETSIM_IPAddress szIPAddress
IP address of the deivce.
NetSim_PACKET * pstruPacket
Store the packet.