NetSim Source Code Help v14.4
All 13 Components
 
Loading...
Searching...
No Matches
ApplicationPacketLog.c
1#include "main.h"
2#include "Application.h"
3#include "NetSim_utility.h"
4
5static FILE* fpApp = NULL;
6
7void init_application_log()
8{
9 if (get_protocol_log_status("APPLICATION_PACKET_LOG"))
10 {
11 char s[BUFSIZ];
12 sprintf(s, "%s\\%s", pszIOLogPath, "Application_Packet_Log.csv");
13 fpApp = fopen(s, "w");
14 if (!fpApp)
15 {
16 fnSystemError("Unable to open %s file", s);
17 perror(s);
18 }
19 else
20 {
21 fprintf(fpApp, "%s,%s,%s,%s,%s,",
22 "Application Name", "Application ID", "Source", "Destination", "Packet ID");
23
24 fprintf(fpApp, "%s,%s,%s,%s,",
25 "Segment ID", "Packet or Segment Start Time(ms)", "Packet or Segment End Time(ms)", "Packet or Segment size(Bytes)");
26
27 fprintf(fpApp, "%s,%s,%s,",
28 "Latency(Microseconds)", "Jitter(Microseconds)", "Throughput(Mbps)");
29
30 fprintf(fpApp, "\n");
31 }
32 }
33
34}
35
36void print_application_log(ptrAPPLICATION_INFO pstruappinfo, NetSim_PACKET* packet)
37{
38 if (fpApp == NULL)
39 return;
40 double latency, jitter;
41 int TwoWayApplicationflag = 0, linkType = 0; // linkType 1 for UL and 2 for DL
42 NETSIM_ID nDestinationId = get_first_dest_from_packet(packet);
43 latency = packet->pstruAppData->dEndTime - packet->pstruAppData->dStartTime;
44 char Appname[BUFSIZ];
45 strcpy(Appname, pstruappinfo->name);
46
47 if (nDestinationId == 0) // Check for Broadcast Applications
48 return;
49 if (pstruappinfo->nAppType == TRAFFIC_INTERACTIVE_GAMING || pstruappinfo->nAppType == TRAFFIC_EMAIL || pstruappinfo->nAppType == TRAFFIC_HTTP)
50 {
51 TwoWayApplicationflag = 1;
52 if (get_first_dest_from_packet(packet) == pstruappinfo->sourceList[0])
53 {
54 linkType = 1; // UL
55 strcat(Appname, "_UL");
56 }
57 else
58 {
59 linkType = 2; // DL
60 strcat(Appname, "_DL");
61 }
62 }
63
64 if(TwoWayApplicationflag == 0 || (TwoWayApplicationflag == 1 && linkType == 1))
65 {
66 if (pstruappinfo->uplink.prevPacketLatency == -1 || packet->nPacketId == pstruappinfo->uplink.firstPacketReceived)
67 {
68 pstruappinfo->uplink.firstPacketReceived = packet->nPacketId;
69 if (packet->pstruAppData->nSegmentId == 0 || packet->pstruAppData->nSegmentId == 1)
70 jitter = 0;
71 else
72 jitter = fabs(latency - pstruappinfo->uplink.prevPacketLatency);
73 }
74 else
75 {
76 jitter = fabs(latency - pstruappinfo->uplink.prevPacketLatency);
77 }
78 if (packet->pstruAppData->nSegmentId == 0 || packet->pstruAppData->nPacketFragment == Segment_LastFragment)
79 pstruappinfo->uplink.prevStartTime = packet->pstruAppData->dStartTime;
80 pstruappinfo->uplink.prevEndTime = packet->pstruAppData->dEndTime;
81 pstruappinfo->uplink.prevPacketLatency = latency;
82 }
83
84 else if (TwoWayApplicationflag == 1 && linkType == 2)
85 {
86 if (pstruappinfo->downlink.prevPacketLatency == -1 || packet->nPacketId == pstruappinfo->downlink.firstPacketReceived)
87 {
88 pstruappinfo->downlink.firstPacketReceived = packet->nPacketId;
89 if (packet->pstruAppData->nSegmentId == 0 || packet->pstruAppData->nSegmentId == 1)
90 jitter = 0;
91 else
92 jitter = fabs(latency - pstruappinfo->downlink.prevPacketLatency);
93 }
94 else
95 {
96 jitter = fabs(latency - pstruappinfo->downlink.prevPacketLatency);
97
98 }
99 if (packet->pstruAppData->nSegmentId == 0 || packet->pstruAppData->nPacketFragment == Segment_LastFragment)
100 pstruappinfo->downlink.prevStartTime = packet->pstruAppData->dStartTime;
101 pstruappinfo->downlink.prevEndTime = packet->pstruAppData->dEndTime;
102 pstruappinfo->downlink.prevPacketLatency = latency;
103
104 }
105
106 else
107 {
108 fprintf(stderr, "Unknown Application and Link Type");
109 }
110
111 fprintf(fpApp, "%s,%d,%s,",
112 Appname, pstruappinfo->nConfigId, DEVICE_NAME(packet->nSourceId));
113
114 fprintf(fpApp, "%s,%lld,%d,",
115 DEVICE_NAME(nDestinationId), packet->nPacketId, packet->pstruAppData->nSegmentId);
116
117 fprintf(fpApp, "%lf,%lf,%lf,",
118 (packet->pstruAppData->dStartTime / MILLISECOND), (packet->pstruAppData->dEndTime / MILLISECOND), packet->pstruAppData->dPacketSize);
119
120 fprintf(fpApp, "%lf,%lf,-1,",
121 latency, jitter); // -1 is logged for throughput calculations
122
123 fprintf(fpApp, "\n");
124}
125
126void close_application_log()
127{
128 if (fpApp)
129 fclose(fpApp);
130}
131
132bool get_protocol_log_status(char* logname)
133{
134 FILE* fp;
135 char str[BUFSIZ];
136 sprintf(str, "%s/%s", pszIOPath, "ProtocolLogsConfig.txt");
137 fp = fopen(str, "r");
138 if (!fp)
139 return false;
140
141 char data[BUFSIZ];
142 while (fgets(data, BUFSIZ, fp))
143 {
144 lskip(data);
145 sprintf(str, "%s=true", logname);
146 if (!_strnicmp(data, str, strlen(str)))
147 {
148 fclose(fp);
149 return true;
150 }
151 }
152 fclose(fp);
153
154 return false;
155}