20bool fn_NetSim_DSR_AddToSendBuffer(DSR_SEND_BUFFER** sendBuffer,NetSim_PACKET* packet,
double dTime)
22 NETSIM_IPAddress dest = packet->pstruNetworkData->szDestIP;
23 DSR_SEND_BUFFER* temp = *sendBuffer;
27 if(!IP_COMPARE(dest,temp->
target))
32 temp = LIST_NEXT(temp);
35 temp = (DSR_SEND_BUFFER*)SENDBUFFER_ALLOC();
44 NetSim_PACKET* temp_packet=temp->
packet;
45 while(temp_packet->pstruNextPacket)
46 temp_packet = temp_packet->pstruNextPacket;
47 temp_packet->pstruNextPacket = packet;
50 LIST_ADD_LAST((
void**)sendBuffer,temp);
56void fn_NetSim_DSR_EmptySendBuffer(NETSIM_IPAddress targetAddress,NETSIM_ID nDeviceId)
58 DSR_SEND_BUFFER* sendBuffer=DSR_DEV_VAR(nDeviceId)->pstruSendBuffer;
61 if(!IP_COMPARE(sendBuffer->
target,targetAddress))
65 NetSim_PACKET* temp = sendBuffer->
packet;
66 sendBuffer->
packet = temp->pstruNextPacket;
67 temp->pstruNextPacket = NULL;
68 fn_NetSim_Packet_FreePacket(temp);
70 DSR_DEV_VAR(nDeviceId)->dsrMetrics.packetDropped++;
72 IP_FREE(sendBuffer->
target);
73 LIST_FREE(&DSR_DEV_VAR(nDeviceId)->pstruSendBuffer,sendBuffer);
76 sendBuffer = LIST_NEXT(sendBuffer);
83void fn_NetSim_DSR_CheckSendBuffer(NETSIM_ID nDeviceId,
double dTime)
85 DSR_SEND_BUFFER* sendBuffer=DSR_DEV_VAR(nDeviceId)->pstruSendBuffer;
86 DSR_ROUTE_CACHE* routeCache=DSR_DEV_VAR(nDeviceId)->pstruRouteCache;
90 NETSIM_IPAddress target = sendBuffer->
target;
94 for(nLoop=0;nLoop<routeCache->nLength;nLoop++)
96 if(!IP_COMPARE(target,routeCache->address[nLoop]))
99 DSR_TRANSMIT_SEND_BUFFER(sendBuffer,
105 routeCache = LIST_NEXT(routeCache);
109 DSR_SEND_BUFFER* temp = sendBuffer;
110 sendBuffer=LIST_NEXT(sendBuffer);
111 DSR_EMPTY_SEND_BUFFER(temp->
target,nDeviceId);
114 sendBuffer = LIST_NEXT(sendBuffer);
120int fn_NetSim_DSR_TransmitPacketFromSendBuffer(DSR_SEND_BUFFER* sendBuffer,
124 NetSim_EVENTDETAILS eventDetails;
125 memset(&eventDetails,0,
sizeof*(&eventDetails));
128 NetSim_PACKET* packet = sendBuffer->
packet;
129 sendBuffer->
packet = packet->pstruNextPacket;
130 packet->pstruNextPacket = NULL;
131 eventDetails.dEventTime = dTime;
132 eventDetails.dPacketSize = fnGetPacketSize(packet);
133 if(packet->pstruAppData)
135 eventDetails.nApplicationId = packet->pstruAppData->nApplicationId;
136 eventDetails.nSegmentId = packet->pstruAppData->nSegmentId;
140 eventDetails.nApplicationId = 0;
141 eventDetails.nSegmentId = 0;
143 eventDetails.nDeviceId = nDeviceId;
144 eventDetails.nDeviceType = NETWORK->ppstruDeviceList[nDeviceId-1]->nDeviceType;
145 eventDetails.nEventType = NETWORK_OUT_EVENT;
146 eventDetails.nInterfaceId = 1;
147 eventDetails.nPacketId = packet->nPacketId;
148 eventDetails.nProtocolId = fn_NetSim_Stack_GetNWProtocol(nDeviceId);
149 eventDetails.nSubEventType = 0;
150 eventDetails.pPacket = packet;
151 fnpAddEvent(&eventDetails);
NETSIM_IPAddress target
Target IP address.
NetSim_PACKET * packet
List of packets to a particular Dest IP.