NetSim Source Code Help v14.4
All 13 Components
 
Loading...
Searching...
No Matches
Interactive_Gaming.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: Sreerang *
12* *
13* ---------------------------------------------------------------------------------*/
14#include "Application.h"
15
16int fn_NetSim_Application_ConfigureInteractiveGamingTraffic(ptrAPPLICATION_INFO appInfo, void* xmlNetSimNode)
17{
18 char* szVal;
19 APP_GAMING_INFO* info = calloc(1, sizeof * info);
20 void* xmlChild;
21 appInfo->appData = info;
22 xmlChild = fn_NetSim_xmlGetChildElement(xmlNetSimNode, "UL_PACKET_SIZE", 0);
23 if (xmlChild)
24 {
25 szVal = fn_NetSim_xmlConfig_GetVal(xmlChild, "A_VALUE", 1);
26 if (szVal)
27 info->ul_a_size = atof(szVal);
28 free(szVal);
29 szVal = fn_NetSim_xmlConfig_GetVal(xmlChild, "B_VALUE", 1);
30 if (szVal)
31 info->ul_b_size = atof(szVal);
32 free(szVal);
33 }
34 else
35 return 0;
36 xmlChild = fn_NetSim_xmlGetChildElement(xmlNetSimNode, "UL_INTER_ARRIVAL_TIME", 0);
37 if (xmlChild)
38 {
39 szVal = fn_NetSim_xmlConfig_GetVal(xmlChild, "B_VALUE", 1);
40 if (szVal)
41 info->ul_b_IAT = atof(szVal) * MICROSECOND;
42 free(szVal);
43 }
44 else
45 return 0;
46 xmlChild = fn_NetSim_xmlGetChildElement(xmlNetSimNode, "DL_PACKET_SIZE", 0);
47 if (xmlChild)
48 {
49 szVal = fn_NetSim_xmlConfig_GetVal(xmlChild, "A_VALUE", 1);
50 if (szVal)
51 info->dl_a_size = atof(szVal);
52 free(szVal);
53 szVal = fn_NetSim_xmlConfig_GetVal(xmlChild, "B_VALUE", 1);
54 if (szVal)
55 info->dl_b_size = atof(szVal);
56 free(szVal);
57 }
58 else
59 return 0;
60 xmlChild = fn_NetSim_xmlGetChildElement(xmlNetSimNode, "DL_INTER_ARRIVAL_TIME", 0);
61 if (xmlChild)
62 {
63 szVal = fn_NetSim_xmlConfig_GetVal(xmlChild, "A_VALUE", 1);
64 if (szVal)
65 info->dl_a_IAT = atof(szVal) * MICROSECOND;
66 free(szVal);
67 szVal = fn_NetSim_xmlConfig_GetVal(xmlChild, "B_VALUE", 1);
68 if (szVal)
69 info->dl_b_IAT = atof(szVal) * MICROSECOND;
70 free(szVal);
71 }
72 else
73 return 0;
74 return 1;
75}
76
77int fn_NetSim_Application_StartInteractiveGamingULAPP(ptrAPPLICATION_INFO appInfo, double time)
78{
79 double ulpacketSize = 0.0;
80 double ularrivalTime = 0.0;
81 APP_GAMING_INFO* info = appInfo->appData;
82 double R = NETSIM_RAND_01();
83 if (appInfo->dEndTime <= time)
84 return 0;
85
86 fnCreatePort(appInfo);
87
88 NETSIM_ID nSource = appInfo->sourceList[0];
89 NETSIM_ID nDestination = appInfo->destList[0];
90
91 //Create the socket buffer
92 Interactive_Gaming_createUL_socket(appInfo, nSource, nDestination);
93
94 //Generate the app start event
95 ularrivalTime = time;
96 ulpacketSize = roundl(info->ul_a_size - info->ul_b_size * (logl(-logl(R))));
97 if (ularrivalTime < 0)
98 return fn_NetSim_Application_StartInteractiveGamingULAPP(appInfo, time);
99 if (ulpacketSize <= 0)
100 return fn_NetSim_Application_StartInteractiveGamingULAPP(appInfo, time);
101
102 if (appInfo->dEndTime <= ularrivalTime)
103 return 0;
104
105 pstruEventDetails->dEventTime = ularrivalTime;
106
107 pstruEventDetails->nApplicationId = appInfo->id;
108 pstruEventDetails->nDeviceId = nDestination;
109 pstruEventDetails->nDeviceType = DEVICE_TYPE(nDestination);
110 pstruEventDetails->nEventType = TIMER_EVENT;
111 pstruEventDetails->nInterfaceId = 0;
112 pstruEventDetails->nPacketId = ++info->ul_id;
113 pstruEventDetails->nProtocolId = PROTOCOL_APPLICATION;
114 pstruEventDetails->nSegmentId = 0;
115 pstruEventDetails->nSubEventType = event_APP_START;
116 pstruEventDetails->pPacket = fn_NetSim_Application_GeneratePacket(appInfo,
117 pstruEventDetails->dEventTime,
118 nDestination,
119 1,
120 &nSource,
121 pstruEventDetails->nPacketId,
122 appInfo->nAppType,
123 appInfo->qos,
124 appInfo->destPort,
125 appInfo->sourcePort);
126 pstruEventDetails->dPacketSize = min(ulpacketSize, fn_NetSim_Stack_GetMSS(pstruEventDetails->pPacket) - 1);
127 pstruEventDetails->szOtherDetails = appInfo;
128 fnpAddEvent(pstruEventDetails);
129 return 0;
130}
131int fn_NetSim_Application_StartInteractiveGamingDLAPP(ptrAPPLICATION_INFO appInfo, double time)
132{
133 double dlarrivalTime = 0.0;
134 double dlpacketSize = 0.0;
135 APP_GAMING_INFO* info = appInfo->appData;
136 double R = NETSIM_RAND_01();
137 double B = NETSIM_RAND_RN(info->ul_b_IAT, 0);
138 if (appInfo->dEndTime <= time)
139 return 0;
140
141 NETSIM_ID nSource = appInfo->sourceList[0];
142 NETSIM_ID nDestination = appInfo->destList[0];
143
144 //Create the socket buffer
145 Interactive_Gaming_createDL_socket(appInfo, nSource, nDestination);
146 //Generate the app start event
147 dlarrivalTime = time + B;
148 dlpacketSize = roundl(info->dl_a_size - info->dl_b_size * (logl(-logl(R))));
149
150 if (dlarrivalTime < 0)
151 return fn_NetSim_Application_StartInteractiveGamingDLAPP(appInfo, time);
152 if (dlpacketSize <= 0)
153 return fn_NetSim_Application_StartInteractiveGamingDLAPP(appInfo, time);
154
155 if (appInfo->dEndTime <= dlarrivalTime)
156 return 0;
157
158 pstruEventDetails->dEventTime = dlarrivalTime;
159
160 pstruEventDetails->nApplicationId = appInfo->id;
161 pstruEventDetails->nDeviceId = nSource;
162 pstruEventDetails->nDeviceType = DEVICE_TYPE(nSource);
163 pstruEventDetails->nEventType = TIMER_EVENT;
164 pstruEventDetails->nInterfaceId = 0;
165 pstruEventDetails->nPacketId = ++info->dl_id;
166 pstruEventDetails->nProtocolId = PROTOCOL_APPLICATION;
167 pstruEventDetails->nSegmentId = 0;
168 pstruEventDetails->nSubEventType = event_APP_START;
169 pstruEventDetails->pPacket = fn_NetSim_Application_GeneratePacket(appInfo,
170 pstruEventDetails->dEventTime,
171 nSource,
172 1,
173 &nDestination,
174 pstruEventDetails->nPacketId,
175 appInfo->nAppType,
176 appInfo->qos,
177 appInfo->sourcePort,
178 appInfo->destPort);
179 pstruEventDetails->dPacketSize = min(dlpacketSize, fn_NetSim_Stack_GetMSS(pstruEventDetails->pPacket) - 1);
180 pstruEventDetails->szOtherDetails = appInfo;
181 fnpAddEvent(pstruEventDetails);
182 return 0;
183}
184int fn_NetSim_Application_InteractiveGamingUL_GenerateNextPacket(ptrAPPLICATION_INFO pstruappinfo, NetSim_PACKET* pstruPacket, double time)
185{
186 NETSIM_ID nSourceId = get_first_dest_from_packet(pstruPacket);
187 NETSIM_ID nDestinationId = pstruPacket->nSourceId;
188 APP_GAMING_INFO* info = pstruappinfo->appData;
189 double ulpacketSize = 0.0;
190 double ularrivalTime = 0.0;
191 double R = NETSIM_RAND_01();
192 ularrivalTime = info->ul_b_IAT;
193 ulpacketSize = roundl(info->ul_a_size - info->ul_b_size * (logl(-logl(R))));
194 if (ularrivalTime <= 0)
195 return fn_NetSim_Application_InteractiveGamingUL_GenerateNextPacket(pstruappinfo, pstruPacket, time);
196 if (ulpacketSize <= 0)
197 return fn_NetSim_Application_InteractiveGamingUL_GenerateNextPacket(pstruappinfo, pstruPacket, time);
198 if (pstruappinfo->dEndTime <= time + ularrivalTime)
199 return 0;
200 pstruEventDetails->dEventTime = time + ularrivalTime;
201 pstruEventDetails->dPacketSize = ulpacketSize;
202 pstruEventDetails->nApplicationId = pstruappinfo->id;
203 pstruEventDetails->nDeviceId = nDestinationId;
204 pstruEventDetails->nDeviceType = DEVICE_TYPE(nDestinationId);
205 pstruEventDetails->nEventType = APPLICATION_OUT_EVENT;
206 pstruEventDetails->nInterfaceId = 0;
207 pstruEventDetails->nPacketId = ++info->ul_id;
208 pstruEventDetails->nProtocolId = PROTOCOL_APPLICATION;
209 pstruEventDetails->nSubEventType = 0;
210 pstruEventDetails->pPacket = fn_NetSim_Application_GeneratePacket(pstruappinfo,
211 pstruEventDetails->dEventTime,
212 nDestinationId,
213 1,
214 &nSourceId,
215 pstruEventDetails->nPacketId,
216 TRAFFIC_INTERACTIVE_GAMING,
217 pstruappinfo->qos,
218 pstruappinfo->destPort,
219 pstruappinfo->sourcePort);
220 pstruEventDetails->szOtherDetails = pstruappinfo;
221 fnpAddEvent(pstruEventDetails);
222 return 1;
223}
224
225int fn_NetSim_Application_InteractiveGamingDL_GenerateNextPacket(ptrAPPLICATION_INFO pstruappinfo, NetSim_PACKET* pstruPacket, double time)
226{
227 NETSIM_ID nSourceId = pstruPacket->nSourceId;
228 NETSIM_ID nDestinationId = get_first_dest_from_packet(pstruPacket);
229 APP_GAMING_INFO* info = pstruappinfo->appData;
230 double dlpacketSize = 0.0;
231 double dlarrivalTime = 0.0;
232 double R = NETSIM_RAND_01();
233 dlarrivalTime = info->dl_a_IAT - info->dl_b_IAT * (logl(-logl(R)));
234 dlpacketSize = roundl(info->dl_a_size - info->dl_b_size * (logl(-logl(R))));
235 if (dlarrivalTime <= 0.0)
236 return fn_NetSim_Application_InteractiveGamingDL_GenerateNextPacket(pstruappinfo, pstruPacket, time);
237 if (dlpacketSize <= 0.0)
238 return fn_NetSim_Application_InteractiveGamingDL_GenerateNextPacket(pstruappinfo, pstruPacket, time);
239 if (pstruappinfo->dEndTime <= time + dlarrivalTime)
240 return 0;
241 pstruEventDetails->dEventTime = time + dlarrivalTime;
242 pstruEventDetails->dPacketSize = dlpacketSize;
243 pstruEventDetails->nApplicationId = pstruappinfo->id;
244 pstruEventDetails->nDeviceId = nSourceId;
245 pstruEventDetails->nDeviceType = DEVICE_TYPE(nSourceId);
246 pstruEventDetails->nEventType = APPLICATION_OUT_EVENT;
247 pstruEventDetails->nInterfaceId = 0;
248 pstruEventDetails->nPacketId = ++info->dl_id;
249 pstruEventDetails->nProtocolId = PROTOCOL_APPLICATION;
250 pstruEventDetails->nSubEventType = 0;
251 pstruEventDetails->pPacket = fn_NetSim_Application_GeneratePacket(pstruappinfo,
252 pstruEventDetails->dEventTime,
253 nSourceId,
254 1,
255 &nDestinationId,
256 pstruEventDetails->nPacketId,
257 TRAFFIC_INTERACTIVE_GAMING,
258 pstruappinfo->qos,
259 pstruappinfo->sourcePort,
260 pstruappinfo->destPort);
261 pstruEventDetails->szOtherDetails = pstruappinfo;
262 fnpAddEvent(pstruEventDetails);
263 return 1;
264}