20int fn_NetSim_DSR_Add_Ack_request_Option(NetSim_PACKET* packet,
21 NetSim_EVENTDETAILS* pstruEventDetails)
23 DSR_OPTION_HEADER* option = (DSR_OPTION_HEADER*)packet->pstruNetworkData->Packet_RoutingProtocol;
24 static unsigned int nIdentification=1;
25 if(DSR_DEV_VAR(pstruEventDetails->nDeviceId)->AckType == NETWORK_LAYER_ACK)
27 if(!option->ackRequestOption)
28 option->ackRequestOption = (DSR_ACK_REQ_OPTION*)calloc(1,
sizeof* option->ackRequestOption);
29 option->ackRequestOption->nOptionType = optType_AckRequest;
30 option->ackRequestOption->nIdentification = nIdentification++;
31 packet->pstruNetworkData->dPacketSize+=DSR_ACK_REQUEST_LEN;
32 packet->pstruNetworkData->dOverhead+=DSR_ACK_REQUEST_LEN;
36 if(option->ackRequestOption)
38 option->ackRequestOption = NULL;
39 packet->pstruNetworkData->dPacketSize-=DSR_ACK_REQUEST_LEN;
40 packet->pstruNetworkData->dOverhead-=DSR_ACK_REQUEST_LEN;
49int fn_NetSim_DSR_Process_AckRequestOption(NetSim_PACKET* packet,NetSim_EVENTDETAILS* pstruEventDetails)
51 DSR_OPTION_HEADER* option = (DSR_OPTION_HEADER*)packet->pstruNetworkData->Packet_RoutingProtocol;
52 if(option->ackRequestOption)
54 NetSim_EVENTDETAILS pevent;
55 DSR_ACK_REQ_OPTION* ackRequest = option->ackRequestOption;
56 NetSim_PACKET* ppacket = fn_NetSim_DSR_GenerateCtrlPacket(pstruEventDetails->nDeviceId,
57 packet->nTransmitterId,
58 packet->nTransmitterId,
59 pstruEventDetails->dEventTime,
61 option = (DSR_OPTION_HEADER*)calloc(1,
sizeof* option);
62 DSR_ACK_OPTION* ack = (DSR_ACK_OPTION*)calloc(1,
sizeof* ack);
63 ppacket->pstruNetworkData->Packet_RoutingProtocol = option;
64 option->options = ack;
65 option->nNextHeader = NO_NEXT_HEADER;
66 option->optType = optType_Ack;
67 option->nPayloadLength = DSR_ACK_OPTION_LEN;
69 ack->
DestAddress = dsr_get_dev_ip(packet->nTransmitterId);
74 ppacket->pstruNetworkData->dOverhead = DSR_ACK_OPTION_LEN+DSR_OPTION_HEADER_SIZE;
75 ppacket->pstruNetworkData->dPacketSize = DSR_ACK_OPTION_LEN+DSR_OPTION_HEADER_SIZE;
76 ppacket->pstruNetworkData->nTTL = 2;
78 memcpy(&pevent,pstruEventDetails,
sizeof* pstruEventDetails);
79 pevent.dPacketSize = DSR_ACK_OPTION_LEN+DSR_OPTION_HEADER_SIZE;
80 pevent.nApplicationId = 0;
81 pevent.nEventType = NETWORK_OUT_EVENT;
83 pevent.nProtocolId = fn_NetSim_Stack_GetNWProtocol(pevent.nDeviceId);
84 pevent.nSegmentId = 0;
85 pevent.nSubEventType = 0;
86 pevent.pPacket = ppacket;
94int fn_NetSim_DSR_ProcessAckOption(NetSim_EVENTDETAILS* pstruEventDetails)
96 NetSim_PACKET* packet = pstruEventDetails->pPacket;
97 NETSIM_ID nSource = packet->nSourceId;
98 DSR_EMPTY_MAINT_BUFFER(pstruEventDetails->nDeviceId,nSource);
99 fn_NetSim_Packet_FreePacket(packet);
100 pstruEventDetails->pPacket=NULL;
unsigned int nIdentification
NETSIM_IPAddress DestAddress
NETSIM_IPAddress sourceAddress
unsigned int nOptionDataLen
DSR_OPTION_TYPE nOptionType
unsigned int nIdentification