24#define _CRT_SECURE_NO_DEPRECATE
38int fn_NetSim_Update_ARP_Table_ForwardPacket(NetSim_EVENTDETAILS *pstruEventDetails,
struct stru_NetSim_Network *NETWORK)
41 NETSIM_ID nInterfaceId;
42 NETSIM_ID nDestinationId;
44 PNETSIM_MACADDRESS szTempMAC;
45 NETSIM_IPAddress szSrcIPadd;
46 NETSIM_IPAddress szDestIPadd;
48 NetSim_PACKET *pstruTemp_Data, *pstruTempBufferData;
49 ARP_PACKET *pstruPacketArp;
50 ARP_TABLE *pstruTableHead;
51 ARP_VARIABLES *pstruArpVariables;
52 ARP_BUFFER *pstruPacketBuffer, *pstruPrevBuffer,*tempBuffer=NULL;
55 nInterfaceId = pstruEventDetails->nInterfaceId;
56 nDeviceId = pstruEventDetails->nDeviceId;
58 pstruArpVariables = DEVICE_INTERFACE(nDeviceId,nInterfaceId)->ipVar;
59 pstruTableHead = pstruArpVariables->pstruArpTable;
61 pstruTemp_Data =pstruEventDetails->pPacket;
63 pstruPacketArp = pstruTemp_Data->pstruNetworkData->Packet_NetworkProtocol;
64 szSrcIPadd = IP_COPY(pstruPacketArp->
sz_ar$spa);
68 fn_NetSim_Add_IP_MAC_AddressTo_ARP_Table(&pstruTableHead,szSrcIPadd,szTempMAC,nType);
72 printf(
"ARP---ARP_ReplyGot\tEventTime:%0.3lf\tSrcIP:%s\tDestIP:%s\tMAC_Add:%s\n",pstruEventDetails->dEventTime,
75 szTempMAC->szmacaddress);
78 nDeviceId = pstruEventDetails->nDeviceId;
79 pstruPacketBuffer = pstruArpVariables->pstruPacketBuffer;
80 pstruPrevBuffer = pstruArpVariables->pstruPacketBuffer;
81 while(pstruPacketBuffer)
83 if((IP_COMPARE(pstruPacketBuffer->
szDestAdd,szSrcIPadd) == 0))
85 pstruTempBufferData = pstruPacketBuffer->
pstruPacket;
88 pstruTempBufferData->pstruMacData->szDestMac = szTempMAC;
89 nDeviceId = pstruEventDetails->nDeviceId;
90 pstruTempBufferData->pstruMacData->szSourceMac = DEVICE_INTERFACE(nDeviceId,nInterfaceId)->pstruMACLayer->szMacAddress;
92 if(!fn_NetSim_GetBufferStatus(DEVICE_INTERFACE(nDeviceId,nInterfaceId)->pstruAccessInterface->pstruAccessBuffer))
94 pstruEventDetails->nSubEventType = 0;
95 pstruEventDetails->dPacketSize = pstruTempBufferData->pstruNetworkData->dPacketSize;
96 if(pstruTempBufferData->pstruAppData)
98 pstruEventDetails->nApplicationId = pstruTempBufferData->pstruAppData->nApplicationId;
99 pstruEventDetails->nSegmentId = pstruTempBufferData->pstruAppData->nSegmentId;
103 pstruEventDetails->nApplicationId = 0;
104 pstruEventDetails->nSegmentId = 0;
106 pstruEventDetails->nInterfaceId = nInterfaceId;
107 pstruEventDetails->nProtocolId = fn_NetSim_Stack_GetMacProtocol(nDeviceId,nInterfaceId);
108 pstruEventDetails->nPacketId = pstruTempBufferData->nPacketId;
109 pstruEventDetails->nEventType=MAC_OUT_EVENT;
110 pstruEventDetails->pPacket = NULL;
111 fnpAddEvent( pstruEventDetails);
113 fn_NetSim_Packet_AddPacketToList(DEVICE_INTERFACE(nDeviceId,nInterfaceId)->pstruAccessInterface->pstruAccessBuffer,pstruTempBufferData,0);
115 if(pstruArpVariables->pstruPacketBuffer == pstruPacketBuffer)
116 pstruArpVariables->pstruPacketBuffer = pstruPacketBuffer->pstruNextBuffer;
117 pstruPacketBuffer = pstruPacketBuffer->pstruNextBuffer;
119 fnpFreeMemory(pstruPrevBuffer);
121 tempBuffer->pstruNextBuffer = pstruPacketBuffer;
122 pstruPrevBuffer = pstruPacketBuffer;
126 tempBuffer = pstruPrevBuffer;
127 pstruPacketBuffer=pstruPacketBuffer->pstruNextBuffer;
128 pstruPrevBuffer = pstruPacketBuffer;
131 nDestinationId = pstruTemp_Data->nSourceId;
140 fn_NetSim_Packet_FreePacket(pstruTemp_Data);
141 pstruTemp_Data = NULL;
142 pstruEventDetails->pPacket = NULL;
int * pnArpRequestFlag
Set when generate Request.
ARP_METRICS * pstruArpMetrics
NetSim specific ARP metrics structure.
int * pnArpReplyFlag
Set when receive the Reply.
int nPacketsInBuffer
Number of packets in the buffer.
int nArpReplyReceivedCount
Number of replies received from destination.
NETSIM_IPAddress sz_ar$spa
Protocol address of the sender.
PNETSIM_MACADDRESS sz_ar$sha
Hardware address of the sender.
NETSIM_IPAddress sz_ar$tpa
Protocol address of target.
NETSIM_IPAddress szDestAdd
Store the destination IP address.
NetSim_PACKET * pstruPacket
Store the packet.