NetSim Source Code Help
Loading...
Searching...
No Matches
Network_Layer_Ack.c
Go to the documentation of this file.
1
/************************************************************************************
2
* Copyright (C) 2020 *
3
* TETCOS, Bangalore. India *
4
* *
5
* Tetcos owns the intellectual property rights in the Product and its content. *
6
* The copying, redistribution, reselling or publication of any or all of the *
7
* Product or its content without express prior written consent of Tetcos is *
8
* prohibited. Ownership and / or any other right relating to the software and all *
9
* intellectual property rights therein shall remain at all times with Tetcos. *
10
* *
11
* Author: Shashi Kant Suman *
12
* *
13
* ---------------------------------------------------------------------------------*/
14
#include "
main.h
"
15
#include "
DSR.h
"
16
#include "
List.h
"
17
/**
18
This function adds the Acknowledge request option to the packet.
19
*/
20
int
fn_NetSim_DSR_Add_Ack_request_Option
(
NetSim_PACKET
* packet,
21
NetSim_EVENTDETAILS
*
pstruEventDetails
)
22
{
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)
26
{
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
;
33
}
34
else
35
{
36
if
(option->
ackRequestOption
)
37
{
38
option->
ackRequestOption
= NULL;
39
packet->
pstruNetworkData
->
dPacketSize
-=
DSR_ACK_REQUEST_LEN
;
40
packet->
pstruNetworkData
->
dOverhead
-=
DSR_ACK_REQUEST_LEN
;
41
}
42
}
43
return
1;
44
}
45
/**
46
If a packet has an acknowledge request option, this function generates the acknowledge
47
and transmits it.
48
*/
49
int
fn_NetSim_DSR_Process_AckRequestOption
(
NetSim_PACKET
* packet,
NetSim_EVENTDETAILS
*
pstruEventDetails
)
50
{
51
DSR_OPTION_HEADER
* option = (
DSR_OPTION_HEADER
*)packet->
pstruNetworkData
->
Packet_RoutingProtocol
;
52
if
(option->
ackRequestOption
)
53
{
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
,
60
ctrlPacket_ACK
);
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
;
68
69
ack->
DestAddress
=
dsr_get_dev_ip
(packet->
nTransmitterId
);
70
ack->
nIdentification
= ackRequest->
nIdentification
;
71
ack->
nOptionDataLen
=
DSR_ACK_OPTION_LEN
;
72
ack->
nOptionType
=
optType_Ack
;
73
ack->
sourceAddress
=
dsr_get_curr_ip
();
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;
77
//Transmit ack
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
;
82
pevent.
nPacketId
= 0;
83
pevent.
nProtocolId
=
fn_NetSim_Stack_GetNWProtocol
(pevent.
nDeviceId
);
84
pevent.
nSegmentId
= 0;
85
pevent.
nSubEventType
= 0;
86
pevent.
pPacket
= ppacket;
87
fnpAddEvent
(&pevent);
88
}
89
return
1;
90
}
91
/**
92
Whenever an acknowlegement is received, the DSR Maintenance Buffer is Emptied.
93
*/
94
int
fn_NetSim_DSR_ProcessAckOption
(
NetSim_EVENTDETAILS
*
pstruEventDetails
)
95
{
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;
101
return
1;
102
}
103
104
NETSIM_ID
unsigned int NETSIM_ID
Definition:
Animation.h:45
DSR.h
dsr_get_dev_ip
NETSIM_IPAddress dsr_get_dev_ip(NETSIM_ID d)
DSR_EMPTY_MAINT_BUFFER
#define DSR_EMPTY_MAINT_BUFFER(nDeviceId, nextHop)
Definition:
DSR.h:723
DSR_DEV_VAR
#define DSR_DEV_VAR(dev)
Definition:
DSR.h:772
DSR_ACK_REQUEST_LEN
#define DSR_ACK_REQUEST_LEN
Definition:
DSR.h:37
ctrlPacket_ACK
@ ctrlPacket_ACK
Definition:
DSR.h:90
DSR_OPTION_HEADER_SIZE
#define DSR_OPTION_HEADER_SIZE
Definition:
DSR.h:30
fn_NetSim_DSR_GenerateCtrlPacket
NetSim_PACKET * fn_NetSim_DSR_GenerateCtrlPacket(NETSIM_ID src, NETSIM_ID dest, NETSIM_ID recv, double dTime, DSR_CONTROL_PACKET type)
NO_NEXT_HEADER
#define NO_NEXT_HEADER
Definition:
DSR.h:45
dsr_get_curr_ip
NETSIM_IPAddress dsr_get_curr_ip()
optType_Ack
@ optType_Ack
Definition:
DSR.h:99
optType_AckRequest
@ optType_AckRequest
Definition:
DSR.h:101
DSR_ACK_OPTION_LEN
#define DSR_ACK_OPTION_LEN
Definition:
DSR.h:36
List.h
calloc
#define calloc(c, s)
Definition:
Memory.h:29
fn_NetSim_DSR_Add_Ack_request_Option
int fn_NetSim_DSR_Add_Ack_request_Option(NetSim_PACKET *packet, NetSim_EVENTDETAILS *pstruEventDetails)
Definition:
Network_Layer_Ack.c:20
fn_NetSim_DSR_Process_AckRequestOption
int fn_NetSim_DSR_Process_AckRequestOption(NetSim_PACKET *packet, NetSim_EVENTDETAILS *pstruEventDetails)
Definition:
Network_Layer_Ack.c:49
fn_NetSim_DSR_ProcessAckOption
int fn_NetSim_DSR_ProcessAckOption(NetSim_EVENTDETAILS *pstruEventDetails)
Definition:
Network_Layer_Ack.c:94
fn_NetSim_Stack_GetNWProtocol
NETWORK_LAYER_PROTOCOL fn_NetSim_Stack_GetNWProtocol(NETSIM_ID nDeviceId)
NETWORK_OUT_EVENT
@ NETWORK_OUT_EVENT
Definition:
Stack.h:108
pstruEventDetails
EXPORTED struct stru_NetSim_EventDetails * pstruEventDetails
Definition:
Stack.h:837
main.h
fn_NetSim_Packet_FreePacket
#define fn_NetSim_Packet_FreePacket(pstruPacket)
Definition:
main.h:177
fnpAddEvent
#define fnpAddEvent(pstruEvent)
Definition:
main.h:191
stru_DSR_Ack_Option
Definition:
DSR.h:492
stru_DSR_Ack_Option::nIdentification
unsigned int nIdentification
Definition:
DSR.h:502
stru_DSR_Ack_Option::DestAddress
NETSIM_IPAddress DestAddress
Definition:
DSR.h:509
stru_DSR_Ack_Option::sourceAddress
NETSIM_IPAddress sourceAddress
Definition:
DSR.h:506
stru_DSR_Ack_Option::nOptionDataLen
unsigned int nOptionDataLen
Definition:
DSR.h:498
stru_DSR_Ack_Option::nOptionType
DSR_OPTION_TYPE nOptionType
Definition:
DSR.h:494
stru_DSR_Ack_Request_Option
Definition:
DSR.h:452
stru_DSR_Ack_Request_Option::nIdentification
unsigned int nIdentification
Definition:
DSR.h:464
stru_DSR_Ack_Request_Option::nOptionType
DSR_OPTION_TYPE nOptionType
Definition:
DSR.h:454
stru_DSR_OptionHeader
Definition:
DSR.h:535
stru_DSR_OptionHeader::nPayloadLength
unsigned int nPayloadLength
Definition:
DSR.h:557
stru_DSR_OptionHeader::ackRequestOption
DSR_ACK_REQ_OPTION * ackRequestOption
Definition:
DSR.h:566
stru_DSR_OptionHeader::options
void * options
Definition:
DSR.h:565
stru_DSR_OptionHeader::nNextHeader
unsigned int nNextHeader
Definition:
DSR.h:536
stru_DSR_OptionHeader::optType
DSR_OPTION_TYPE optType
Definition:
DSR.h:558
stru_NetSim_EventDetails
Definition:
Stack.h:744
stru_NetSim_EventDetails::nApplicationId
NETSIM_ID nApplicationId
Definition:
Stack.h:752
stru_NetSim_EventDetails::nEventType
EVENT_TYPE nEventType
Definition:
Stack.h:747
stru_NetSim_EventDetails::nProtocolId
NETSIM_ID nProtocolId
Definition:
Stack.h:748
stru_NetSim_EventDetails::pPacket
struct stru_NetSim_Packet * pPacket
Definition:
Stack.h:754
stru_NetSim_EventDetails::nSubEventType
NETSIM_ID nSubEventType
Definition:
Stack.h:757
stru_NetSim_EventDetails::nDeviceId
NETSIM_ID nDeviceId
Definition:
Stack.h:750
stru_NetSim_EventDetails::nPacketId
long long int nPacketId
Definition:
Stack.h:755
stru_NetSim_EventDetails::dEventTime
double dEventTime
Definition:
Stack.h:746
stru_NetSim_EventDetails::nSegmentId
int nSegmentId
Definition:
Stack.h:756
stru_NetSim_EventDetails::dPacketSize
double dPacketSize
Definition:
Stack.h:753
stru_NetSim_Packet_NetworkLayer::dOverhead
double dOverhead
Definition:
Packet.h:197
stru_NetSim_Packet_NetworkLayer::nTTL
unsigned int nTTL
Definition:
Packet.h:202
stru_NetSim_Packet_NetworkLayer::Packet_RoutingProtocol
void * Packet_RoutingProtocol
Definition:
Packet.h:207
stru_NetSim_Packet_NetworkLayer::dPacketSize
double dPacketSize
Definition:
Packet.h:195
stru_NetSim_Packet
Definition:
Packet.h:255
stru_NetSim_Packet::pstruNetworkData
struct stru_NetSim_Packet_NetworkLayer * pstruNetworkData
Definition:
Packet.h:275
stru_NetSim_Packet::nTransmitterId
NETSIM_ID nTransmitterId
Definition:
Packet.h:265
stru_NetSim_Packet::nSourceId
NETSIM_ID nSourceId
Definition:
Packet.h:263
ALL
Component 4
DSR
Network_Layer_Ack.c
Generated on Fri Dec 9 2022 10:22:46 for NetSim Source Code Help by
1.9.5