NetSim Source Code Help v14.4
All 13 Components
 
Loading...
Searching...
No Matches
DSR.c
1/************************************************************************************
2 * Copyright (C) 2023 *
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"
17int fn_NetSim_DSR_Init_F(struct stru_NetSim_Network *NETWORK_Formal,
18 NetSim_EVENTDETAILS *pstruEventDetails_Formal,
19 char *pszAppPath_Formal,
20 char *pszWritePath_Formal,
21 int nVersion_Type,
22 void **fnPointer);
23int fn_NetSim_DSR_Configure_F(void** var);
24int fn_NetSim_DSR_CopyPacket_F(const NetSim_PACKET* destPacket,const NetSim_PACKET* srcPacket);
25int fn_NetSim_DSR_FreePacket_F(NetSim_PACKET* packet);
26int fn_NetSim_DSR_Metrics_F(PMETRICSWRITER filename);
27
28
29
30/**
31DSR Init function initializes the DSR parameters.
32*/
33_declspec(dllexport) int fn_NetSim_DSR_Init(struct stru_NetSim_Network *NETWORK_Formal,
34 NetSim_EVENTDETAILS *pstruEventDetails_Formal,
35 char *pszAppPath_Formal,
36 char *pszWritePath_Formal,
37 int nVersion_Type,
38 void **fnPointer)
39{
40 return fn_NetSim_DSR_Init_F(NETWORK_Formal,pstruEventDetails_Formal,pszAppPath_Formal,pszWritePath_Formal,nVersion_Type,fnPointer);
41}
42/**
43This is the DSR configure function.
44*/
45_declspec(dllexport) int fn_NetSim_DSR_Configure(void** var)
46{
47 return fn_NetSim_DSR_Configure_F(var);
48}
49/**
50~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
51This is the DSR Run function which gets called by the IP layer for routing the data
52by the DSR Network Routing Protocol. It includes the events NETWORK_OUT_EVENT,
53NETWORK_IN_EVENT and TIMER_EVENT.
54
55NETWORK_OUT_EVENT -
56 It process the Data Packets which arrive at the NetworkOut layer to route the packet.
57NETWORK_IN_EVENT -
58 It processes Data Packets, Route Request Packets, Route Reply Packets, Route Error
59 Packets, Ack Packet
60TIMER_EVENT -
61 It Process the DSR Route Request timeout and the DSR Maintenance Buffer timeout.
62~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
63
64*/
65_declspec(dllexport) int fn_NetSim_DSR_Run()
66{
67 set_dsr_curr();
68 if (!isDsrConfigured(pstruEventDetails->nDeviceId, dsr_get_curr_if()))
69 return -1;
70 switch(pstruEventDetails->nEventType)
71 {
72 case NETWORK_OUT_EVENT:
73 switch(pstruEventDetails->nSubEventType)
74 {
75 case 0: //Packet from upper layer or Network in
76 default:
77 {
78 if(!isDSRPACKET(pstruEventDetails->pPacket))
79 {
80 NETSIM_IPAddress n1,n2;
81 NETSIM_IPAddress dest = pstruEventDetails->pPacket->pstruNetworkData->szDestIP;
82 NETSIM_IPAddress ip = dsr_get_curr_ip();
83 if(ip->type != dest->type)
84 return 0;
85 n1=IP_NETWORK_ADDRESS(ip,
86 DEVICE_INTERFACE(pstruEventDetails->nDeviceId,1)->szSubnetMask,
87 DEVICE_INTERFACE(pstruEventDetails->nDeviceId,1)->prefix_len);
88 n2=IP_NETWORK_ADDRESS(dest,
89 DEVICE_INTERFACE(pstruEventDetails->nDeviceId,1)->szSubnetMask,
90 DEVICE_INTERFACE(pstruEventDetails->nDeviceId,1)->prefix_len);
91
92 if(!IP_COMPARE(n1,n2))
93 DSR_PACKET_PROCESSING();
94 else
95 return 0; //Other network packet
96 }
97 else
98 {
99 //DSR control packet
100 //No processing just forward
101 }
102 }
103 break;
104 }
105 if(pstruEventDetails->pPacket)
106 pstruEventDetails->nInterfaceId = dsr_get_curr_if();
107 else
108 pstruEventDetails->nInterfaceId = 0;
109 break;
110 case NETWORK_IN_EVENT:
111 {
112 switch(pstruEventDetails->nSubEventType)
113 {
114 case 0:
115 default:
116 {
117 switch(pstruEventDetails->pPacket->nControlDataType)
118 {
119 default://Data packet or other layer control packet
120 if(pstruEventDetails->pPacket->pstruNetworkData->Packet_RoutingProtocol)
121 {
122 DSR_PROCESS_SRC_ROUTE();
123 if(pstruEventDetails->pPacket && pstruEventDetails->pPacket->pstruNetworkData)
124 pstruEventDetails->pPacket->pstruNetworkData->nTTL--;
125 //pstruEventDetails->pPacket=NULL;
126 }
127 break;
128 case ctrlPacket_ROUTE_REQUEST:
129 DSR_PROCESS_RREQ();
130 pstruEventDetails->pPacket=NULL;
131 break;
132 case ctrlPacket_ROUTE_REPLY:
133 DSR_PROCESS_RREP();
134 pstruEventDetails->pPacket=NULL;
135 break;
136 case ctrlPacket_ROUTE_ERROR:
137 DSR_PROCESS_RERR();
138 pstruEventDetails->pPacket=NULL;
139
140 break;
141 case ctrlPacket_ACK:
142 DSR_PROCESS_ACK();
143 pstruEventDetails->pPacket=NULL;
144
145 }
146 }
147 break;
148 case subevent_PROCESS_RERR:
149 DSR_PROCESS_RERR();
150 pstruEventDetails->pPacket=NULL;
151 break;
152 }
153 }
154 break;
155 case TIMER_EVENT:
156 {
157 switch(pstruEventDetails->nSubEventType)
158 {
159 case subevent_RREQ_TIMEOUT:
160 DSR_RREQ_TIMEOUT();
161
162 break;
163 case subevent_MAINT_TIMEOUT:
164 DSR_MAINT_TIMEOUT();
165 break;
166 }
167 }
168 break;
169 }
170
171 return 1;
172}
173/**
174 This function is called by NetworkStack.dll, while writing the evnt trace
175 to get the sub event as a string.
176*/
177_declspec(dllexport) char* fn_NetSim_DSR_Trace(NETSIM_ID nSubeventid)
178{
179 switch(nSubeventid)
180 {
181 case subevent_RREQ_TIMEOUT:
182 return "DSR_RREQ_TIMEOUT";
183 case subevent_MAINT_TIMEOUT:
184 return "DSR_MAINT_TIMEOUT";
185 case subevent_PROCESS_RERR:
186 return "DSR_PROCESS_RERR";
187 default:
188 return "DSR_UNKNOWN";
189 }
190}
191/**
192 This function is called by NetworkStack.dll, to copy the DSR protocol
193 from source packet to destination.
194*/
195_declspec(dllexport) int fn_NetSim_DSR_CopyPacket(const NetSim_PACKET* destPacket,const NetSim_PACKET* srcPacket)
196{
197 return fn_NetSim_DSR_CopyPacket_F(destPacket,srcPacket);
198}
199/**
200 This function is called by NetworkStack.dll, to free the TCP protocol.
201*/
202_declspec(dllexport) int fn_NetSim_DSR_FreePacket(NetSim_PACKET* packet)
203{
204 return fn_NetSim_DSR_FreePacket_F(packet);
205}
206/**
207This function call WLAN Metrics function in lib file to write the Metrics in Metrics.txt.
208*/
209_declspec(dllexport) int fn_NetSim_DSR_Metrics(PMETRICSWRITER filename)
210{
211 return fn_NetSim_DSR_Metrics_F(filename);
212}
213/**
214 This function is called by NetworkStack.dll, once simulation end to free the
215 allocated memory for the network.
216*/
217_declspec(dllexport) int fn_NetSim_DSR_Finish()
218{
219 return fn_NetSim_DSR_Finish_F();
220}
221/**
222This function will return the string to write packet trace heading.
223*/
224_declspec(dllexport) char* fn_NetSim_DSR_ConfigPacketTrace()
225{
226 return "";
227}
228/**
229 This function will return the string to write packet trace.
230*/
231_declspec(dllexport) char* fn_NetSim_DSR_WritePacketTrace()
232{
233 return "";
234}