20int fn_NetSim_DSR_AddSourceRouteOption(NetSim_PACKET* packet,DSR_ROUTE_CACHE* cache)
24 DSR_OPTION_HEADER* option;
25 DSR_SOURCE_ROUTE_OPTION* srcRouteOption;
26 option = (DSR_OPTION_HEADER*)packet->pstruNetworkData->Packet_RoutingProtocol;
27 if(option && option->optType == optType_SourceRoute)
32 option = calloc(1,
sizeof* option);
33 srcRouteOption=calloc(1,
sizeof* srcRouteOption);
34 option->options = srcRouteOption;
35 option->nNextHeader = NO_NEXT_HEADER;
36 option->optType = optType_SourceRoute;
37 srcRouteOption->F = cache->F;
38 srcRouteOption->L = cache->L;
39 srcRouteOption->nSalvage = 0;
40 srcRouteOption->nOptionType = optType_SourceRoute;
41 srcRouteOption->nReserved = 0;
42 length = fn_NetSim_DSR_FillAddress(srcRouteOption,cache,dsr_get_curr_ip(),packet->pstruNetworkData->szDestIP);
43 srcRouteOption->nSegsLeft = length;
44 srcRouteOption->nOptDataLen = length*4+2;
45 packet->pstruNetworkData->Packet_RoutingProtocol = option;
46 packet->pstruNetworkData->nRoutingProtocol = NW_PROTOCOL_DSR;
47 option->nPayloadLength = DSR_SOURCEROUTE_SIZE_FIXED+length*4;
48 packet->pstruNetworkData->dOverhead = DSR_OPTION_HEADER_SIZE+option->nPayloadLength;
49 if(packet->pstruTransportData)
50 packet->pstruNetworkData->dPayload = packet->pstruTransportData->dPacketSize;
51 packet->pstruNetworkData->dPacketSize = packet->pstruNetworkData->dOverhead +
52 packet->pstruNetworkData->dPayload;
59int fn_NetSim_DSR_ProcessSourceRouteOption(NetSim_EVENTDETAILS* pstruEventDetails)
61 NetSim_PACKET* packet = pstruEventDetails->pPacket;
62 DSR_OPTION_HEADER* option;
63 DSR_SOURCE_ROUTE_OPTION* srcRouteOption;
64 option = (DSR_OPTION_HEADER*)packet->pstruNetworkData->Packet_RoutingProtocol;
67 if(option->ackRequestOption)
68 DSR_PROCESS_ACK_REQUEST(packet);
69 if(option && option->optType == optType_SourceRoute)
72 DSR_DEV_VAR(pstruEventDetails->nDeviceId)->dsrMetrics.packetReceived++;
73 srcRouteOption = option->options;
75 if (!IP_COMPARE(packet->pstruNetworkData->szDestIP, dsr_get_curr_ip()))
77 fn_NetSim_DSR_FreePacket(packet);
78 packet->pstruNetworkData->Packet_RoutingProtocol = NULL;