36 void(*callBack)(NetSim_PACKET*);
38}ICMPDATA, *ptrICMPDATA;
39_declspec(dllexport) NetSim_PACKET* fn_NetSim_IP_ICMP_GenerateEchoRequest(NETSIM_ID source,
41 NETSIM_IPAddress srcIP,
42 NETSIM_IPAddress destIP,
47 void(*callback)(NetSim_PACKET*));
49_declspec(dllexport)
int fn_NetSim_IP_ICMP_Init()
52 for(i=0;i<NETWORK->nDeviceCount;i++)
54 if(NETWORK->ppstruDeviceList[i]->pstruNetworkLayer)
56 IP_DEVVAR* devVar=NETWORK->ppstruDeviceList[i]->pstruNetworkLayer->ipVar;
61 if(devVar && devVar->nICMPPollingTime)
64 memset(pstruEventDetails,0,
sizeof* pstruEventDetails);
65 pstruEventDetails->dEventTime = devVar->nICMPPollingTime*SECOND;
66 pstruEventDetails->nDeviceId = NETWORK->ppstruDeviceList[i]->nDeviceId;
67 pstruEventDetails->nDeviceType = NETWORK->ppstruDeviceList[i]->nDeviceType;
68 pstruEventDetails->nEventType = TIMER_EVENT;
69 pstruEventDetails->nProtocolId = NW_PROTOCOL_IPV4;
70 pstruEventDetails->nSubEventType = EVENT_ICMP_POLL;
71 fnpAddEvent(pstruEventDetails);
73 if(devVar && devVar->nRouterAdvertisementFlag)
76 memset(pstruEventDetails,0,
sizeof* pstruEventDetails);
77 pstruEventDetails->dEventTime = 0;
78 pstruEventDetails->nDeviceId = NETWORK->ppstruDeviceList[i]->nDeviceId;
79 pstruEventDetails->nDeviceType = NETWORK->ppstruDeviceList[i]->nDeviceType;
80 pstruEventDetails->nEventType = TIMER_EVENT;
81 pstruEventDetails->nProtocolId = NW_PROTOCOL_IPV4;
82 pstruEventDetails->nSubEventType = EVENT_ADVERTISE_ROUTER;
83 fnpAddEvent(pstruEventDetails);
98_declspec(dllexport)
int fn_NetSim_IP_ICMP_POLL()
101 double time=pstruEventDetails->dEventTime;
102 IP_DEVVAR* devVar=NETWORK->ppstruDeviceList[pstruEventDetails->nDeviceId-1]->pstruNetworkLayer->ipVar;
104 pstruEventDetails->dEventTime += devVar->nICMPPollingTime*SECOND;
105 fnpAddEvent(pstruEventDetails);
106 for(i=0;i<devVar->nGatewayCount;i++)
108 NetSim_PACKET* packet;
109 if(devVar->nGatewayState[i] == GATEWAYSTATE_NOTIFICATION_PENDING)
110 devVar->nGatewayState[i] = GATEWAYSTATE_DOWN;
111 else if(devVar->nGatewayState[i] == GATEWAYSTATE_UP)
112 devVar->nGatewayState[i] = GATEWAYSTATE_NOTIFICATION_PENDING;
114 packet = fn_NetSim_IP_ICMP_GenerateEchoRequest(pstruEventDetails->nDeviceId,
115 devVar->nGatewayId[i],
116 NETWORK->ppstruDeviceList[pstruEventDetails->nDeviceId - 1]->ppstruInterfaceList[devVar->nInterfaceId[i] - 1]->szAddress,
117 devVar->GatewayIPAddress[i],
118 pstruEventDetails->dEventTime,
124 pstruEventDetails->dEventTime=time;
125 pstruEventDetails->dPacketSize = fnGetPacketSize(packet);
126 pstruEventDetails->nEventType = NETWORK_OUT_EVENT;
127 pstruEventDetails->nSubEventType = 0;
128 pstruEventDetails->pPacket = packet;
129 fnpAddEvent(pstruEventDetails);
135_declspec(dllexport) NetSim_PACKET* fn_NetSim_IP_ICMP_GenerateEchoRequest(NETSIM_ID source,
137 NETSIM_IPAddress srcIP,
138 NETSIM_IPAddress destIP,
143 void(*callback)(NetSim_PACKET*))
145 static UINT64 seqNumber = 1;
146 ICMP_ECHO* echo = calloc(1,
sizeof* echo);
147 NetSim_PACKET* packet = fn_NetSim_Packet_CreatePacket(NETWORK_LAYER);
148 add_dest_to_packet(packet, dest);
149 packet->nControlDataType = PACKET_ICMP_ECHORequest;
150 strcpy(packet->szPacketType,
"ICMP_EchoRequest");
151 packet->nPacketId = 0;
152 packet->nPacketPriority = Priority_Low;
153 packet->nPacketType = PacketType_Control;
154 packet->nSourceId = source;
155 packet->pstruNetworkData->dArrivalTime = time;
156 packet->pstruNetworkData->dStartTime = time;
157 packet->pstruNetworkData->dEndTime = time;
158 packet->pstruNetworkData->dOverhead = 8;
159 packet->pstruNetworkData->dPayload = size;
160 packet->pstruNetworkData->dPacketSize = 8 + (double)size;
161 packet->pstruNetworkData->nNetworkProtocol = NW_PROTOCOL_IPV4;
162 packet->pstruNetworkData->nTTL = ttl + 1;
163 packet->pstruNetworkData->szDestIP = IP_COPY(destIP);
164 packet->pstruNetworkData->szSourceIP = IP_COPY(srcIP);
165 packet->pstruNetworkData->Packet_NetworkProtocol = echo;
166 packet->pstruNetworkData->IPProtocol = IPPROTOCOL_ICMP;
172 ptrICMPDATA ic = calloc(1,
sizeof* ic);
173 ic->callBack = callback;
181_declspec(dllexport)
int fn_NetSim_IP_ICMP_EchoRequest()
184 NetSim_PACKET* request = pstruEventDetails->pPacket;
185 NetSim_PACKET* reply = fn_NetSim_Packet_CreatePacket(NETWORK_LAYER);
186 ICMP_ECHO* echo = calloc(1,
sizeof* echo);
187 reply->nControlDataType = PACKET_ICMP_ECHOReply;
188 strcpy(reply->szPacketType,
"ICMP_EchoReply");
189 add_dest_to_packet(reply, request->nSourceId);
190 reply->nPacketType = PacketType_Control;
191 reply->nSourceId = pstruEventDetails->nDeviceId;
192 reply->pstruNetworkData->dArrivalTime = pstruEventDetails->dEventTime;
193 reply->pstruNetworkData->dEndTime = pstruEventDetails->dEventTime;
194 reply->pstruNetworkData->dOverhead = 8;
195 reply->pstruNetworkData->dPayload = request->pstruNetworkData->dPayload;
196 reply->pstruNetworkData->dPacketSize = 8+request->pstruNetworkData->dPayload;
197 reply->pstruNetworkData->dStartTime = pstruEventDetails->dEventTime;
198 reply->pstruNetworkData->nNetworkProtocol = NW_PROTOCOL_IPV4;
199 reply->pstruNetworkData->nTTL = 255;
200 reply->pstruNetworkData->Packet_NetworkProtocol = echo;
201 reply->pstruNetworkData->szDestIP=IP_COPY(request->pstruNetworkData->szSourceIP);
202 reply->pstruNetworkData->szSourceIP=IP_COPY(request->pstruNetworkData->szDestIP);
203 reply->pstruNetworkData->IPProtocol = IPPROTOCOL_ICMP;
205 echo->Data = ((ICMP_ECHO*)request->pstruNetworkData->Packet_NetworkProtocol)->Data;
206 echo->
SequenceNumber = ((ICMP_ECHO*)request->pstruNetworkData->Packet_NetworkProtocol)->SequenceNumber;
207 pstruEventDetails->pPacket=reply;
208 pstruEventDetails->nEventType = NETWORK_OUT_EVENT;
209 fnpAddEvent(pstruEventDetails);
211 fn_NetSim_Packet_FreePacket(request);
216_declspec(dllexport)
int fn_NetSim_IP_ICMP_EchoReply()
218 IP_DEVVAR* devVar = DEVICE_NWLAYER(pstruEventDetails->nDeviceId)->ipVar;
220 for(i=0;i<devVar->nGatewayCount;i++)
222 if(!IP_COMPARE(devVar->GatewayIPAddress[i],pstruEventDetails->pPacket->pstruNetworkData->szSourceIP))
224 devVar->nGatewayState[i] = GATEWAYSTATE_UP;
228 ICMP_ECHO* echo = pstruEventDetails->pPacket->pstruNetworkData->Packet_NetworkProtocol;
231 ptrICMPDATA ic = echo->Data;
233 ic->callBack(pstruEventDetails->pPacket);
236 fn_NetSim_Packet_FreePacket(pstruEventDetails->pPacket);
237 pstruEventDetails->pPacket = NULL;
241_declspec(dllexport)
int ICMP_CHECKSTATE(NETSIM_IPAddress ip)
243 IP_DEVVAR* devVar = DEVICE_NWLAYER(pstruEventDetails->nDeviceId)->ipVar;
245 for(i=0;ip && i<devVar->nGatewayCount;i++)
246 if(!IP_COMPARE(devVar->GatewayIPAddress[i],ip))
248 if(devVar->nGatewayState[i] == GATEWAYSTATE_DOWN)
254unsigned long advertiseseed1=12345678;
255unsigned long advertiseseed2=23456789;
276_declspec(dllexport)
int fn_NetSim_IP_ICMP_AdvertiseRouter()
278 ICMP_RouterAdvertisement* adver=calloc(1,
sizeof* adver);
279 double time=pstruEventDetails->dEventTime;
280 NetSim_PACKET* packet;
281 NETSIM_ID nDeviceId=pstruEventDetails->nDeviceId;
283 IP_DEVVAR* devVar = DEVICE_NWLAYER(nDeviceId)->ipVar;
285 pstruEventDetails->dEventTime += (fn_NetSim_Utilities_GenerateRandomNo(&advertiseseed1,&advertiseseed2)/NETSIM_RAND_MAX*(devVar->nRouterAdverMaxInterval-devVar->nRouterAdverMinInterval)+devVar->nRouterAdverMinInterval)*SECOND;
286 fnpAddEvent(pstruEventDetails);
288 packet = fn_NetSim_Packet_CreatePacket(NETWORK_LAYER);
289 packet->dEventTime = time;
290 packet->nControlDataType = PACKET_ROUTER_ADVERTISEMENT;
291 strcpy(packet->szPacketType,
"ICMP_RouterAdvertisement");
292 add_dest_to_packet(packet, 0);
293 packet->nPacketType = PacketType_Control;
294 packet->nReceiverId=0;
295 packet->nSourceId=pstruEventDetails->nDeviceId;
296 packet->nTransmitterId=pstruEventDetails->nDeviceId;
297 packet->pstruNetworkData->dArrivalTime =time;
298 packet->pstruNetworkData->dEndTime=time;
299 packet->pstruNetworkData->dStartTime=time;
300 packet->pstruNetworkData->dOverhead=16;
301 packet->pstruNetworkData->dPacketSize=16;
302 packet->pstruNetworkData->dPayload=0;
303 packet->pstruNetworkData->nNetworkProtocol=NW_PROTOCOL_IPV4;
304 packet->pstruNetworkData->nTTL=2;
305 packet->pstruNetworkData->szDestIP=STR_TO_IP4(
"255.255.255.255");
306 packet->pstruNetworkData->Packet_NetworkProtocol=adver;
307 packet->pstruNetworkData->IPProtocol = IPPROTOCOL_ICMP;
309 adver->AddrEntrySize=2;
310 adver->Lifetime = devVar->nRouterAdverLifeTime;
312 for(i=0;i<NETWORK->ppstruDeviceList[nDeviceId-1]->nNumOfInterface;i++)
314 if(NETWORK->ppstruDeviceList[nDeviceId-1]->ppstruInterfaceList[i])
316 if(NETWORK->ppstruDeviceList[nDeviceId-1]->ppstruInterfaceList[i]->nInterfaceType && (NETWORK->ppstruDeviceList[nDeviceId-1]->ppstruInterfaceList[i]->nInterfaceType != INTERFACE_WAN_ROUTER && NETWORK->ppstruDeviceList[nDeviceId-1]->ppstruInterfaceList[i]->nInterfaceType != INTERFACE_VIRTUAL))
319 adver->RouterAddress = realloc(adver->RouterAddress,(
sizeof* adver->RouterAddress)*adver->NumAddrs);
320 adver->RouterAddress[adver->NumAddrs-1] = IP_COPY(DEVICE_NWADDRESS(nDeviceId,i+1));
324 for(i=0;i<NETWORK->ppstruDeviceList[nDeviceId-1]->nNumOfInterface;i++)
326 if(NETWORK->ppstruDeviceList[nDeviceId-1]->ppstruInterfaceList[i])
328 if(NETWORK->ppstruDeviceList[nDeviceId-1]->ppstruInterfaceList[i]->nInterfaceType && (NETWORK->ppstruDeviceList[nDeviceId-1]->ppstruInterfaceList[i]->nInterfaceType != INTERFACE_WAN_ROUTER && NETWORK->ppstruDeviceList[nDeviceId-1]->ppstruInterfaceList[i]->nInterfaceType != INTERFACE_VIRTUAL))
330 NetSim_PACKET* temp=fn_NetSim_Packet_CopyPacket(packet);
332 temp->pstruNetworkData->szGatewayIP = IP_COPY(DEVICE_NWADDRESS(nDeviceId,i+1));
333 temp->pstruNetworkData->szSourceIP = IP_COPY(DEVICE_NWADDRESS(nDeviceId,i+1));
334 temp->pstruNetworkData->szNextHopIp = temp->pstruNetworkData->szDestIP;
335 pstruEventDetails->dEventTime=time;
336 pstruEventDetails->nInterfaceId=i+1;
337 pstruEventDetails->dPacketSize=16;
338 pstruEventDetails->nEventType=NETWORK_OUT_EVENT;
339 pstruEventDetails->nSubEventType=0;
340 pstruEventDetails->pPacket=temp;
341 fnpAddEvent(pstruEventDetails);
371_declspec(dllexport)
int fn_NetSim_IP_ICMP_ProcessRouterAdvertisement()
374 NETSIM_ID nDeviceId=pstruEventDetails->nDeviceId;
375 ptrIP_ROUTINGTABLE table = IP_TABLE_GET(nDeviceId);
376 NetSim_PACKET* packet = pstruEventDetails->pPacket;
377 ICMP_RouterAdvertisement* adver=PACKET_NWPROTOCOLDATA(packet);
379 NETSIM_IPAddress src=PACKET_NWDATA(packet)->szSourceIP;
380 NETSIM_IPAddress ip=STR_TO_IP4(
"0.0.0.0");
384 if(!IP_COMPARE(src,table->gateway) && !IP_COMPARE(table->networkDestination,ip) && !IP_COMPARE(table->netMask,ip))
390 table=LIST_NEXT(table);
395 iptable_add(IP_WRAPPER_GET(nDeviceId),
396 ip, ip, 0, src, 1, &DEVICE_NWADDRESS(nDeviceId, pstruEventDetails->nInterfaceId),
397 &pstruEventDetails->nInterfaceId, DEFAULT_METRIC,
"ICMP");
400 fn_NetSim_Packet_FreePacket(packet);
401 pstruEventDetails->pPacket = NULL;
427_declspec(dllexport)
int fn_NetSim_IP_ICMP_GenerateDstUnreachableMsg()
429 NetSim_PACKET* orgPacket=pstruEventDetails->pPacket;
430 if (isMulticastPacket(orgPacket))
433 NetSim_PACKET* packet = fn_NetSim_Packet_CreatePacket(NETWORK_LAYER);
434 ICMP_DestinationUnreachableMessage* message=calloc(1,
sizeof* message);
438 packet->pstruNetworkData->szDestIP = IP_COPY(orgPacket->pstruNetworkData->szSourceIP);
439 packet->nControlDataType = PACKET_ICMP_DstUnreachableMsg;
440 strcpy(packet->szPacketType,
"ICMP_DstUnreachableMsg");
441 add_dest_to_packet(packet, orgPacket->nSourceId);
442 packet->nPacketType=PacketType_Control;
443 packet->nSourceId=pstruEventDetails->nDeviceId;
444 packet->nTransmitterId=pstruEventDetails->nDeviceId;
445 packet->pstruNetworkData->dArrivalTime=pstruEventDetails->dEventTime;
446 packet->pstruNetworkData->dEndTime=pstruEventDetails->dEventTime;
447 packet->pstruNetworkData->dStartTime=pstruEventDetails->dEventTime;
448 packet->pstruNetworkData->dOverhead=24+IPV4_HEADER_SIZE;
449 packet->pstruNetworkData->dPacketSize=24+IPV4_HEADER_SIZE;
450 packet->pstruNetworkData->dPayload=0;
451 packet->pstruNetworkData->nNetworkProtocol=NW_PROTOCOL_IPV4;
452 packet->pstruNetworkData->nTTL=255;
453 packet->pstruNetworkData->Packet_NetworkProtocol=message;
454 packet->pstruNetworkData->szSourceIP=fn_NetSim_Stack_GetFirstIPAddressAsId(pstruEventDetails->nDeviceId,0);
456 packet->pstruNetworkData->szGatewayIP = IP_COPY(DEVICE_NWADDRESS(pstruEventDetails->nDeviceId,
457 pstruEventDetails->nInterfaceId));
459 packet->pstruNetworkData->IPProtocol = IPPROTOCOL_ICMP;
462 pstruEventDetails->dPacketSize=24+IPV4_HEADER_SIZE;
463 pstruEventDetails->nApplicationId=0;
464 pstruEventDetails->nEventType=NETWORK_IN_EVENT;
465 pstruEventDetails->nInterfaceId=1;
466 pstruEventDetails->nPacketId=0;
467 pstruEventDetails->nProtocolId=NW_PROTOCOL_IPV4;
468 pstruEventDetails->nSegmentId=0;
469 pstruEventDetails->nSubEventType=0;
470 pstruEventDetails->pPacket=packet;
471 fnpAddEvent(pstruEventDetails);
497_declspec(dllexport)
int fn_NetSim_IP_ICMP_ProcessDestUnreachableMsg()
499 NetSim_PACKET* packet = pstruEventDetails->pPacket;
500 ICMP_DestinationUnreachableMessage* message=packet->pstruNetworkData->Packet_NetworkProtocol;
503 iptable_delete(IP_WRAPPER_GET(pstruEventDetails->nDeviceId),
504 p->pstruNetworkData->szDestIP, p->pstruNetworkData->szSourceIP,NULL);
506 fn_NetSim_Stack_CallICMPErrorFun(message->
InternetHeader,pstruEventDetails->nDeviceId,3);
507 if(get_first_dest_from_packet(pstruEventDetails->pPacket) == pstruEventDetails->nDeviceId)
510 pstruEventDetails->pPacket=NULL;
511 fn_NetSim_Packet_FreePacket(p);
513 fn_NetSim_Packet_FreePacket(packet);
518void ICMP_copyPacket(NetSim_PACKET* d, NetSim_PACKET* s)
520 switch(s->nControlDataType)
522 case PACKET_ICMP_DstUnreachableMsg:
524 ICMP_DestinationUnreachableMessage* sm=(ICMP_DestinationUnreachableMessage*)s->pstruNetworkData->Packet_NetworkProtocol;
525 ICMP_DestinationUnreachableMessage* dm = (ICMP_DestinationUnreachableMessage*)calloc(1,
sizeof* dm);
526 memcpy(dm,sm,
sizeof* dm);
527 d->pstruNetworkData->Packet_NetworkProtocol=dm;
533void process_icmp_packet()
535 NETSIM_ID d = pstruEventDetails->nDeviceId;
536 NetSim_PACKET* packet = pstruEventDetails->pPacket;
537 IP_DEVVAR* ipVar = GET_IP_DEVVAR(d);
538 if (ipVar && !ipVar->isICMP)
540 fnNetSimError(
"ICMP packet %d is arrives to device %d from device %d.\n ICMP is not configured in this device.\n",
541 packet->nControlDataType,
547 switch (packet->nControlDataType)
549 case PACKET_ICMP_ECHORequest:
550 fn_NetSim_IP_ICMP_EchoRequest();
552 case PACKET_ICMP_ECHOReply:
553 fn_NetSim_IP_ICMP_EchoReply();
555 case PACKET_ROUTER_ADVERTISEMENT:
556 fn_NetSim_IP_ICMP_ProcessRouterAdvertisement();
558 case PACKET_ICMP_DstUnreachableMsg:
559 fn_NetSim_IP_ICMP_ProcessDestUnreachableMsg();
562 fnNetSimError(
"Unknown ICMP packet %d in %s\n",
563 packet->nControlDataType,
573 NETSIM_IPAddress srcIP;
574 NETSIM_IPAddress destIP;
576 bool(*ResponseHandler)(
void* arg,
char* msg,
bool isMore);
583}PINGHANDLER, *ptrPINGHANDLER;
585void IP_find_best_IP(NETSIM_ID s, NETSIM_ID d,
586 NETSIM_IPAddress* sIP,
587 NETSIM_IPAddress* dIP)
593 *sIP = DEVICE_NWADDRESS(s, 1);
594 *dIP = DEVICE_NWADDRESS(d, 1);
596 for (si = 1; si <= DEVICE(s)->nNumOfInterface; si++)
598 NETSIM_IPAddress sip = DEVICE_NWADDRESS(s, si);
599 if (DEVICE_INTERFACE(s, si)->nInterfaceType == INTERFACE_WAN_ROUTER)
601 for (di = 1; di <= DEVICE(d)->nNumOfInterface; di++)
603 NETSIM_IPAddress dip = DEVICE_NWADDRESS(d, di);
604 if (DEVICE_INTERFACE(d, di)->nInterfaceType == INTERFACE_WAN_ROUTER)
606 NETSIM_IPAddress dnw = IP_NETWORK_ADDRESS_IPV4(dip, DEVICE_SUBNETMASK(d, di));
607 NETSIM_IPAddress snw = IP_NETWORK_ADDRESS_IPV4(sip, DEVICE_SUBNETMASK(s, si));
608 if (!IP_COMPARE4(dnw, snw))
618void replyRecevied(NetSim_PACKET* packet)
620 ICMP_ECHO* echo = packet->pstruNetworkData->Packet_NetworkProtocol;
621 ptrICMPDATA data = echo->Data;
622 ptrPINGHANDLER ping = data->payload;
625 ping->replyRecvCount++;
626 ping->retryCount = 0;
628 sprintf(msg,
"Reply from %s: bytes %d time=%dus TTL=%d\n",
629 packet->pstruNetworkData->szSourceIP->str_ip,
630 (
int)packet->pstruNetworkData->dPayload,
631 (
int)(pstruEventDetails->dEventTime - ping->echoSendTime),
633 ping->ResponseHandler(ping->arg, msg, ping->count != ping->currentCount);
637_declspec(dllexport)
void* ICMP_StartPingRequest(NETSIM_ID src,
640 bool(*resp)(
void*,
char*,
bool),
643 ptrPINGHANDLER handle = calloc(1,
sizeof* handle);
644 handle->count = count;
646 handle->ResponseHandler = resp;
655 NetSim_EVENTDETAILS pevent;
656 memset(&pevent, 0,
sizeof pevent);
657 pevent.dEventTime = ldEventTime + 1000;
658 pevent.nDeviceId = src;
659 pevent.nDeviceType = DEVICE_TYPE(src);
660 pevent.nEventType = TIMER_EVENT;
661 pevent.nProtocolId = NW_PROTOCOL_IPV4;
662 pevent.nSubEventType = EVENT_ICMP_SEND_ECHO;
663 pevent.szOtherDetails = handle;
664 fnpAddEvent(&pevent);
668void icmp_send_echo_request()
670 ptrPINGHANDLER handle = pstruEventDetails->szOtherDetails;
671 if (handle->currentCount == handle->replyRecvCount)
672 goto SEND_ECHO_REQUEST;
675 if (handle->retryCount == ICMP_MAX_RETRY)
677 handle->seqNumber = 0;
678 handle->replyRecvCount++;
679 handle->ResponseHandler(handle->arg,
"Request timed out!\n", handle->count != handle->currentCount);
680 if (handle->currentCount != handle->count)
681 goto SEND_ECHO_REQUEST;
687 handle->retryCount++;
688 goto ADD_NEXT_SEND_REQUEST;
693 if (handle->currentCount != handle->count)
695 handle->retryCount = 0;
696 handle->currentCount++;
697 handle->echoSendTime = pstruEventDetails->dEventTime;
698 NetSim_PACKET* packet = fn_NetSim_IP_ICMP_GenerateEchoRequest(handle->src,
702 pstruEventDetails->dEventTime,
707 handle->seqNumber = ((ICMP_ECHO*)(packet->pstruNetworkData->Packet_NetworkProtocol))->SequenceNumber;
709 NetSim_EVENTDETAILS pevent;
710 memset(&pevent, 0,
sizeof pevent);
711 pevent.dEventTime = pstruEventDetails->dEventTime;
712 pevent.dPacketSize = fnGetPacketSize(packet);
713 pevent.nDeviceId = pstruEventDetails->nDeviceId;
714 pevent.nDeviceType = pstruEventDetails->nDeviceType;
715 pevent.nEventType = NETWORK_OUT_EVENT;
716 pevent.nProtocolId = NW_PROTOCOL_IPV4;
717 pevent.pPacket = packet;
718 fnpAddEvent(&pevent);
721ADD_NEXT_SEND_REQUEST:
723 if (handle->currentCount != handle->count + 2)
725 pstruEventDetails->dEventTime += ICMP_SEND_TIME;
726 fnpAddEvent(pstruEventDetails);
unsigned short int SequenceNumber
If code = 0, a sequence number to aid in matching echos and replies, may be zero.