14#include "Application.h"
16int fn_NetSim_Application_ConfigureInteractiveGamingTraffic(ptrAPPLICATION_INFO appInfo,
void* xmlNetSimNode)
19 APP_GAMING_INFO* info = calloc(1,
sizeof * info);
21 appInfo->appData = info;
22 xmlChild = fn_NetSim_xmlGetChildElement(xmlNetSimNode,
"UL_PACKET_SIZE", 0);
25 szVal = fn_NetSim_xmlConfig_GetVal(xmlChild,
"A_VALUE", 1);
27 info->ul_a_size = atof(szVal);
29 szVal = fn_NetSim_xmlConfig_GetVal(xmlChild,
"B_VALUE", 1);
31 info->ul_b_size = atof(szVal);
36 xmlChild = fn_NetSim_xmlGetChildElement(xmlNetSimNode,
"UL_INTER_ARRIVAL_TIME", 0);
39 szVal = fn_NetSim_xmlConfig_GetVal(xmlChild,
"B_VALUE", 1);
41 info->ul_b_IAT = atof(szVal) * MICROSECOND;
46 xmlChild = fn_NetSim_xmlGetChildElement(xmlNetSimNode,
"DL_PACKET_SIZE", 0);
49 szVal = fn_NetSim_xmlConfig_GetVal(xmlChild,
"A_VALUE", 1);
51 info->dl_a_size = atof(szVal);
53 szVal = fn_NetSim_xmlConfig_GetVal(xmlChild,
"B_VALUE", 1);
55 info->dl_b_size = atof(szVal);
60 xmlChild = fn_NetSim_xmlGetChildElement(xmlNetSimNode,
"DL_INTER_ARRIVAL_TIME", 0);
63 szVal = fn_NetSim_xmlConfig_GetVal(xmlChild,
"A_VALUE", 1);
65 info->dl_a_IAT = atof(szVal) * MICROSECOND;
67 szVal = fn_NetSim_xmlConfig_GetVal(xmlChild,
"B_VALUE", 1);
69 info->dl_b_IAT = atof(szVal) * MICROSECOND;
77int fn_NetSim_Application_StartInteractiveGamingULAPP(ptrAPPLICATION_INFO appInfo,
double time)
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)
86 fnCreatePort(appInfo);
88 NETSIM_ID nSource = appInfo->sourceList[0];
89 NETSIM_ID nDestination = appInfo->destList[0];
92 Interactive_Gaming_createUL_socket(appInfo, nSource, nDestination);
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);
102 if (appInfo->dEndTime <= ularrivalTime)
105 pstruEventDetails->dEventTime = ularrivalTime;
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,
121 pstruEventDetails->nPacketId,
125 appInfo->sourcePort);
126 pstruEventDetails->dPacketSize = min(ulpacketSize, fn_NetSim_Stack_GetMSS(pstruEventDetails->pPacket) - 1);
127 pstruEventDetails->szOtherDetails = appInfo;
128 fnpAddEvent(pstruEventDetails);
131int fn_NetSim_Application_StartInteractiveGamingDLAPP(ptrAPPLICATION_INFO appInfo,
double time)
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)
141 NETSIM_ID nSource = appInfo->sourceList[0];
142 NETSIM_ID nDestination = appInfo->destList[0];
145 Interactive_Gaming_createDL_socket(appInfo, nSource, nDestination);
147 dlarrivalTime = time + B;
148 dlpacketSize = roundl(info->dl_a_size - info->dl_b_size * (logl(-logl(R))));
150 if (dlarrivalTime < 0)
151 return fn_NetSim_Application_StartInteractiveGamingDLAPP(appInfo, time);
152 if (dlpacketSize <= 0)
153 return fn_NetSim_Application_StartInteractiveGamingDLAPP(appInfo, time);
155 if (appInfo->dEndTime <= dlarrivalTime)
158 pstruEventDetails->dEventTime = dlarrivalTime;
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,
174 pstruEventDetails->nPacketId,
179 pstruEventDetails->dPacketSize = min(dlpacketSize, fn_NetSim_Stack_GetMSS(pstruEventDetails->pPacket) - 1);
180 pstruEventDetails->szOtherDetails = appInfo;
181 fnpAddEvent(pstruEventDetails);
184int fn_NetSim_Application_InteractiveGamingUL_GenerateNextPacket(ptrAPPLICATION_INFO pstruappinfo, NetSim_PACKET* pstruPacket,
double time)
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)
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,
215 pstruEventDetails->nPacketId,
216 TRAFFIC_INTERACTIVE_GAMING,
218 pstruappinfo->destPort,
219 pstruappinfo->sourcePort);
220 pstruEventDetails->szOtherDetails = pstruappinfo;
221 fnpAddEvent(pstruEventDetails);
225int fn_NetSim_Application_InteractiveGamingDL_GenerateNextPacket(ptrAPPLICATION_INFO pstruappinfo, NetSim_PACKET* pstruPacket,
double time)
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)
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,
256 pstruEventDetails->nPacketId,
257 TRAFFIC_INTERACTIVE_GAMING,
259 pstruappinfo->sourcePort,
260 pstruappinfo->destPort);
261 pstruEventDetails->szOtherDetails = pstruappinfo;
262 fnpAddEvent(pstruEventDetails);